| 1 | PSSHL1 ;BIR/RLW/WRT-BUILD HL7 MESSAGE TO POPULATE ORDERABLE ITEM FILE ;09/08/97
 | 
|---|
| 2 |  ;;1.0;PHARMACY DATA MANAGEMENT;**38,68,125**;9/30/97;Build 2
 | 
|---|
| 3 |  ;External reference to ORD(101 supported by DBIA 872
 | 
|---|
| 4 |  ; PSJEC=event code from HL7 table 8.4.2.1
 | 
|---|
| 5 |  ; PSJSPIEN=ien to super-primary drug file (#50.7)
 | 
|---|
| 6 |  ; SPDNAME=.01 field (name) of super-primary drug
 | 
|---|
| 7 |  ; LIMIT=number of fields in HL7 segment being built
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  W !!?3,"This routine should not be accessed through programmer mode!",!
 | 
|---|
| 10 |  Q
 | 
|---|
| 11 | EN1 ; start here for pre-install auto load
 | 
|---|
| 12 |  N MENU,MENUP,ITEM
 | 
|---|
| 13 |  D PRO Q:$G(XPDABORT)
 | 
|---|
| 14 |  S PSSMFU=+$O(^PS(59.7,0)) I $P(^PS(59.7,PSSMFU,80),"^",2)=4 K PSSMFU Q
 | 
|---|
| 15 |  N APPL,CODE,FIELD,LIMIT,MFE,PSJI,SEGMENT,SPDNAME,SYN,SYNONYM,USAGE,X
 | 
|---|
| 16 |  I '$D(^XTMP("PSO_V7 INSTALL",0)) S X1=DT,X2=+7 D C^%DTC S ^XTMP("PSO_V7 INSTALL",0)=DT_"^"_X_"^OUTPATIENT V7 KIDS INSTALL" L +^XTMP("PSO_V7 INSTALL",0):$S($G(DILOCKTM)>0:DILOCKTM,1:3) G SKIP
 | 
|---|
| 17 |  F  Q:'$D(^XTMP("PSO_V7 INSTALL",0))  L +^XTMP("PSO_V7 INSTALL",0):$S($G(DILOCKTM)>0:DILOCKTM,1:3) Q:$T
 | 
|---|
| 18 |  I '$D(^XTMP("PSO_V7 INSTALL",0)) S X1=DT,X2=+7 D C^%DTC S ^XTMP("PSO_V7 INSTALL",0)=DT_"^"_X_"^OUTPATIENT V7 KIDS INSTALL" L +^XTMP("PSO_V7 INSTALL",0):$S($G(DILOCKTM)>0:DILOCKTM,1:3)
 | 
|---|
| 19 |  I $P(^PS(59.7,PSSMFU,80),"^",2)=4 L -^XTMP("PSO_V7 INSTALL",0) K ^XTMP("PSO_V7 INSTALL",0) Q
 | 
|---|
| 20 | SKIP ;
 | 
|---|
| 21 |  S PSJEC="MAD",CODE="REP"
 | 
|---|
| 22 |  D INIT
 | 
|---|
| 23 |  D LOOP,MF^PSSHLU(PSJI)
 | 
|---|
| 24 |  S PSLSITE=+$O(^PS(59.7,0)) S $P(^PS(59.7,PSLSITE,80),"^",2)=4 K PSLSITE
 | 
|---|
| 25 |  L -^XTMP("PSO_V7 INSTALL",0) K ^XTMP("PSO_V7 INSTALL",0)
 | 
|---|
| 26 |  K ^TMP("HLS",$J,"PS"),PSJEC,PSJSPIEN,PSJCLEAR,PSSMFU Q
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 | EN2(PSJSPIEN,PSJEC) ; start here for "manual" update
 | 
|---|
| 29 |  S PSLSITE=+$O(^PS(59.7,0)) I +$P($G(^PS(59.7,PSLSITE,80)),"^",2)<4 K PSLSITE Q
 | 
|---|
| 30 |  ; passed in: internal entry # of super-primary drug, entry code
 | 
|---|
| 31 |  S:'$P($G(^PS(50.7,PSJSPIEN,0)),"^",4) PSJEC="MAC"
 | 
|---|
| 32 |  K PSLSITE N APPL,CODE,FIELD,PSJI,LIMIT,MFE,SEGMENT,SPDNAME,SYN,SYNONYM,USAGE,X,ZCOUNT,ZUSAGE
 | 
|---|
| 33 |  S CODE="UPD"
 | 
|---|
| 34 |  D INIT
 | 
|---|
| 35 |  D MFE(PSSIVID),MF^PSSHLU(PSJI)
 | 
|---|
| 36 |  K ^TMP("HLS",$J,"PS")
 | 
|---|
| 37 |  Q
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 | INIT ; initialize HL7 variables, set master file identification segment fields
 | 
|---|
| 41 |  S PSJI=0,LIMIT=6,HLMTN="MFN",PSSIVID=$$GTIVID()
 | 
|---|
| 42 |  D INIT^PSSHLU X PSJCLEAR
 | 
|---|
| 43 |  S FIELD(0)="MFI"
 | 
|---|
| 44 |  S FIELD(1)="50.7^PHARMACY ORDERABLE ITEM^99DD"
 | 
|---|
| 45 |  S FIELD(3)=CODE
 | 
|---|
| 46 |  S FIELD(6)="NE"
 | 
|---|
| 47 |  D SEGMENT^PSSHLU(LIMIT)
 | 
|---|
| 48 |  Q
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | LOOP ; loop through PHARMACY ORDERABLE ITEM file
 | 
|---|
| 51 |  ;F  L +^PS(59.7,PSSIVID,31) Q:$T  H 1
 | 
|---|
| 52 |  S PSJSPIEN=0 F  S PSJSPIEN=$O(^PS(50.7,PSJSPIEN)) Q:'PSJSPIEN  D MFE(PSSIVID)
 | 
|---|
| 53 |  ;L -^PS(59.7,PSSIVID,31)
 | 
|---|
| 54 |  Q
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | MFE(PSSIVID) ; set master file entry segment fields
 | 
|---|
| 57 |  ; Input: PSSIVID-IV Identifier
 | 
|---|
| 58 |  S LIMIT=4 X PSJCLEAR
 | 
|---|
| 59 |  S X=$G(^PS(50.7,PSJSPIEN,0))
 | 
|---|
| 60 |  S FIELD(0)="MFE"
 | 
|---|
| 61 |  S FIELD(1)=PSJEC
 | 
|---|
| 62 |  S FIELD(3)=$P($G(^PS(50.7,PSJSPIEN,0)),"^",4) I FIELD(3) S FIELD(3)=$$HLDATE^HLFNC(FIELD(3))
 | 
|---|
| 63 |  S FIELD(4)="^^^"_PSJSPIEN_"^"_$P(X,"^")_"~"_$P($G(^PS(50.606,$P(X,"^",2),0)),"^")_"~"_$S($P($G(^PS(50.7,PSJSPIEN,0)),"^",3):$G(PSSIVID),1:"")_"^99PSP"
 | 
|---|
| 64 |  D SEGMENT^PSSHLU(LIMIT)
 | 
|---|
| 65 |  D ZPS,ZSY
 | 
|---|
| 66 |  Q
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 | ZPS ; get USAGE from dispense drug(s), set ZPS segment
 | 
|---|
| 69 |  S LIMIT=2 X PSJCLEAR
 | 
|---|
| 70 |  S FIELD(0)="ZPS"
 | 
|---|
| 71 |  S USAGE=$$USAGE^PSSHLU(PSJSPIEN)
 | 
|---|
| 72 |  Q:USAGE=""&('$P($G(^PS(50.7,PSJSPIEN,0)),"^",9))&('$P($G(^PS(50.7,PSJSPIEN,0)),"^",12))
 | 
|---|
| 73 |  F I="I","O","A","B","V" S:+$P(USAGE,I,2)>0 FIELD(1)=FIELD(1)_I
 | 
|---|
| 74 |  S:$P($G(^PS(50.7,PSJSPIEN,0)),"^",9) FIELD(1)=FIELD(1)_"S"
 | 
|---|
| 75 |  S:$P($G(^PS(50.7,PSJSPIEN,0)),"^",10) FIELD(1)=FIELD(1)_"N"
 | 
|---|
| 76 |  S:$P($G(^PS(50.7,PSJSPIEN,0)),"^",12) FIELD(2)=1
 | 
|---|
| 77 |  D SEGMENT^PSSHLU(LIMIT)
 | 
|---|
| 78 |  Q
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 | ZSY ; get SYNONYMs
 | 
|---|
| 81 |  S LIMIT=2 X PSJCLEAR
 | 
|---|
| 82 |  S FIELD(0)="ZSY"
 | 
|---|
| 83 |  S SYNONYM="",(J,SYNIEN)=0 F  S SYNIEN=$O(^PS(50.7,PSJSPIEN,2,SYNIEN)) Q:'SYNIEN  S SYNONYM=$P($G(^(SYNIEN,0)),"^") Q:SYNONYM=""  D
 | 
|---|
| 84 |  .S FIELD(1)="1",FIELD(2)=SYNONYM D SEGMENT^PSSHLU(LIMIT)
 | 
|---|
| 85 |  Q
 | 
|---|
| 86 | PRO ;Check for protocols
 | 
|---|
| 87 |  S MENU="PS MFSEND OR",ITEM="OR ITEM RECEIVE",MENUP=$O(^ORD(101,"B",MENU,0))
 | 
|---|
| 88 |  S X=$O(^ORD(101,"B",ITEM,0)) I 'X W !!?5,"Sorry, you need the OR ITEM RECEIVE protocol to proceed,",!?5,"which is exported with Order Entry/Results Reporting V3!",! S XPDABORT=1 Q
 | 
|---|
| 89 |  Q:$D(^ORD(101,MENUP,10,"B",X))
 | 
|---|
| 90 |  I $D(^ORD(101,MENUP,10,0))[0 S ^ORD(101,MENUP,10,0)="^"_"101.01PA"
 | 
|---|
| 91 |  K DD,DA,DO,DIC S DIC="^ORD(101,"_MENUP_",10,",DIC(0)="L",DLAYGO=101.01,DA(1)=MENUP D FILE^DICN K DD,DO
 | 
|---|
| 92 |  K DIC I Y<0 W !!?5,"Sorry, unable to add OR ITEM RECEIVE protocol as an Item to the PS MFSEND",!,"protocol, cannot proceed!",! S XPDABORT=1
 | 
|---|
| 93 |  Q
 | 
|---|
| 94 | ENIVID ; Edit IV Identifier field to be displayed with IV Orderable Items.
 | 
|---|
| 95 |  Q
 | 
|---|
| 96 |  N DA,DIC,DIE,DRG,PSSOI,PSSIVID,PSSFIL,PSSDRG,X,Y
 | 
|---|
| 97 |  S DIC=59.7,DIC(0)="AEMQ" D ^DIC Q:Y<0
 | 
|---|
| 98 |  W !!!,"Changing the IV Identifier will update the name of ALL Orderable Items",!,"marked as an IV!",!!
 | 
|---|
| 99 |  S PSSIVID=$P($G(^PS(59.7,+Y,31)),U,2),DIE=59.7,(DA,PSSSITE)=+Y,DR=32 D ^DIE
 | 
|---|
| 100 |  Q:PSSIVID=$P($G(^PS(59.7,PSSSITE,31)),U,2)
 | 
|---|
| 101 |  W !!,"Updating Orderable Item names in OE/RR"
 | 
|---|
| 102 |  F PSSOI=0:0 S PSSOI=$O(^PS(50.7,"AIV",1,PSSOI)) Q:'PSSOI  D:$D(^PS(50.7,PSSOI)) EN2^PSSHL1(PSSOI,"MUP") W "."
 | 
|---|
| 103 |  ;F PSSFIL=52.6,52.7 F PSSOI=0:0 S PSSOI=$O(^PS(PSSFIL,"AOI",PSSOI)) Q:'PSSOI  D:$D(^PS(50.7,PSSOI)) EN2^PSSHL1(PSSOI,"MUP") W "."
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | GTIVID() ; Return IV Identifier. If being edited, wait until edit is done.
 | 
|---|
| 107 |  N X,PX S (X,PX)=$O(^PS(59.7,0)) Q:'X
 | 
|---|
| 108 |  F  L +^PS(59.7,X,31):$S($G(DILOCKTM)>0:DILOCKTM,1:3) Q:$T  H 2
 | 
|---|
| 109 |  S X=$P($G(^PS(59.7,X,31)),U,2)
 | 
|---|
| 110 |  L -^PS(59.7,PX,31)
 | 
|---|
| 111 |  Q X
 | 
|---|