[623] | 1 | ALPBINP ;OIFO-DALLAS/SED/KC/MW BCMA - BCBU INPT TO HL7 ;5/2/2002
|
---|
| 2 | ;;3.0;BAR CODE MED ADMIN;**8**;Mar 2004
|
---|
| 3 | ;This routine will intercept the HL7 message that it sent from Pharmacy
|
---|
| 4 | ;to CPRS to update order information. The message is then parsed and
|
---|
| 5 | ;repackage so it can be sent to the BCBU workstation.
|
---|
| 6 | ;
|
---|
| 7 | ; Reference/IA
|
---|
| 8 | ; EN^PSJBCBU/3876
|
---|
| 9 | ; $$EN^VAFHLPID/263
|
---|
| 10 | ; $$EN^VAFHAPV1/4512
|
---|
| 11 | ; EN1^GMRADPT/10099
|
---|
| 12 | ; EN^PSJBCMA1/2829
|
---|
| 13 | ;
|
---|
| 14 | IPH(MSG) ;CAPTURE MESSAGE ARRAY FROM PHARMACY
|
---|
| 15 | N VAIN,ALPMSG
|
---|
| 16 | S ALPMSG=$S($L($G(MSG)):MSG,1:"MSG")
|
---|
| 17 | I '$O(@ALPMSG@(0)) Q "0^MSG^Missing Message Array"
|
---|
| 18 | S MSH=0
|
---|
| 19 | F S MSH=$O(@ALPMSG@(MSH)) Q:MSH'>0 Q:$E(@ALPMSG@(MSH),1,3)="MSH"
|
---|
| 20 | I +MSH'>0 Q "0^MSG^Missing MSH Segment Bad Message"
|
---|
| 21 | S MSFS=$E(@ALPMSG@(MSH),4,4)
|
---|
| 22 | S MSCS=$E(@ALPMSG@(MSH),5,5)
|
---|
| 23 | S MSCH=$E(@ALPMSG@(MSH),6,6)
|
---|
| 24 | S MSCTR=$E(@ALPMSG@(MSH),4,8)
|
---|
| 25 | ;The message is confirmed to be a Pharmacy message
|
---|
| 26 | I $P(@ALPMSG@(MSH),MSFS,3)'="PHARMACY" Q "1^^Not a Pharmacy Message"
|
---|
| 27 | ;A PID and PV1 segment is required for this message
|
---|
| 28 | S PID=0
|
---|
| 29 | F S PID=$O(@ALPMSG@(PID)) Q:PID'>0 Q:$E(@ALPMSG@(PID),1,3)="PID"
|
---|
| 30 | I +PID'>0 Q "0^MSG^Missing PID Segment Bad Message"
|
---|
| 31 | ;Also the patient must have an inpatient status
|
---|
| 32 | S PV1=0
|
---|
| 33 | F S PV1=$O(@ALPMSG@(PV1)) Q:PV1'>0 Q:$E(@ALPMSG@(PV1),1,3)="PV1"
|
---|
| 34 | I +PV1'>0 Q "0^MSG^Missing PV1 Segment Bad Message"
|
---|
| 35 | I $P(@ALPMSG@(PV1),MSFS,3)'="I" Q "1^^Not an Inpatient Pharmacy Message"
|
---|
| 36 | S ORC=0
|
---|
| 37 | F S ORC=$O(@ALPMSG@(ORC)) Q:ORC'>0 Q:$E(@ALPMSG@(ORC),1,3)="ORC"
|
---|
| 38 | I +ORC'>0 Q "0^MSG^Missing ORC Segment Bad Message"
|
---|
| 39 | ;RE-BUILDING THE MESSAGE FOR BCBU
|
---|
| 40 | S ALPDFN=$P(@ALPMSG@(PID),MSFS,4)
|
---|
| 41 | I +ALPDFN'>0 Q "0^MSG^Invalid or Missing Patient - PID"
|
---|
| 42 | S ALPORD=$P($P(@ALPMSG@(ORC),MSFS,4),MSCS,1)
|
---|
| 43 | I ALPORD="" Q "0^MSG^Invalid or Missing Order Number - ORC"
|
---|
| 44 | K ALPB
|
---|
| 45 | D EN^PSJBCBU(ALPDFN,ALPORD,.ALPB)
|
---|
| 46 | SEED ;Entry point for ^ALPBIND
|
---|
| 47 | D INIT
|
---|
| 48 | S SUB=0 F S SUB=$O(ALPB(SUB)) Q:'SUB D
|
---|
| 49 | . ;convert and move the message to the HLA array for transport
|
---|
| 50 | . S HLA("HLS",SUB)=$$CNV^ALPBUTL1(MSCTR,HLCTR,ALPB(SUB))
|
---|
| 51 | . ;Now check for continuations
|
---|
| 52 | . S SUB1=0
|
---|
| 53 | . F S SUB1=$O(ALPB(SUB,SUB1)) Q:'SUB1 D
|
---|
| 54 | . . S HLA("HLS",SUB,SUB1)=$$CNV^ALPBUTL1(MSCTR,HLCTR,ALPB(SUB,SUB1))
|
---|
| 55 | . I $E(HLA("HLS",SUB),1,3)="RXE" S RXE=SUB
|
---|
| 56 | . I $E(HLA("HLS",SUB),1,3)="PID" S PID=SUB
|
---|
| 57 | . I $E(HLA("HLS",SUB),1,3)="PV1" S PV1=SUB
|
---|
| 58 | K HLA("HLS",MSH)
|
---|
| 59 | I '$D(HLA("HLS",PID)) Q "0^MSG^Missing PID Segment Bad Message"
|
---|
| 60 | S ALPDFN=$P($P(HLA("HLS",PID),HLFS,4),HLCS,1)
|
---|
| 61 | I +ALPDFN'>0 Q "0^MSG^Invalid or Missing Patient - PID"
|
---|
| 62 | S HLA("HLS",PID)=$$EN^VAFHLPID(ALPDFN,"2,7,8,19")
|
---|
| 63 | ;Fix RXE segement for Administration Type
|
---|
| 64 | D RXE
|
---|
| 65 | ;Get the Division that the patient is associated with
|
---|
| 66 | D PDIV
|
---|
| 67 | I ALPDIV="DOM" Q "0^^Screen of DOMICILIARY"
|
---|
| 68 | I '$D(HLL("LINKS")) Q "0^HL7^Missing HLL Links Array Division # "_ALPDIV
|
---|
| 69 | ;SET NEW PV1
|
---|
| 70 | D NOW^%DTC
|
---|
| 71 | S STRING=$$EN^VAFHAPV1(ALPDFN,%,"2,3,7,18")
|
---|
| 72 | S HLA("HLS",PV1)=STRING
|
---|
| 73 | I +ORC>0 D
|
---|
| 74 | . S ALPST=$$STAT^ALPBUTL1($P(HLA("HLS",ORC),HLFS,6))
|
---|
| 75 | . Q:ALPST=""
|
---|
| 76 | . S $P(HLA("HLS",ORC),HLFS,6)=$P(HLA("HLS",ORC),HLFS,6)_HLCS_ALPST
|
---|
| 77 | D AL1
|
---|
| 78 | ;Capture message to review for testing before sending
|
---|
| 79 | D SEND
|
---|
| 80 | EXIT ;EXIT and kill
|
---|
| 81 | K HLA,SUB,SUB1,STRING,ALPLOC,HLCS,HLCTR,HLFS,MSCH,MSCS,MSCTR
|
---|
| 82 | K MSH,ORC,PID,PV1,RXE,RXR,ALPB,ALPBY,ALPBYN,ALPC,ALPDATA,ALPDFN
|
---|
| 83 | K ALPDT,ALPI,ALPII,ALPIV,ALPOPTS,ALPOR,ALPORD,ALPST
|
---|
| 84 | K ALPSTN,ALPSYM,EVENT,GMRA,GMRAL
|
---|
| 85 | Q ALPRSLT
|
---|
| 86 | INI() ;INTIAL SET UP ENTRY
|
---|
| 87 | G SEED
|
---|
| 88 | INIT ;CALL HL7 TO INITIALIZE MESSAGE VARIABLES
|
---|
| 89 | ;SET UP ENVIRONMENT FOR MESSAGE
|
---|
| 90 | K HL,HLA,HLECH,HLQ,ALPRSLT,ALPOPTS
|
---|
| 91 | S EVENT="PSB BCBU ORM SEND"
|
---|
| 92 | D INIT^HLFNC2(EVENT,.HL,1)
|
---|
| 93 | S HLCS=$E(HL("ECH")),HLCTR=HLFS_HL("ECH")
|
---|
| 94 | Q
|
---|
| 95 | SEND ;CALL HL7 TO TRANSMIT SINGLE MESSAGE
|
---|
| 96 | K ALPRSLT,ALPOPTS
|
---|
| 97 | D GENERATE^HLMA(EVENT,"LM",1,.ALPRSLT,"",.ALPOPTS)
|
---|
| 98 | Q
|
---|
| 99 | AL1 ;ALLERGY SEGMENT BUILD
|
---|
| 100 | ;The will build the ALP segment with the curent allergies
|
---|
| 101 | ;for the patient to be added to the message
|
---|
| 102 | N DFN
|
---|
| 103 | Q:+ALPDFN'>0
|
---|
| 104 | K GMRAL
|
---|
| 105 | S DFN=ALPDFN
|
---|
| 106 | S GMRA="0^0^111" ;DEFINES WHAT ALLERGIES TO RETURN
|
---|
| 107 | D EN1^GMRADPT
|
---|
| 108 | Q:'$D(GMRAL)
|
---|
| 109 | S ALPI=0,ALPC=1,ALPSYM=""
|
---|
| 110 | F S ALPI=$O(GMRAL(ALPI)) Q:+ALPI'>0 D
|
---|
| 111 | . S ALPADR=""
|
---|
| 112 | . I $P($P(GMRAL(ALPI),U,8),";",2)="P" S ALPADR="**ADR** "
|
---|
| 113 | . S ALPDATA="AL1"_HLFS_ALPC_HLFS_$P(GMRAL(ALPI),U,7)
|
---|
| 114 | . S ALPDATA=ALPDATA_HLFS_ALPI_HLCS_ALPADR_$E($P(GMRAL(ALPI),U,2),1,25)_HLCS_"VA120.8"
|
---|
| 115 | . ;S ALPII=0 F S ALPII=$O(GMRAL(ALPI,"S",ALPII)) Q:+ALPII'>0 D
|
---|
| 116 | . ;. S ALPSYM=ALPSYM_$P(GMRAL(ALPI,"S",ALPII),";",1)_HLCS
|
---|
| 117 | . ;S $P(ALPDATA,HLFS,6)=ALPSYM
|
---|
| 118 | . S HLA("HLS",$O(HLA("HLS",9999999),-1)+1)=ALPDATA
|
---|
| 119 | . S ALPC=ALPC+1
|
---|
| 120 | K GMRAL
|
---|
| 121 | Q
|
---|
| 122 | RXE ;
|
---|
| 123 | Q:+$G(RXE)'>0
|
---|
| 124 | K ^TMP("PSJ1",$J)
|
---|
| 125 | Q:'$D(HLA("HLS",RXE))
|
---|
| 126 | S DATA=HLA("HLS",RXE)
|
---|
| 127 | D EN^PSJBCMA1(ALPDFN,ALPORD,1)
|
---|
| 128 | S TYP=$P($G(^TMP("PSJ1",$J,4)),U,2)
|
---|
| 129 | Q:TYP="CONTINUOUS"
|
---|
| 130 | Q:TYP="FILL ON REQUEST"
|
---|
| 131 | S ALP1=$P(DATA,HLFS,2),ALP2=$P(ALP1,HLCS,2)
|
---|
| 132 | I ALP1[TYP Q
|
---|
| 133 | I ALP2[TYP Q
|
---|
| 134 | S $P(ALP2,"&",1)=$P(ALP2,"&",1)_" "_TYP
|
---|
| 135 | S $P(ALP1,HLCS,2)=ALP2,$P(DATA,HLFS,2)=ALP1
|
---|
| 136 | S HLA("HLS",RXE)=DATA
|
---|
| 137 | K TYP,ALP1,ALP2,^TMP("PSJ1",$J)
|
---|
| 138 | Q
|
---|
| 139 | PDIV ;PATIENT DIVISION
|
---|
| 140 | ;Check ALPBMDT Variable
|
---|
| 141 | S:+$G(ALPBMDT)'>0 ALPBMDT=0
|
---|
| 142 | S ALPDIV=$$DIV^ALPBUTL1(ALPDFN,ALPBMDT)
|
---|
| 143 | ;Screen Dom
|
---|
| 144 | Q:ALPDIV="DOM"
|
---|
| 145 | ;Now do I send the Message or not Based of Division
|
---|
| 146 | I $D(ALPHLL("LINKS")) M HLL("LINKS")=ALPHLL("LINKS")
|
---|
| 147 | I '$D(HLL("LINKS")) D GET^ALPBPARM(.HLL,ALPDIV)
|
---|
| 148 | Q
|
---|
| 149 | MEDL(ALPML) ;Use this entry to send MedLog messages
|
---|
| 150 | N VAIN
|
---|
| 151 | ;ALPML is the IEN of the MedLog for file #53.79
|
---|
| 152 | I '$D(ALPML) Q "0^ALPML^No Med-Log Number"
|
---|
| 153 | I '$D(^PSB(53.79,ALPML,0)) Q "0^"_ALPML_"^Med - Log Number Invalid"
|
---|
| 154 | ;First get the required HL7 Variables
|
---|
| 155 | D INIT
|
---|
| 156 | ;Need to build the PID, PV1 and ORC segments
|
---|
| 157 | S ALPDFN=+$P($G(^PSB(53.79,ALPML,0)),U,1)
|
---|
| 158 | I +ALPDFN'>0 Q "0^"_ALPML_"^Invalid or Missing Patient - Med-Log"
|
---|
| 159 | ;Get the Division that the patient is associated with
|
---|
| 160 | D PDIV
|
---|
| 161 | I ALPDIV="DOM" Q "0^^Screen of DOMICILIARY"
|
---|
| 162 | I '$D(HLL("LINKS")) Q "0^"_ALPML_"^Missing HLL Links Array Med-Log"
|
---|
| 163 | S ALPST=$P($G(^PSB(53.79,ALPML,0)),U,9)
|
---|
| 164 | S ALPBY=$P($G(^PSB(53.79,ALPML,0)),U,7)
|
---|
| 165 | S ALPDT=$P($G(^PSB(53.79,ALPML,0)),U,6)
|
---|
| 166 | S ALPOR=$P($G(^PSB(53.79,ALPML,.1)),U,1)
|
---|
| 167 | S ALPBYN=$P($G(^VA(200,ALPBY,0)),U,1)
|
---|
| 168 | S ALPSTN=$S($D(ALPST):$$EXTERNAL^DILFD(53.79,".09",,ALPST),1:"Non")
|
---|
| 169 | I '$D(ALPOR) Q "0^"_ALPML_"^Invalid or Missing Pharmacy Order Number Med-Log"
|
---|
| 170 | S PID=$$EN^VAFHLPID(ALPDFN,"2,7,8,19")
|
---|
| 171 | I '$D(PID) Q "0^"_ALPML_"^Invalid or Missing Patient - PID Med-Log"
|
---|
| 172 | S PV1=$$EN^VAFHAPV1(ALPDFN,DT,"2,3,7,18")
|
---|
| 173 | I '$D(PV1) Q "0^"_ALPML_"^Invalid or Missing Patient Location - PV1 Med-Log"
|
---|
| 174 | S HLA("HLS",1)=PID
|
---|
| 175 | S HLA("HLS",2)=PV1
|
---|
| 176 | ;BUILD ORC SEGMENT
|
---|
| 177 | S ORC="ORC"_HLFS_"ML"_HLFS_ALPML_HLCS_"ML"_HLFS_ALPOR_HLCS_"PS"_HLFS
|
---|
| 178 | S ORC=ORC_HLFS_ALPST_HLCS_ALPSTN_HLFS_HLFS_HLFS_HLFS
|
---|
| 179 | S ORC=ORC_$$HLDATE^HLFNC(ALPDT,"TS")_HLFS_ALPBY_HLCS_ALPBYN
|
---|
| 180 | S HLA("HLS",3)=ORC
|
---|
| 181 | ;The Message is ready to send
|
---|
| 182 | D SEND
|
---|
| 183 | Q ALPRSLT
|
---|
| 184 | ;
|
---|
| 185 | ADMQ ;Need to que a single patient init for admissions
|
---|
| 186 | S ALDFN=ALPDFN
|
---|
| 187 | S ZTDTH=$$NOW^XLFDT
|
---|
| 188 | S ZTRTN="PAT^ALPBIND"
|
---|
| 189 | S ZTDESC="PSB - Initialize Single Patient on Admission Contingency Workstation"
|
---|
| 190 | S ZTIO="",ZTSAVE("ALDFN")=""
|
---|
| 191 | D ^%ZTLOAD
|
---|
| 192 | K ZTIO,ZTDESC,ZTRTN,ZTSK
|
---|
| 193 | Q
|
---|
| 194 | PMOV(ALPDFN,ALPTYP,ALPTT,ALPBMDT) ;Entry Point to send patient movement
|
---|
| 195 | N VAIN
|
---|
| 196 | I +$G(ALPDFN)'>0 Q "0^^Missing Patient ID"
|
---|
| 197 | D INIT
|
---|
| 198 | ;Check Movement type. If not a discharge then don't pass date and time
|
---|
| 199 | S:$G(ALPTT)'="DISCHARGE" ALPBMDT=0
|
---|
| 200 | ;Get the Division that the patient is associated with
|
---|
| 201 | D PDIV
|
---|
| 202 | I ALPDIV="DOM" Q "0^^Screen of DOMICILIARY"
|
---|
| 203 | I '$D(HLL("LINKS")) Q "0^"_ALPDFN_"^Missing HLL Links Array Pat-Move"
|
---|
| 204 | S HLA("HLS",1)=$$EN^VAFHLPID(ALPDFN,"2,7,8,19")
|
---|
| 205 | S HLA("HLS",2)=$$EN^VAFHAPV1(ALPDFN,DT,"2,3,7,18")
|
---|
| 206 | S:$G(ALPTT)="DISCHARGE" $P(HLA("HLS",2),HLFS,37)=$G(ALPTYP)
|
---|
| 207 | D SEND
|
---|
| 208 | I ALPTYP=14!(ALPTYP=41) S ALPTT="ADMISSION" ;FOR RETURN FROM ASIH
|
---|
| 209 | I $G(ALPTT)="ADMISSION" D ADMQ
|
---|
| 210 | ;SEND A DISCHARGE TO DIV SENDING ASIH
|
---|
| 211 | I $G(ALPTYP)[13!($G(ALPTYP)[40) D
|
---|
| 212 | .D INIT
|
---|
| 213 | .S ALPWRD=$P($G(DGPMVI(5)),U,1) ;LAST WARD
|
---|
| 214 | .I +ALPWRD'>0 S ALPRSLT="0^^Screen - No Ward" Q ;NO WARD
|
---|
| 215 | .S ALPBDIV=$P($G(^DIC(42,ALPWRD,0)),U,11)
|
---|
| 216 | .D GET^ALPBPARM(.HLL,ALPBDIV)
|
---|
| 217 | .S HLA("HLS",1)=$$EN^VAFHLPID(ALPDFN,"2,7,8,19")
|
---|
| 218 | .S HLA("HLS",2)=$$EN^VAFHAPV1(ALPDFN,DT,"2,3,7,18")
|
---|
| 219 | .S $P(HLA("HLS",2),HLFS,37)="ASIH"
|
---|
| 220 | .D SEND
|
---|
| 221 | Q ALPRSLT
|
---|