| 1 | PSSDGUPD ;BIR/PWC - builds HL7 V.2.4 drug update message ;12/22/2003 | 
|---|
| 2 | ;;1.0;PHARMACY DATA MANAGEMENT;**57,66,70,82**;9/30/97 | 
|---|
| 3 | ;IA: 10054 - ^LAB(60 | 
|---|
| 4 | ;IA: 10055 - ^LAB(61 | 
|---|
| 5 | ;IA: 2079 -  ^PSNDF | 
|---|
| 6 | ;IA: 2221 -  ^PS(50.607 | 
|---|
| 7 | ;IA: 872 -   ^ORD(101 | 
|---|
| 8 | ;IA: 10106 - $$HLDATE^HLFNC | 
|---|
| 9 | ;IA: 2161  - INIT^HLFNC2 | 
|---|
| 10 | ;IA: 2164  - GENERATE^HLMA | 
|---|
| 11 | Q | 
|---|
| 12 | DRG(DRG,NEW,DNSNAM,DNSPORT) ;entry point | 
|---|
| 13 | N CNT,DOSF,DRG0,DRG2,DRG3,DRG6,DRG60,DRGN,DRGSYN,DRGZ,DRGZ1,MEDRT,PSSRESLT,PSSOPTNS,PROT,HL,HLA,ZPA,RXD,OBR,DOS1,DOS2,CLOZ2,LTMON,XX,WARN,LNF,VNF,SYIN,SYNINT,SYUN,VSN,TYPE,UNIT,WNS,WW,ORDITEM,CMOP,OPEXT,LABTST,SPEC,ZPANF,ZPACMOP | 
|---|
| 14 | ; | 
|---|
| 15 | K HLA("HLS") S PROT=$O(^ORD(101,"B","PSS EXT MFU SERVER",0)) | 
|---|
| 16 | I 'PROT D EN^DDIOL("Drug Update Protocol NOT Installed ","","$C(7),!!") Q | 
|---|
| 17 | D INIT^HLFNC2(PROT,.HL) I $G(HL) Q | 
|---|
| 18 | S HL("ECH")="~^\&",CNT=0 | 
|---|
| 19 | S DRG0=$G(^PSDRUG(DRG,0)),DRG2=$G(^(2)),DRG3=$G(^(3)),DRG6=$G(^(6)),DRGN=$G(^("ND")),DRGZ=$G(^("CLOZ")),DRGZ1=$G(^("CLOZ1")),DRG60=$G(^(660)) | 
|---|
| 20 | S WARN=$P(DRG0,"^",8),LNF=$P(DRG0,"^",9),VNF=$P(DRG0,"^",11) | 
|---|
| 21 | S WNS="" I $G(WARN) F I=1:1 S WW=$P(WARN,",",I) Q:WW=""  S WNS=WNS_WW_"^"_$G(^PS(54,WW,0))_"~" | 
|---|
| 22 | S ORDITEM=+$P(DRG2,"^"),CMOP=+$P(DRG3,"^"),OPEXT=+$P(DRG6,"^") | 
|---|
| 23 | S LABTST=+$P(DRGZ,"^"),SPEC=+$P(DRGZ,"^",3) | 
|---|
| 24 | ;msh segment | 
|---|
| 25 | ;S CNT=CNT+1,HLA("HLS",CNT)="MSH|~^\&|PSS VISTA|STATION #~STATION DNS~DNS|PSS DISPENSE|~DISPENSE DNS NAME:PORT~DNS|"_$H_"||MFN^M01|10001||P|2.4|||AL|AL|||||" | 
|---|
| 26 | ;mfi segment | 
|---|
| 27 | S CNT=CNT+1,HLA("HLS",CNT)="MFI|50^DRUG^99PSD||UPD|||NE" | 
|---|
| 28 | ;the MFE and ZPA segments are multiples and a separate one will be sent | 
|---|
| 29 | ;for each Drug and the matching synonyms. | 
|---|
| 30 | ;mfe segment - DRUG | 
|---|
| 31 | S CNT=CNT+1,HLA("HLS",CNT)="MFE|"_$S($G(NEW):"MAD",1:"MUP")_"|||"_$P(DRG0,"^") | 
|---|
| 32 | ;zpa segment - DRUG | 
|---|
| 33 | S CNT=CNT+1,ZPA="" | 
|---|
| 34 | S $P(ZPA,"^",1)=$P(DRG0,"^")_"|N|"    ;main drug | 
|---|
| 35 | I LNF&VNF S ZPANF="LFN^Local Non-Formulary^Pharm Formulary Listing~VFN^VISN Non-Formulary^Pharm Formulary Listing" | 
|---|
| 36 | I LNF&'VNF S ZPANF="LFN^Local Non-Formulary^Pharm Formulary Listing" | 
|---|
| 37 | I 'LNF&VNF S ZPANF="VFN^VISN Non-Formulary^Pharm Formulary Listing" | 
|---|
| 38 | S $P(ZPA,"|",3)=$G(ZPANF) | 
|---|
| 39 | S $P(ZPA,"|",4)=$$HLDATE^HLFNC($G(^PSDRUG(DRG,"I")),"TS") | 
|---|
| 40 | S $P(ZPA,"|",5)=$P(DRG0,"^",10) | 
|---|
| 41 | S $P(ZPA,"|",6)=$P(DRG0,"^",2) | 
|---|
| 42 | S $P(ZPA,"|",7)=$E($P(DRG0,"^",3),1) | 
|---|
| 43 | S $P(ZPA,"|",8)=$E($P(DRG0,"^",3),2) | 
|---|
| 44 | S $P(ZPA,"|",9)=$S($P(DRG0,"^",6)]"":"50^"_$P(DRG0,"^",6)_"^LPS50",1:"") | 
|---|
| 45 | S $P(ZPA,"|",10)=WNS | 
|---|
| 46 | S $P(ZPA,"|",11)=$S(ORDITEM&($D(^PS(50.7,ORDITEM,0))):ORDITEM_"^"_$P($G(^PS(50.7,ORDITEM,0)),"^")_"^LPSD50.7",1:"") | 
|---|
| 47 | S DOSF=$S(ORDITEM&($P($G(^PS(50.7,ORDITEM,0)),"^",2)):$P(^PS(50.7,ORDITEM,0),"^",2)_"^"_$P($G(^PS(50.606,+$P($G(^PS(50.7,ORDITEM,0)),"^",2),0)),"^")_"^"_"LPSD50.606",1:"") | 
|---|
| 48 | S MEDRT=$S(ORDITEM&($P($G(^PS(50.7,ORDITEM,0)),"^",6)):$P(^PS(50.7,ORDITEM,0),"^",6)_"^"_$P($G(^PS(51.2,+$P($G(^PS(50.7,ORDITEM,0)),"^",6),0)),"^")_"^"_"LPSD51.2",1:"") | 
|---|
| 49 | S $P(ZPA,"|",12)=DOSF | 
|---|
| 50 | S $P(ZPA,"|",13)=MEDRT | 
|---|
| 51 | S $P(ZPA,"|",14)=$S($P(DRGN,"^",3)&($P($G(^PSNDF(50.68,+$P(DRGN,"^",3),0)),"^")]""):$P(DRGN,"^",3)_"^"_$P($G(^PSNDF(50.68,$P(DRGN,"^",3),0)),"^")_"^LPSD50.68",1:"") | 
|---|
| 52 | I CMOP&OPEXT S ZPACMOP="OP^OP Dispense^Pharm dispense flag~CMOP^CMOP Dispense^Pharm dispense flag" | 
|---|
| 53 | I 'CMOP&OPEXT S ZPACMOP="OP^OP Dispense^Pharm dispense flag" | 
|---|
| 54 | I CMOP&'OPEXT S ZPACMOP="CMOP^CMOP Dispense^Pharm dispense flag" | 
|---|
| 55 | S $P(ZPA,"|",15)=$G(ZPACMOP) | 
|---|
| 56 | S $P(ZPA,"|",16)=$$HLDATE^HLFNC($P(DRG60,"^",9),"TS") | 
|---|
| 57 | S $P(ZPA,"|",17)=$S(LABTST&($P($G(^LAB(60,LABTST,0)),"^")]""):LABTST_"^"_$P($G(^LAB(60,LABTST,0)),"^")_"^LLAB60",1:"") | 
|---|
| 58 | S $P(ZPA,"|",18)=$S(SPEC&($P($G(^LAB(61,SPEC,0)),"^")]""):SPEC_"^"_$P(^LAB(61,SPEC,0),"^")_"^LLAB61",1:"") | 
|---|
| 59 | S $P(ZPA,"|",19)=$P(DRGZ1,"^") | 
|---|
| 60 | S $P(ZPA,"|",20)=$P(DRGZ,"^",2) | 
|---|
| 61 | S $P(ZPA,"|",21)=$P($G(^PSDRUG(DRG,"DOS")),"^") | 
|---|
| 62 | S UNIT=$P($G(^PSDRUG(DRG,"DOS")),"^",2) | 
|---|
| 63 | ;order unit | 
|---|
| 64 | S $P(ZPA,"|",22)=$S(UNIT&($P($G(^PS(50.607,+UNIT,0)),"^")]""):UNIT_"^"_$P(^PS(50.607,+UNIT,0),"^")_"^LPSD50.607",1:"") | 
|---|
| 65 | ;price per order unit and price per dispense unit | 
|---|
| 66 | S $P(ZPA,"|",23)=$S($P(DRG60,"^",3)]"":$P(DRG60,"^",3)_"&USD^UP",1:"") | 
|---|
| 67 | S $P(ZPA,"|",24)=$S($P(DRG60,"^",6)]"":$P(DRG60,"^",6)_"&USD^UP",1:"") | 
|---|
| 68 | ;dispense unit, dispense unit/order unit | 
|---|
| 69 | S $P(ZPA,"|",25)=$P(DRG60,"^",8) | 
|---|
| 70 | S $P(ZPA,"|",26)=$P(DRG60,"^",5) | 
|---|
| 71 | S $P(ZPA,"|",29)=$P(DRG2,"^",4) | 
|---|
| 72 | S HLA("HLS",CNT)="ZPA|"_ZPA | 
|---|
| 73 | ; | 
|---|
| 74 | ;rxd segment | 
|---|
| 75 | ; a separate RXD segment will be sent for each multiple of possible dosages | 
|---|
| 76 | F XX=0:0 S XX=$O(^PSDRUG(DRG,"DOS1",XX)) Q:'XX  S DOS1=$G(^(XX,0)) D | 
|---|
| 77 | .K RXD S CNT=CNT+1,RXD="" | 
|---|
| 78 | .S $P(RXD,"|",4)=$P(DOS1,"^",4) | 
|---|
| 79 | .S $P(RXD,"|",9)=$P(DOS1,"^") | 
|---|
| 80 | .S $P(RXD,"|",12)="^P&"_$P(DOS1,"^",2)_"&LPSD50.0903" | 
|---|
| 81 | .S $P(RXD,"|",24)=$P(DOS1,"^",3) | 
|---|
| 82 | .S HLA("HLS",CNT)="RXD|"_RXD | 
|---|
| 83 | ;a separate RXD segment will be sent for each local possible dosages | 
|---|
| 84 | F XX=0:0 S XX=$O(^PSDRUG(DRG,"DOS2",XX)) Q:'XX  S DOS2=$G(^(XX,0)) D | 
|---|
| 85 | .K RXD S CNT=CNT+1,RXD="" | 
|---|
| 86 | .S $P(RXD,"|",4)=$P(DOS2,"^",3) | 
|---|
| 87 | .S $P(RXD,"|",12)=$S($P(DOS2,"^")]"":"^LP&"_$P(DOS2,"^")_"&LPSD50.0904",1:"") | 
|---|
| 88 | .S $P(RXD,"|",24)=$P(DOS2,"^",2) | 
|---|
| 89 | .S HLA("HLS",CNT)="RXD|"_RXD | 
|---|
| 90 | ; | 
|---|
| 91 | ;obr segments - clozapine lab tests | 
|---|
| 92 | ;a separate OBR segment will be sent for each clozapine multiple | 
|---|
| 93 | ; | 
|---|
| 94 | F XX=0:0 S XX=$O(^PSDRUG(DRG,"CLOZ2",XX)) Q:'XX  S CLOZ2=$G(^(XX,0)) D | 
|---|
| 95 | .S LTMON=$P(CLOZ2,"^"),SPEC=$P(CLOZ2,"^",3),TYPE=$P(CLOZ2,"^",4) | 
|---|
| 96 | .K OBR S CNT=CNT+1,OBR="" | 
|---|
| 97 | .S $P(OBR,"|",4)=$S(LTMON]"":LTMON_"^"_$P(^LAB(60,LTMON,0),"^")_"^LLAB60",1:"") | 
|---|
| 98 | .S $P(OBR,"|",15)=$S(SPEC]"":SPEC_"^"_$P(^LAB(61,SPEC,0),"^")_"^LLAB61",1:"") | 
|---|
| 99 | .S $P(OBR,"|",24)=$S(TYPE=1:"WBC",TYPE=2:"ANC",1:"") | 
|---|
| 100 | .S $P(OBR,"|",27)=$P(CLOZ2,"^",2) | 
|---|
| 101 | .S HLA("HLS",CNT)="OBR|"_OBR | 
|---|
| 102 | ; | 
|---|
| 103 | ; now send SYNONYMS for DRUG in multiple ZPA segments | 
|---|
| 104 | ; | 
|---|
| 105 | F XX=0:0 S XX=$O(^PSDRUG(DRG,1,XX)) Q:'XX  S DRGSYN=$G(^(XX,0)) D | 
|---|
| 106 | .S SYIN=$P(DRGSYN,"^",3),VSN=$P(DRGSYN,"^",4),SYUN=+$P(DRGSYN,"^",5) | 
|---|
| 107 | .S SYNINT=$S(SYIN=0:"TRADE NAME",SYIN=1:"QUICK CODE",SYIN="D":"DRUG ACCOUNTABILITY",SYIN="C":"CONTROLLED SUBSTANCE",1:"") | 
|---|
| 108 | .K ZPA S CNT=CNT+1,ZPA="" | 
|---|
| 109 | .S $P(ZPA,"|",1)=$P(DRGSYN,"^")_"|Y" | 
|---|
| 110 | .S $P(ZPA,"|",9)=$S(VSN]"":"50.1^"_VSN_"^LPS50.1",1:"") | 
|---|
| 111 | .S $P(ZPA,"|",22)=$S(SYUN&($P($G(^DIC(51.5,SYUN,0)),"^")]""):SYUN_"^"_$P(^(0),"^",2)_"^LPSD51.5",1:"") | 
|---|
| 112 | .S $P(ZPA,"|",23)=$S($P(DRGSYN,"^",6)]"":$P(DRGSYN,"^",6)_"&USD^UP",1:"") | 
|---|
| 113 | .S $P(ZPA,"|",24)=$S($P(DRGSYN,"^",8)]"":$P(DRGSYN,"^",8)_"&USD^UP",1:"") | 
|---|
| 114 | .S $P(ZPA,"|",26)=$P(DRGSYN,"^",7) | 
|---|
| 115 | .S $P(ZPA,"|",28)=$P(DRGSYN,"^",9) | 
|---|
| 116 | .S $P(ZPA,"|",29)=$P(DRGSYN,"^",2) | 
|---|
| 117 | .S $P(ZPA,"|",30)=SYNINT | 
|---|
| 118 | .S HLA("HLS",CNT)="ZPA|"_ZPA | 
|---|
| 119 | S PSSOPTNS("SUBSCRIBER")="^^^^~"_DNSNAM_":"_DNSPORT_"~DNS" | 
|---|
| 120 | D GENERATE^HLMA("PSS EXT MFU SERVER","LM",1,.PSSRESLT,"",.PSSOPTNS) | 
|---|
| 121 | K HLA("HLS") | 
|---|
| 122 | Q | 
|---|
| 123 | ; | 
|---|
| 124 | PSN ;entry point from NDF data updates | 
|---|
| 125 | S PROT=$O(^ORD(101,"B","PSS EXT MFU SERVER",0)) I 'PROT G PSNX | 
|---|
| 126 | D INIT^HLFNC2(PROT,.HL) I $G(HL) G PSNX | 
|---|
| 127 | N PSN | 
|---|
| 128 | F  S PSN=$O(^TMP($J,"^",PSN)) Q:'PSN  D DRG(PSN) | 
|---|
| 129 | PSNX K PSN,^TMP($J),PROT,HL S ZTREQ="@" | 
|---|
| 130 | Q | 
|---|