[613] | 1 | MAGDHWS ;WOIFO/PMK - Capture Consult/GMRC data ; 03/16/2007 12:48
|
---|
| 2 | ;;3.0;IMAGING;**10,11,51,84,85**;16-March-2007;;Build 1039
|
---|
| 3 | ;; Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | ;; +---------------------------------------------------------------+
|
---|
| 5 | ;; | Property of the US Government. |
|
---|
| 6 | ;; | No permission to copy or redistribute this software is given. |
|
---|
| 7 | ;; | Use of unreleased versions of this software requires the user |
|
---|
| 8 | ;; | to execute a written test agreement with the VistA Imaging |
|
---|
| 9 | ;; | Development Office of the Department of Veterans Affairs, |
|
---|
| 10 | ;; | telephone (301) 734-0100. |
|
---|
| 11 | ;; | The Food and Drug Administration classifies this software as |
|
---|
| 12 | ;; | a medical device. As such, it may not be changed in any way. |
|
---|
| 13 | ;; | Modifications to this software may result in an adulterated |
|
---|
| 14 | ;; | medical device under 21CFR820, the use of which is considered |
|
---|
| 15 | ;; | to be a violation of US Federal Statutes. |
|
---|
| 16 | ;; +---------------------------------------------------------------+
|
---|
| 17 | ;;
|
---|
| 18 | ; Called from PROTOCOL called MAGD APPOINTMENT (^ORD(101,...))
|
---|
| 19 | ; through the scheduling package
|
---|
| 20 | ;
|
---|
| 21 | N %,AFTERSTS,APTSCHED,CLINIC,CONSULTM,CUTOFF,DATETIME
|
---|
| 22 | N DEL,DEL2,DEL3,DEL4,DEL5,DFN,DIVISION,DONE,FILLER1,FMDATE,FMDATETM
|
---|
| 23 | N GMRCIEN,HL,IGNORE,IREQ,ITYPCODE,ITYPNAME,MSGTYPE,REQUEST
|
---|
| 24 | N SERVICE,STATUS,UNKNOWN,X,Y,Z
|
---|
| 25 | ;
|
---|
| 26 | Q:$P($G(SDATA("AFTER","STATUS")),"^",3)="" ; Not a valid appointment
|
---|
| 27 | ;
|
---|
| 28 | D INIT^MAGDHW0 ; initialize variables
|
---|
| 29 | D NOW^%DTC S FMDATE=%\1,FMDATETM=%
|
---|
| 30 | S %H=%H-90 D TT^%DTC S CUTOFF=X ; cutoff date is 90 days ago
|
---|
| 31 | S DFN=$P(SDATA,"^",2),DATETIME=$P(SDATA,"^",3),CLINIC=$P(SDATA,"^",4)
|
---|
| 32 | S APTSCHED("CLINIC IEN")=CLINIC,APTSCHED("FM DATETIME")=DATETIME
|
---|
| 33 | S AFTERSTS=SDATA("AFTER","STATUS"),X=$P(AFTERSTS,"^",3)
|
---|
| 34 | ; appointment management transactions from ^SD(409.63)
|
---|
| 35 | S FILLER1="" D Q:FILLER1=""
|
---|
| 36 | . I X["CHECK IN" S FILLER1="SDAM-CHECKIN" Q
|
---|
| 37 | . I X["CHECKED IN" S FILLER1="SDAM-CHECKIN" Q
|
---|
| 38 | . I X["CHECK OUT" S FILLER1="SDAM-CHECKOUT" Q
|
---|
| 39 | . I X["CHECKED OUT" S FILLER1="SDAM-CHECKOUT" Q
|
---|
| 40 | . I X["AUTO RE-" S FILLER1="SDAM-SCHEDULED" Q
|
---|
| 41 | . I X["AUTO-RE" S FILLER1="SDAM-SCHEDULED" Q
|
---|
| 42 | . I X["ACTION REQUIRED" S FILLER1="SDAM-SCHEDULED" Q
|
---|
| 43 | . I X["ACT REQ" S FILLER1="SDAM-SCHEDULED" Q
|
---|
| 44 | . I X["NON-COUNT" S FILLER1="SDAM-SCHEDULED" Q
|
---|
| 45 | . I X["CANCELLED" S FILLER1="SDAM-CANCELLED" Q
|
---|
| 46 | . I X["NO-SHOW" S FILLER1="SDAM-CANCELLED" Q
|
---|
| 47 | . I X["DELETED" S FILLER1="SDAM-CANCELLED" Q
|
---|
| 48 | . I X["FUTURE" S FILLER1="SDAM-FUTURE" Q
|
---|
| 49 | . I X["NO ACTION TAKEN" S FILLER1="SDAM-SCHEDULED" Q
|
---|
| 50 | . I X["NO ACT TAKN" S FILLER1="SDAM-SCHEDULED" Q
|
---|
| 51 | . I X["INPATIENT" S FILLER1="SDAM-SCHEDULED" Q
|
---|
| 52 | . ;
|
---|
| 53 | . W !!,"Unexpected Status: """,X,""" in protocol MAGD APPOINTMENT."
|
---|
| 54 | . W !,"Please notify Customer Support"
|
---|
| 55 | . W !!,"Press <Enter> to continue: " R X:$G(DTIME,300)
|
---|
| 56 | . Q
|
---|
| 57 | ;
|
---|
| 58 | S APTSCHED("CLINIC NAME")=$S(CLINIC:$$GET1^DIQ(44,CLINIC,.01),1:"")
|
---|
| 59 | ;
|
---|
| 60 | ; find requests that can be performed in this clinic
|
---|
| 61 | D SEARCH^MAGDGMRC(DFN,CUTOFF,CLINIC,.REQUEST)
|
---|
| 62 | ;
|
---|
| 63 | ; output an HL7 message for each request related to this appointment
|
---|
| 64 | F IREQ=1:1:REQUEST D
|
---|
| 65 | . S GMRCIEN=$P(REQUEST(IREQ),"^",1),SERVICE=$P(REQUEST(IREQ),"^",2)
|
---|
| 66 | . S STATUS=$P(REQUEST(IREQ),"^",3)
|
---|
| 67 | . S IGNORE=1 D SERVICE^MAGDHWC Q:IGNORE ; not a service of interest
|
---|
| 68 | . ; if {pending, active, scheduled, partially resulted, or complete}
|
---|
| 69 | . I "^p^a^s^pr^c^"[("^"_STATUS_"^") D
|
---|
| 70 | . . ; completed requests can only be checked out or cancelled
|
---|
| 71 | . . I STATUS="c","SDAM-CHECKOUT^SDAM-CANCELLED"'[FILLER1 Q
|
---|
| 72 | . . D MESSAGE("S")
|
---|
| 73 | . . Q
|
---|
| 74 | . Q
|
---|
| 75 | Q
|
---|
| 76 | ;
|
---|
| 77 | MESSAGE(MSGTYPE) ; invoked above and also from ^MAGDHWC for the initial order
|
---|
| 78 | N CONSULT,HL7,MSG,NEXT,OBXSEGNO,ORCTRL,ORSTATUS
|
---|
| 79 | I MSGTYPE="O" D ; ordered - set in ^MAGDHWC
|
---|
| 80 | . S MSGTYPE="ORDERED"
|
---|
| 81 | . S ORCTRL="NW" ; order control
|
---|
| 82 | . S ORSTATUS="IP" ; order status
|
---|
| 83 | . Q
|
---|
| 84 | E D
|
---|
| 85 | . S MSGTYPE="SCHEDULED"
|
---|
| 86 | . S ORCTRL="SC" ; order control -- status changed
|
---|
| 87 | . S ORSTATUS="ZC" ; scheduling
|
---|
| 88 | . Q
|
---|
| 89 | D MSH^HLFNC2(.HL,100000,.MSG) S $P(MSG,DEL,9)="ORM"
|
---|
| 90 | S NEXT=0
|
---|
| 91 | S NEXT=NEXT+1,HL7(NEXT)=MSG D MSH^MAGDHWA
|
---|
| 92 | S NEXT=NEXT+1,HL7(NEXT)="PID",$P(HL7(NEXT),DEL,1+3)=DFN
|
---|
| 93 | S NEXT=NEXT+1,HL7(NEXT)="PV1"
|
---|
| 94 | D PID^MAGDHWA ; generate PID and PV1 segments
|
---|
| 95 | S NEXT=NEXT+1,HL7(NEXT)=$$ORC D ORC^MAGDHWA
|
---|
| 96 | S NEXT=NEXT+1,HL7(NEXT)=$$OBR D OBR^MAGDHWA
|
---|
| 97 | S NEXT=NEXT+1,HL7(NEXT)=$$ZSV D ZSV^MAGDHWA
|
---|
| 98 | S NEXT=NEXT+1,NEXT=$$OBX(NEXT)
|
---|
| 99 | D ALLERGY^MAGDHWA,POSTINGS^MAGDHWA
|
---|
| 100 | D OUTPUT^MAGDHW0
|
---|
| 101 | Q
|
---|
| 102 | ;
|
---|
| 103 | PV1() ; build a PV1 segment
|
---|
| 104 | N X,Z
|
---|
| 105 | S FROM=$$GET1^DIQ(123,GMRCIEN,.04,"I") ; patient location
|
---|
| 106 | S Z=FROM_DEL3_$S(FROM:$$GET1^DIQ(44,FROM,.01),1:"")_DEL3_SERVICE
|
---|
| 107 | S $P(X,DEL,10)=Z
|
---|
| 108 | Q "PV1"_DEL_X
|
---|
| 109 | ;
|
---|
| 110 | ORC() ; build an ORC segment
|
---|
| 111 | N ORC,ORCPLCR,ORURG
|
---|
| 112 | S ORCPLCR=$$GET1^DIQ(123,GMRCIEN,10,"I") ; sending provider
|
---|
| 113 | D ORC^GMRCHL7(GMRCIEN,ORCTRL,ORCPLCR,,FMDATETM)
|
---|
| 114 | S $P(ORC,DEL,5+1)=ORSTATUS
|
---|
| 115 | Q ORC
|
---|
| 116 | ;
|
---|
| 117 | ZSV() ; build a ZSV segment
|
---|
| 118 | N ZSV
|
---|
| 119 | D ZSV^GMRCHL7(GMRCIEN)
|
---|
| 120 | Q ZSV
|
---|
| 121 | ;
|
---|
| 122 | OBR() ; build an OBR segment
|
---|
| 123 | N NOTIFY,OBR
|
---|
| 124 | D OBR^GMRCHL72(GMRCIEN,"",FMDATETM)
|
---|
| 125 | Q OBR
|
---|
| 126 | ;
|
---|
| 127 | OBX(NEXT) ; build one or more OBX segments
|
---|
| 128 | N GMRCND,GMRCND1,I,J,OBX,X
|
---|
| 129 | D OBX^GMRCHL72(GMRCIEN)
|
---|
| 130 | S OBXSEGNO=0
|
---|
| 131 | F I=1:1 Q:'$D(OBX(I)) D
|
---|
| 132 | . D OBX1(OBX(I))
|
---|
| 133 | . I $D(OBX(I,1)) S X=$P(OBX(I),DEL,1,5) F J=1:1 Q:'$D(OBX(I,J)) D
|
---|
| 134 | . . D OBX1(X_DEL_OBX(I,J))
|
---|
| 135 | . . Q
|
---|
| 136 | . Q
|
---|
| 137 | Q NEXT
|
---|
| 138 | ;
|
---|
| 139 | OBX1(RECORD) ; store one OBX segment into the HL7 array
|
---|
| 140 | S HL7(NEXT)=RECORD
|
---|
| 141 | S OBXSEGNO=$P(RECORD,DEL,2) ; get the highest value of OBXSEGNO
|
---|
| 142 | S NEXT=NEXT+1
|
---|
| 143 | Q
|
---|