- GMRCHL7B ;SLC/DCM,MA,JFR - Process data from GMRCHL7A ;16-Apr-2014 14:23;DU
- ;;3.0;CONSULT/REQUEST TRACKING;**1,5,12,21,17,22,33,1004**;DEC 27, 1997;Build 12
- ;IHS/MSC/MGH major changes in patch 1004 to accomodate SNOMED and
- ;V CarePlaning files for MU stage II
- ; This routine invokes IA #3991
- ;
- NEW(MESSAGE) ;Add new order
- ;GMRCO=^GMR(123,IFN, the new file number in file ^GMR(123,
- ;GMRCORFN=OE/RR file number GMRCWARD=ward patient is on
- ;GMRCSS=service consult sent to GMRCAD=date/time of request
- ;GMRCPRI=procedure/request GMRCURGI=urgency
- ;GMRCATN=attention GMRCSTS=OE/RR order status
- ;GMRCORNP=patient's provider GMRCTYPE=request type (request or consult)
- ;GMRCSBR=service rendered on what basis (Inpatient, or Outpatient)
- ;GMRCRFQ=reason for request array - word processing fields
- ;GMRCOTXT=order display text from dialog or orderable item
- ;GMRCPRDG=provisional DX
- ;GMRCPRCD=provisional DX code
- ;GMRCPRPB=problem IEN
- ;
- ; Output:
- ; MESSAGE = rejection message if problems encountered while filing
- ;
- ; check for inactive ICD-9 code in Prov. DX
- ;I $L($G(GMRCPRCD)) D I $D(MESSAGE) Q ; rejected due to inactive code
- ;. I +$$STATCHK^ICDAPIU(GMRCPRCD,DT) Q ;code is OK
- ;. S MESSAGE="Provisional DX code is inactive. Unable to file request."
- ;
- N DIC,DLAYGO,X,DR,DIE,GMRCADUZ,GMRCCP,SNOMED
- S DIC="^GMR(123,",DIC(0)="L",X="""N""",DLAYGO=123 D ^DIC K DLAYGO Q:Y<1
- ; Patch #21 changed GMRCA=1 to GMRCA=2
- S (DA,GMRCO)=+Y,GMRCSTS=5,GMRCA=2,DIE=DIC
- L +^GMR(123,GMRCO)
- S DR=".02////^S X=DFN;.03////^S X=GMRCORFN;.04////^S X=GMRCWARD;.05////^S X=GMRCFAC;.06////^S X=$G(GMRCOFN);1////^S X=GMRCSS;2////^S X=$G(GMRCWARD);3////^S X=GMRCAD;4////^S X=GMRCPRI;5////^S X=GMRCURGI;7////^S X=$G(GMRCATN)"
- D ^DIE
- I GMRCOTXT=$$GET1^DIQ(123.5,+GMRCSS,.01) S GMRCOTXT=""
- ;Added new field .1 to DR on 7/11/98 to save the order text
- S DR="6////^S X=GMRCPLI;8////^S X=GMRCSTS;9////^S X=GMRCA;10////^S X=GMRCORNP;13////^S X=GMRCTYPE;14////^S X=$G(GMRCSBR);30////^S X=$G(GMRCPRDG);.1////^S X=$G(GMRCOTXT)"
- I $D(GMRCPRCD) S DR=DR_";30.1///^S X=GMRCPRCD"
- S GMRCCP=$P($G(^GMR(123.3,+GMRCPRI,0)),U,4) I GMRCCP D ;file CP
- . S DR=DR_";1.01///^S X=GMRCCP"
- D ;check to see if an IFC and add .07 ROUTING FACILITY
- . I $G(GMRCPRI) D Q ;see if procedure is mapped
- .. I '$D(^GMR(123.3,+GMRCPRI,"IFC")) Q
- .. N IFC S IFC=$G(^GMR(123.3,+GMRCPRI,"IFC"))
- .. I '+IFC Q ; no ifc routing site
- .. I '$L($P(^GMR(123.3,+GMRCPRI,"IFC"),U,2)) Q ;no remote proc name
- .. S DR=DR_";.07////"_+IFC_";.125////P"
- . I '$G(GMRCPRI) D Q ;see if service is mapped
- .. I '$D(^GMR(123.5,+GMRCSS,"IFC")) Q
- .. N IFC S IFC=$G(^GMR(123.5,+GMRCSS,"IFC"))
- .. I '+IFC Q ; no ifc routing site
- .. I '$L($P(IFC,U,2)) Q ;no remote service name
- .. S DR=DR_";.07////"_+IFC_";.125////P;.131////"_$P(IFC,U,2)
- . Q
- D ^DIE
- I $O(GMRCRFQ(0)) D REASON
- ;IHS/MSC/MGH Patch 1004 Add SNOMED CT if stores
- S SNOMED=$$GET1^DIQ(123.5,GMRCSS,9999999.01)
- I SNOMED'="" D
- .I '$D(GMRCPRPB) S GMRCPRPB=""
- .S DR="9999999.01////"_SNOMED_";9999999.02////"_GMRCPRPB
- .D ^DIE
- L -^GMR(123,GMRCO)
- S GMRCA=1 D AUDIT0^GMRCHL7U
- I $D(GMRCXMF),$D(GMRCOFN) S $P(^GMR(123,GMRCO,0),"^",21)=GMRCOFN
- I $D(GMRCACTN) S GMRCADUZ(GMRCACTN)=""
- D ALERT^GMRCHL7U(DFN,GMRCSS,GMRCPRI,GMRCO,GMRCURGI,"")
- D PRNT^GMRCUTL1(GMRCSS,GMRCO) ;contains print audit update
- D EXIT
- Q
- DC(GMRCO,ACTRL) ;Discontinue request from OERR
- ;Denied request also gets this action. Deny request updates status to dc
- ;GMRCO=IEN of record in file ^GMR(123, i.e., ^GMR(123,DA,
- ;ACTRL=GMRCCTRL=control code defining action -
- ; DC control code = action DC for discontinued
- ; CA control code = action DY for denied
- ;Update the last action taken, order status, and processing activity
- Q:'$L(GMRCO)
- Q:'$D(^GMR(123,+GMRCO,0))
- N GMRCACT,GMRCSVC,GMRCDFN,GMRCFL,GMRCADUZ,GMRCRQR,DA
- S GMRCACT=$O(^GMR(123.1,"D",ACTRL,0))
- S GMRCSTS=$P(^GMR(123.1,GMRCACT,0),"^",2)
- S DIE="^GMR(123,",DA=GMRCO
- S DR="8////^S X=GMRCSTS;9////^S X=GMRCACT" ; upd status + last action
- D ^DIE
- D AUDIT0^GMRCHL7U
- ; send 513 back through service printer if order DC'd
- I $G(ACTRL)="DC",$$DCPRNT^GMRCUTL1(GMRCO,DUZ) D
- . D PRNT^GMRCUTL1(+$P(^GMR(123,GMRCO,0),U,5),GMRCO)
- S GMRCDFN=$P(^GMR(123,+GMRCO,0),"^",2)
- S GMRCFL=$$DCNOTE^GMRCADC(GMRCO,DUZ),GMRCADUZ=""
- S GMRCRQR=+$P($G(^GMR(123,+GMRCO,0)),"^",14)
- I +GMRCRQR,GMRCRQR'=DUZ S GMRCADUZ(GMRCRQR)=""
- S GMRCSVC=$P($G(^GMR(123,+GMRCO,0)),"^",5)
- I +GMRCSVC S GMRCSVC=$S($D(^GMR(123.5,GMRCSVC,.1)):^(.1),1:$P(^GMR(123.5,GMRCSVC,0),"^",1))
- E S GMRCSVC="Unknown Service: Consult # "_GMRCO
- S GMRCORTX=$S(ACTRL="DC":"Discontinued",1:"Cancelled")
- S GMRCORTX=GMRCORTX_" Consult "_$$ORTX^GMRCAU(GMRCO)
- N NOTYPE S NOTYPE=$S(ACTRL="DC":23,1:30)
- D MSG^GMRCP(GMRCDFN,GMRCORTX,+GMRCO,NOTYPE,.GMRCADUZ,GMRCFL)
- D EXIT
- Q
- MODIFY ;Change an order/request when an HL7 'XX' code is received
- ;This is currently not used.
- ; When Consults sends an XX, CPRS returns NA with a new order ien.
- ;GMRCACT=processing activity - from file ^GMR(123.1,
- S DIE="^GMR(123,",DA=+GMRCO
- S GMRCWARD=$G(GMRCWARD),GMRCPRI=$G(GMRCPRI),GMRCURGI=$G(GMRCURGI),GMRCSTS=$G(GMRCSTS),GMRCTYPE=$G(GMRCTYPE),GMRCSS=$G(GMRCSS)
- S GMRCACT=$O(^GMR(123.1,"D",GMRCTRLC,0))
- S GMRCSTS=$P(^GMR(123.1,GMRCACT,0),"^",2)
- S DIE=123,DR=".04////^S X=$G(GMRCWARD);1////^S X=$G(GMRCSS);4////^S X=$G(GMRCPRI);5////^S X=$G(GMRCURGI);8////^S X=$G(GMRCSTS);9////^S X=GMRCACT"
- D ^DIE
- D AUDIT0^GMRCHL7U
- D EXIT Q
- REASON ;load the reason for request into ^GMR(123,IFN,20
- S ^GMR(123,GMRCO,20,0)="^^^"_$S($D(GMRCDA):GMRCDA,1:DT)_"^"
- S L=0,LN=1 F S L=$O(GMRCRFQ(L)) Q:L="" S ^GMR(123,GMRCO,20,LN,0)=GMRCRFQ(L),LN=LN+1
- S LN=LN-1,$P(^GMR(123,GMRCO,20,0),"^",3)=LN
- K L,LN
- Q
- ;GMRCARY= GMRCNTC array
- S LN=0,^GMR(123,GMRCO,40,DA,1,0)="^^^^"_$P(GMRCDA,".",1)_"^"
- F S LN=$O(GMRCARY(LN)) Q:LN="" S ^GMR(123,+GMRCO,40,DA,1,LN,0)=GMRCARY(LN),LN1=LN
- S $P(^GMR(123,+GMRCO,40,DA,1,0),"^",3,4)=LN1_"^"_LN1
- K LN,LN1 Q
- Q
- EXIT ;kill off all variables
- K DA,DIC,DIE,DR,GMRCORTX,GMRCADUZ
- Q
- GMRCHL7B ;SLC/DCM,MA,JFR - Process data from GMRCHL7A ;16-Apr-2014 14:23;DU
- +1 ;;3.0;CONSULT/REQUEST TRACKING;**1,5,12,21,17,22,33,1004**;DEC 27, 1997;Build 12
- +2 ;IHS/MSC/MGH major changes in patch 1004 to accomodate SNOMED and
- +3 ;V CarePlaning files for MU stage II
- +4 ; This routine invokes IA #3991
- +5 ;
- NEW(MESSAGE) ;Add new order
- +1 ;GMRCO=^GMR(123,IFN, the new file number in file ^GMR(123,
- +2 ;GMRCORFN=OE/RR file number GMRCWARD=ward patient is on
- +3 ;GMRCSS=service consult sent to GMRCAD=date/time of request
- +4 ;GMRCPRI=procedure/request GMRCURGI=urgency
- +5 ;GMRCATN=attention GMRCSTS=OE/RR order status
- +6 ;GMRCORNP=patient's provider GMRCTYPE=request type (request or consult)
- +7 ;GMRCSBR=service rendered on what basis (Inpatient, or Outpatient)
- +8 ;GMRCRFQ=reason for request array - word processing fields
- +9 ;GMRCOTXT=order display text from dialog or orderable item
- +10 ;GMRCPRDG=provisional DX
- +11 ;GMRCPRCD=provisional DX code
- +12 ;GMRCPRPB=problem IEN
- +13 ;
- +14 ; Output:
- +15 ; MESSAGE = rejection message if problems encountered while filing
- +16 ;
- +17 ; check for inactive ICD-9 code in Prov. DX
- +18 ;I $L($G(GMRCPRCD)) D I $D(MESSAGE) Q ; rejected due to inactive code
- +19 ;. I +$$STATCHK^ICDAPIU(GMRCPRCD,DT) Q ;code is OK
- +20 ;. S MESSAGE="Provisional DX code is inactive. Unable to file request."
- +21 ;
- +22 NEW DIC,DLAYGO,X,DR,DIE,GMRCADUZ,GMRCCP,SNOMED
- +23 SET DIC="^GMR(123,"
- SET DIC(0)="L"
- SET X="""N"""
- SET DLAYGO=123
- DO ^DIC
- KILL DLAYGO
- IF Y<1
- QUIT
- +24 ; Patch #21 changed GMRCA=1 to GMRCA=2
- +25 SET (DA,GMRCO)=+Y
- SET GMRCSTS=5
- SET GMRCA=2
- SET DIE=DIC
- +26 LOCK +^GMR(123,GMRCO)
- +27 SET DR=".02////^S X=DFN;.03////^S X=GMRCORFN;.04////^S X=GMRCWARD;.05////^S X=GMRCFAC;.06////^S X=$G(GMRCOFN);1////^S X=GMRCSS;2////^S X=$G(GMRCWARD);3////^S X=GMRCAD;4////^S X=GMRCPRI;5////^S X=GMRCURGI;7////^S X=$G(GMRCATN)"
- +28 DO ^DIE
- +29 IF GMRCOTXT=$$GET1^DIQ(123.5,+GMRCSS,.01)
- SET GMRCOTXT=""
- +30 ;Added new field .1 to DR on 7/11/98 to save the order text
- +31 SET DR="6////^S X=GMRCPLI;8////^S X=GMRCSTS;9////^S X=GMRCA;10////^S X=GMRCORNP;13////^S X=GMRCTYPE;14////^S X=$G(GMRCSBR);30////^S X=$G(GMRCPRDG);.1////^S X=$G(GMRCOTXT)"
- +32 IF $DATA(GMRCPRCD)
- SET DR=DR_";30.1///^S X=GMRCPRCD"
- +33 ;file CP
- SET GMRCCP=$PIECE($GET(^GMR(123.3,+GMRCPRI,0)),U,4)
- IF GMRCCP
- Begin DoDot:1
- +34 SET DR=DR_";1.01///^S X=GMRCCP"
- End DoDot:1
- +35 ;check to see if an IFC and add .07 ROUTING FACILITY
- Begin DoDot:1
- +36 ;see if procedure is mapped
- IF $GET(GMRCPRI)
- Begin DoDot:2
- +37 IF '$DATA(^GMR(123.3,+GMRCPRI,"IFC"))
- QUIT
- +38 NEW IFC
- SET IFC=$GET(^GMR(123.3,+GMRCPRI,"IFC"))
- +39 ; no ifc routing site
- IF '+IFC
- QUIT
- +40 ;no remote proc name
- IF '$LENGTH($PIECE(^GMR(123.3,+GMRCPRI,"IFC"),U,2))
- QUIT
- +41 SET DR=DR_";.07////"_+IFC_";.125////P"
- End DoDot:2
- QUIT
- +42 ;see if service is mapped
- IF '$GET(GMRCPRI)
- Begin DoDot:2
- +43 IF '$DATA(^GMR(123.5,+GMRCSS,"IFC"))
- QUIT
- +44 NEW IFC
- SET IFC=$GET(^GMR(123.5,+GMRCSS,"IFC"))
- +45 ; no ifc routing site
- IF '+IFC
- QUIT
- +46 ;no remote service name
- IF '$LENGTH($PIECE(IFC,U,2))
- QUIT
- +47 SET DR=DR_";.07////"_+IFC_";.125////P;.131////"_$PIECE(IFC,U,2)
- End DoDot:2
- QUIT
- +48 QUIT
- End DoDot:1
- +49 DO ^DIE
- +50 IF $ORDER(GMRCRFQ(0))
- DO REASON
- +51 ;IHS/MSC/MGH Patch 1004 Add SNOMED CT if stores
- +52 SET SNOMED=$$GET1^DIQ(123.5,GMRCSS,9999999.01)
- +53 IF SNOMED'=""
- Begin DoDot:1
- +54 IF '$DATA(GMRCPRPB)
- SET GMRCPRPB=""
- +55 SET DR="9999999.01////"_SNOMED_";9999999.02////"_GMRCPRPB
- +56 DO ^DIE
- End DoDot:1
- +57 LOCK -^GMR(123,GMRCO)
- +58 SET GMRCA=1
- DO AUDIT0^GMRCHL7U
- +59 IF $DATA(GMRCXMF)
- IF $DATA(GMRCOFN)
- SET $PIECE(^GMR(123,GMRCO,0),"^",21)=GMRCOFN
- +60 IF $DATA(GMRCACTN)
- SET GMRCADUZ(GMRCACTN)=""
- +61 DO ALERT^GMRCHL7U(DFN,GMRCSS,GMRCPRI,GMRCO,GMRCURGI,"")
- +62 ;contains print audit update
- DO PRNT^GMRCUTL1(GMRCSS,GMRCO)
- +63 DO EXIT
- +64 QUIT
- DC(GMRCO,ACTRL) ;Discontinue request from OERR
- +1 ;Denied request also gets this action. Deny request updates status to dc
- +2 ;GMRCO=IEN of record in file ^GMR(123, i.e., ^GMR(123,DA,
- +3 ;ACTRL=GMRCCTRL=control code defining action -
- +4 ; DC control code = action DC for discontinued
- +5 ; CA control code = action DY for denied
- +6 ;Update the last action taken, order status, and processing activity
- +7 IF '$LENGTH(GMRCO)
- QUIT
- +8 IF '$DATA(^GMR(123,+GMRCO,0))
- QUIT
- +9 NEW GMRCACT,GMRCSVC,GMRCDFN,GMRCFL,GMRCADUZ,GMRCRQR,DA
- +10 SET GMRCACT=$ORDER(^GMR(123.1,"D",ACTRL,0))
- +11 SET GMRCSTS=$PIECE(^GMR(123.1,GMRCACT,0),"^",2)
- +12 SET DIE="^GMR(123,"
- SET DA=GMRCO
- +13 ; upd status + last action
- SET DR="8////^S X=GMRCSTS;9////^S X=GMRCACT"
- +14 DO ^DIE
- +15 DO AUDIT0^GMRCHL7U
- +16 ; send 513 back through service printer if order DC'd
- +17 IF $GET(ACTRL)="DC"
- IF $$DCPRNT^GMRCUTL1(GMRCO,DUZ)
- Begin DoDot:1
- +18 DO PRNT^GMRCUTL1(+$PIECE(^GMR(123,GMRCO,0),U,5),GMRCO)
- End DoDot:1
- +19 SET GMRCDFN=$PIECE(^GMR(123,+GMRCO,0),"^",2)
- +20 SET GMRCFL=$$DCNOTE^GMRCADC(GMRCO,DUZ)
- SET GMRCADUZ=""
- +21 SET GMRCRQR=+$PIECE($GET(^GMR(123,+GMRCO,0)),"^",14)
- +22 IF +GMRCRQR
- IF GMRCRQR'=DUZ
- SET GMRCADUZ(GMRCRQR)=""
- +23 SET GMRCSVC=$PIECE($GET(^GMR(123,+GMRCO,0)),"^",5)
- +24 IF +GMRCSVC
- SET GMRCSVC=$SELECT($DATA(^GMR(123.5,GMRCSVC,.1)):^(.1),1:$PIECE(^GMR(123.5,GMRCSVC,0),"^",1))
- +25 IF '$TEST
- SET GMRCSVC="Unknown Service: Consult # "_GMRCO
- +26 SET GMRCORTX=$SELECT(ACTRL="DC":"Discontinued",1:"Cancelled")
- +27 SET GMRCORTX=GMRCORTX_" Consult "_$$ORTX^GMRCAU(GMRCO)
- +28 NEW NOTYPE
- SET NOTYPE=$SELECT(ACTRL="DC":23,1:30)
- +29 DO MSG^GMRCP(GMRCDFN,GMRCORTX,+GMRCO,NOTYPE,.GMRCADUZ,GMRCFL)
- +30 DO EXIT
- +31 QUIT
- MODIFY ;Change an order/request when an HL7 'XX' code is received
- +1 ;This is currently not used.
- +2 ; When Consults sends an XX, CPRS returns NA with a new order ien.
- +3 ;GMRCACT=processing activity - from file ^GMR(123.1,
- +4 SET DIE="^GMR(123,"
- SET DA=+GMRCO
- +5 SET GMRCWARD=$GET(GMRCWARD)
- SET GMRCPRI=$GET(GMRCPRI)
- SET GMRCURGI=$GET(GMRCURGI)
- SET GMRCSTS=$GET(GMRCSTS)
- SET GMRCTYPE=$GET(GMRCTYPE)
- SET GMRCSS=$GET(GMRCSS)
- +6 SET GMRCACT=$ORDER(^GMR(123.1,"D",GMRCTRLC,0))
- +7 SET GMRCSTS=$PIECE(^GMR(123.1,GMRCACT,0),"^",2)
- +8 SET DIE=123
- SET DR=".04////^S X=$G(GMRCWARD);1////^S X=$G(GMRCSS);4////^S X=$G(GMRCPRI);5////^S X=$G(GMRCURGI);8////^S X=$G(GMRCSTS);9////^S X=GMRCACT"
- +9 DO ^DIE
- +10 DO AUDIT0^GMRCHL7U
- +11 DO EXIT
- QUIT
- REASON ;load the reason for request into ^GMR(123,IFN,20
- +1 SET ^GMR(123,GMRCO,20,0)="^^^"_$SELECT($DATA(GMRCDA):GMRCDA,1:DT)_"^"
- +2 SET L=0
- SET LN=1
- FOR
- SET L=$ORDER(GMRCRFQ(L))
- IF L=""
- QUIT
- SET ^GMR(123,GMRCO,20,LN,0)=GMRCRFQ(L)
- SET LN=LN+1
- +3 SET LN=LN-1
- SET $PIECE(^GMR(123,GMRCO,20,0),"^",3)=LN
- +4 KILL L,LN
- +5 QUIT
- +1 ;GMRCARY= GMRCNTC array
- +2 SET LN=0
- SET ^GMR(123,GMRCO,40,DA,1,0)="^^^^"_$PIECE(GMRCDA,".",1)_"^"
- +3 FOR
- SET LN=$ORDER(GMRCARY(LN))
- IF LN=""
- QUIT
- SET ^GMR(123,+GMRCO,40,DA,1,LN,0)=GMRCARY(LN)
- SET LN1=LN
- +4 SET $PIECE(^GMR(123,+GMRCO,40,DA,1,0),"^",3,4)=LN1_"^"_LN1
- +5 KILL LN,LN1
- QUIT
- +6 QUIT
- EXIT ;kill off all variables
- +1 KILL DA,DIC,DIE,DR,GMRCORTX,GMRCADUZ
- +2 QUIT