| 1 | PSOHLSG1 ;BIR/LC - Build HL7 Segments ;10/17/2003
 | 
|---|
| 2 |  ;;7.0;OUTPATIENT PHARMACY;**10,26,30,56,70,139,152**;DEC 1997
 | 
|---|
| 3 |  ;HLFNC supp. by DBIA 10106
 | 
|---|
| 4 |  ;PSNAPIS supp. by DBIA 2531
 | 
|---|
| 5 |  ;VASITE supp. by DBIA 10112
 | 
|---|
| 6 |  ;VADPT supp. by DBIA 10061
 | 
|---|
| 7 |  ;EN^DIQ1 supp. by DBIA 10015
 | 
|---|
| 8 |  ;EN^VAFHLPID supp. by DBIA 263
 | 
|---|
| 9 |  ;EN^VAFHLZTA supp. by DBIA 758
 | 
|---|
| 10 |  ;PSDRUG supp. by DBIA 221
 | 
|---|
| 11 |  ;PS(50.7 supp. by DBIA 2223
 | 
|---|
| 12 |  ;PS(50.606 supp. by DBIA 2174
 | 
|---|
| 13 |  ;PSNDF(50.6 supp. by DBIA 2195
 | 
|---|
| 14 |  ;PS(51.2 supp. by DBIA 2226
 | 
|---|
| 15 |  ;PS(55 supp. by DBIA 2228
 | 
|---|
| 16 |  ;PS(50.607 supp. by DBIA 2221
 | 
|---|
| 17 |  ;DIC(5 supp. by DBIA 10056
 | 
|---|
| 18 |  ;DPT supp. by DBIA 3097
 | 
|---|
| 19 |  ;SC supp. by DBIA 10040
 | 
|---|
| 20 |  ;VA(200 supp. by DBIA 10060
 | 
|---|
| 21 | START ;
 | 
|---|
| 22 |  D PID(.PSI),ORC(.PSI),RXE(.PSI),NTE(.PSI),RXR(.PSI),ZRL(.PSI)
 | 
|---|
| 23 |  D ZAL^PSOHLSG2(.PSI),ZML^PSOHLSG2(.PSI),ZSL^PSOHLSG2(.PSI)
 | 
|---|
| 24 |  Q
 | 
|---|
| 25 | PID(PSI) ;patient ID segment
 | 
|---|
| 26 |  Q:'$D(DFN)!$D(PAS)
 | 
|---|
| 27 |  S HLFS=HL1("FS"),HLECH=HL1("ECH"),HLQ=HL1("Q"),HLVER=HL1("VER")
 | 
|---|
| 28 |  N X1,X2,D1,D2
 | 
|---|
| 29 |  S X1=$$EN^VAFHLPID(DFN,"3,5,8,11,13,19,",1)
 | 
|---|
| 30 |  S X2=$$EN^VAFHLZTA(DFN,"2,3,4,5,6,7,",1)
 | 
|---|
| 31 |  ;if temp. address is active then use it
 | 
|---|
| 32 |  I $P(X2,HLFS,3) D
 | 
|---|
| 33 |  .S:$P(X2,HLFS,4) D1=$$FMDATE^HLFNC($P(X2,HLFS,4))
 | 
|---|
| 34 |  .S:$P(X2,HLFS,5) D2=$$FMDATE^HLFNC($P(X2,HLFS,5))
 | 
|---|
| 35 |  .I $G(D1),$G(D2),(DT'<D1&(DT'>D2)) D
 | 
|---|
| 36 |  ..S:$P(X2,HLFS,6)]"" $P(X1,HLFS,12)=$P(X2,HLFS,6),$P(X1,HLFS,14)=$P(X2,HLFS,8)
 | 
|---|
| 37 |  S ^TMP("PSO",$J,PSI)=$E(X1,1,245)
 | 
|---|
| 38 |  S PSI=PSI+1,PAS=1
 | 
|---|
| 39 |  Q
 | 
|---|
| 40 | ORC(PSI) ;common order segment
 | 
|---|
| 41 |  Q:'$D(DFN)
 | 
|---|
| 42 |  N ORC
 | 
|---|
| 43 |  S:$G(FP)="F"&('$G(FPN)) FDT=$P(^PSRX(IRXN,2),"^",2),EXDT=$S($P(^(2),"^",6):$P(^(2),"^",6),1:"")
 | 
|---|
| 44 |  S:$G(FP)="F"&('$G(FPN)) EBY=$P(^PSRX(IRXN,0),"^",16),PVDR=$P(^(0),"^",4),EFDT=$P(^(2),"^",2)
 | 
|---|
| 45 |  S:$G(FP)="F"&($G(FPN)) FDT=$P(^PSRX(IRXN,1,FPN,0),"^"),EXDT=$S($P(^(0),"^",15):$P(^(0),"^",15),1:"")
 | 
|---|
| 46 |  S:$G(FP)="F"&($G(FPN)) EBY=$S($P(^PSRX(IRXN,1,FPN,0),"^",5):$P(^(0),"^",5),1:$P(^(0),"^",7)),PVDR=$P(^(0),"^",17),EFDT=$P(^(0),"^",8)
 | 
|---|
| 47 |  S:$G(FP)="P" FDT=$P(^PSRX(IRXN,"P",FPN,0),"^"),PVDR=$P(^(0),"^",17),EXDT=$S($P(^PSRX(IRXN,2),"^",6):$P(^(2),"^",6),1:"")
 | 
|---|
| 48 |  S:$G(FP)="P" EBY=$S($P(^PSRX(IRXN,"P",FPN,0),"^",5):$P(^(0),"^",5),1:$P(^(0),"^",7)),PVDR=$P(^(0),"^",17),EFDT=$P(^(0),"^",8)
 | 
|---|
| 49 |  S EBY1=$P(^VA(200,EBY,0),"^"),PVDR1=$P(^VA(200,PVDR,0),"^")
 | 
|---|
| 50 |  S FDT=$$HLDATE^HLFNC(FDT,"DT") S:$G(EXDT) EXDT=$$HLDATE^HLFNC(EXDT,"DT"),EFDT=$$HLDATE^HLFNC(EFDT,"DT")
 | 
|---|
| 51 |  S EBY1=$$HLNAME^HLFNC(EBY1),PVDR1=$$HLNAME^HLFNC(PVDR1)
 | 
|---|
| 52 |  S ORC="ORC"_FS_"NW"_FS_IRXN_CS_"OP7.0"_FS_FS_FS_FS_FS_CS_CS_CS
 | 
|---|
| 53 |  S ORC=ORC_FDT_CS_EXDT_FS_FS_FS_EBY_CS_EBY1_FS_FS
 | 
|---|
| 54 |  S ORC=ORC_PVDR_CS_PVDR1_FS_FS_FS_EFDT_FS_CS_CS_CS_CS_"NEW"
 | 
|---|
| 55 |  S ^TMP("PSO",$J,PSI)=ORC
 | 
|---|
| 56 |  S PSI=PSI+1
 | 
|---|
| 57 |  K EBY,EBY1,EFDT,EXDT,FDT,PVDR,PVDR1
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 | RXE(PSI) ;pharmacy encoded order segment
 | 
|---|
| 60 |  Q:'$D(DFN)
 | 
|---|
| 61 |  N RXE
 | 
|---|
| 62 |  S PSND1=$P($G(^PSDRUG(IDGN,"ND")),"^"),PSND2=$P($G(^("ND")),"^",2),PSND3=$P($G(^("ND")),"^",3)
 | 
|---|
| 63 |  K PSOXN,PSOXN2
 | 
|---|
| 64 |  I PSND1,PSND3 D
 | 
|---|
| 65 |  .I $T(^PSNAPIS)]"" S PSOXN=$$DFSU^PSNAPIS(PSND1,PSND3),UNIT=$P($G(PSOXN),"^",6) S PSOXN=$P($G(PSOXN),"^",5) S PSOXN2=$$PROD2^PSNAPIS(PSND1,PSND3) Q
 | 
|---|
| 66 |  .S PSOXN2=$G(^PSNDF(PSND1,5,PSND3,2))
 | 
|---|
| 67 |  .S PRODUCT=$G(^PSNDF(PSND1,5,PSND3,0))
 | 
|---|
| 68 |  .I $G(PRODUCT)'="" S PSOXN=+$P($G(^PSNDF(PSND1,2,+$P(PRODUCT,"^",2),3,+$P(PRODUCT,"^",3),4,+$P(PRODUCT,"^",4),0)),"^"),UNIT=$P($G(^PS(50.607,PSOXN,0)),"^")
 | 
|---|
| 69 |  S RXE="RXE"_FS_""""""_FS_$S($P($G(^PSDRUG(IDGN,"ND")),"^",10)'="":$P(^("ND"),"^",10),($G(PSND1)&$G(PSND3)):$P($G(PSOXN2),"^",2),1:"""""")_CS_PSND2_CS_"PSNDF"
 | 
|---|
| 70 |  S RXE=RXE_CS_PSND1_"."_PSND3_"."_$G(IDGN)_CS_$P($G(^PSDRUG(IDGN,0)),"^")_CS_"99PSD"_FS_""""""_FS_FS
 | 
|---|
| 71 |  I $G(PSOXN)="" S PSOXN=""""""
 | 
|---|
| 72 |  S RXE=RXE_CS_CS_CS_PSOXN_CS_$S($G(UNIT)'="":$G(UNIT),1:"""""")_CS_"99PSU"_FS
 | 
|---|
| 73 |  K PSOXN,PSOXN2
 | 
|---|
| 74 |  S POIPTR=$P($G(^PSRX(IRXN,"OR1")),"^") I POIPTR S PODOSE=$P($G(^PS(50.7,POIPTR,0)),"^",2),PODOSENM=$G(^PS(50.606,PODOSE,0))
 | 
|---|
| 75 |  I '$G(POIPTR) S PODOSE=$P($G(^PS(50.7,$P($G(^PSDRUG(IDGN,2)),"^"),0)),"^",2),PODOSENM=$G(^PS(50.606,PODOSE,0))
 | 
|---|
| 76 |  ;S RXE=RXE_CS_CS_CS_$S($G(PODOSE):PODOSE,1:"""""")_CS_$S($G(PODOSENM):PODOSENM,1:"""""")_CS_"99PSF"_FS_FS_FS_FS_FS_CS_$P(^PSDRUG(IDGN,660),"^",8)_FS
 | 
|---|
| 77 |  S RXE=RXE_CS_CS_CS_PODOSE_CS_PODOSENM_CS_"99PSF"_FS_FS_FS_FS_FS_CS_$P($G(^PSDRUG(IDGN,660)),"^",8)_FS
 | 
|---|
| 78 |  S:$G(FP)="F"&('$G(FPN)) VPHARMID=$P(^PSRX(IRXN,2),"^",3)
 | 
|---|
| 79 |  S:$G(FP)="F"&($G(FPN)) VPHARMID=$S($P(^PSRX(IRXN,1,FPN,0),"^",5)'="":$P(^(0),"^",5),1:$P(^PSRX(IRXN,2),"^",3))
 | 
|---|
| 80 |  S:$G(FP)="P" VPHARMID=$S($P(^PSRX(IRXN,"P",FPN,0),"^",5)'="":$P(^(0),"^",5),1:$P(^PSRX(IRXN,2),"^",3))
 | 
|---|
| 81 |  I '$G(VPHARMID) S VPHARMID="""""",VPHARM=""""""
 | 
|---|
| 82 |  I $G(VPHARMID) S VPHARM=$P(^VA(200,VPHARMID,0),"^"),VPHARM=$$HLNAME^HLFNC(VPHARM)
 | 
|---|
| 83 |  S NFLD=0,UU="" F  S UU=$O(^PSRX(IRXN,1,UU)) Q:UU=""  S:$D(^PSRX(IRXN,1,UU,0)) NFLD=NFLD+1
 | 
|---|
| 84 |  S NRFL=$P(^PSRX(IRXN,0),"^",9),RFRM=(NRFL-NFLD),DISPDT=$P(^PSRX(IRXN,3),"^"),DISPDT=$$HLDATE^HLFNC(DISPDT,"DT")
 | 
|---|
| 85 |  S RXE=RXE_NRFL_FS_FS_VPHARMID_CS_VPHARM_FS_$P(^PSRX(IRXN,0),"^")_FS_RFRM_FS_FS_DISPDT
 | 
|---|
| 86 |  S ^TMP("PSO",$J,PSI)=RXE
 | 
|---|
| 87 |  S PSI=PSI+1
 | 
|---|
| 88 |  K PSND1,PSND2,PSND3,PRODUCT,UNIT,PODOSE,PODOSENM,POIPTR,VPHARMID,VPHARM,NRFL,DISPDT,UU
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 | NTE(PSI) ;note segments
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  D NTE1^PSOHLSG2(.PSI)
 | 
|---|
| 93 |  D NTE2^PSOHLSG2(.PSI)
 | 
|---|
| 94 |  D NTE3^PSOHLSG2(.PSI)
 | 
|---|
| 95 |  D NTE4^PSOHLSG2(.PSI)
 | 
|---|
| 96 |  D NTE5^PSOHLSG2(.PSI)
 | 
|---|
| 97 |  D NTE6^PSOHLSG2(.PSI)
 | 
|---|
| 98 |  Q
 | 
|---|
| 99 | RXR(PSI) ;pharmacy route segment
 | 
|---|
| 100 |  Q:'$D(DFN)
 | 
|---|
| 101 |  N RXR
 | 
|---|
| 102 |  S (PSROUTE,RTNAME)=""""""
 | 
|---|
| 103 |  F PSRTLP=0:0 S PSRTLP=$O(^PSRX(IRXN,"MEDR",PSRTLP)) Q:'PSRTLP  D
 | 
|---|
| 104 |  .S PSROUTE=$P($G(^PSRX(IRXN,"MEDR",PSRTLP,0)),"^") I PSROUTE,$D(^PS(51.2,PSROUTE,0))  S RTNAME=$P(^PS(51.2,PSROUTE,0),"^")
 | 
|---|
| 105 |  S RXR="RXR"_FS_CS_CS_CS_$G(PSROUTE)_CS_$G(RTNAME)_CS_"99PSR"
 | 
|---|
| 106 |  S ^TMP("PSO",$J,PSI)=RXR
 | 
|---|
| 107 |  S PSI=PSI+1
 | 
|---|
| 108 |  K PSROUTE,RTNAME,PSRTLP
 | 
|---|
| 109 |  Q
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 | ZRL(PSI) ;Rx label segment
 | 
|---|
| 112 |  Q:'$D(DFN)!('$D(PSOSITE))
 | 
|---|
| 113 |  N ZRL,ZRL1
 | 
|---|
| 114 |  S SITE=$S($D(^PS(59,PSOSITE,0)):^(0),1:"")
 | 
|---|
| 115 |  S ZRL="ZRL"_FS_$P(SITE,"^",6)_FS_$P(SITE,"^",2)_CS_$P(SITE,"^",7)_CS
 | 
|---|
| 116 |  S ZRL=ZRL_$S($D(^DIC(5,+$P(SITE,"^",8),0)):$P(^(0),"^",2),1:"UKN")_CS
 | 
|---|
| 117 |  S PSZIP=$P(SITE,"^",5) S PSOHZIP=$S(PSZIP["-":PSZIP,1:$E(PSZIP,1,5)_$S($E(PSZIP,6,9)]"":"-"_$E(PSZIP,6,9),1:""))
 | 
|---|
| 118 |  S ZRL=ZRL_PSOHZIP_FS_$P(SITE,"^",3)_"-"_$P(SITE,"^",4)_FS
 | 
|---|
| 119 |  S CLN=+$P(^PSRX(IRXN,0),"^",5),CLN1=$S($D(^SC(CLN,0)):$P(^(0),"^",2),1:"UNKNOWN")
 | 
|---|
| 120 |  S CSINER=$S($P(^PSRX(IRXN,3),"^",3):$P(^(3),"^",3),1:"""""")
 | 
|---|
| 121 |  S CSINER1=$S($G(CSINER):$P(^VA(200,CSINER,0),"^"),1:""""""),CSINER1=$$HLNAME^HLFNC(CSINER1)
 | 
|---|
| 122 |  S ZRL=ZRL_CLN_CS_CLN1_CS_"99PSC"_FS_CSINER_CS_CSINER1_FS
 | 
|---|
| 123 |  D 6^VADPT S ZRL=ZRL_$E($P(VADM(2),"^",2),5,11)_FS_$P(VADM(2),"^")_FS_$P($G(^PS(53,+$P($G(^PSRX(IRXN,0)),"^",3),0)),"^",2)_FS_$S($P($G(VAPA(10)),"^",2)]"":$P($G(VAPA(10)),"^",2),1:"""""")_FS
 | 
|---|
| 124 |  S:$G(FP)="F"&('$G(FPN)) MW=$P(^PSRX(IRXN,0),"^",11),FDT=$P(^(2),"^",2),QTY=$P(^(0),"^",7),DASPLY=$P(^(0),"^",8)
 | 
|---|
| 125 |  S:$G(FP)="F"&($G(FPN)) MW=$P(^PSRX(IRXN,1,FPN,0),"^",2),FDT=$P(^(0),"^"),QTY=$P(^(0),"^",4),DASPLY=$P(^(0),"^",10)
 | 
|---|
| 126 |  S:$G(FP)="P" MW=$P(^PSRX(IRXN,"P",FPN,0),"^",2),FDT=$P(^(0),"^"),QTY=$P(^(0),"^",4),DASPLY=$P(^(0),"^",10)
 | 
|---|
| 127 |  I MW="W" S MP=$S($G(^PSRX(IRXN,"MP")):$G(^("MP")),1:"""""")
 | 
|---|
| 128 |  S X=$S($D(^PS(55,DFN,0)):^(0),1:""),CAP=$P(X,"^",2)
 | 
|---|
| 129 |  S:MW="M" MP="""""",MW=$S($P(X,"^",3):"R",1:MW) S MW=$S(MW="M":"REGULAR MAIL",MW="R":"CERTIFIED MAIL",1:"""""")
 | 
|---|
| 130 |  I (($P(^PSRX(IRXN,"STA"),"^")>0)&($P(^("STA"),"^")'=2)&('$G(PSODBQ)))!'$G(^PSRX(IRXN,"IB")) S COPAY="NO COPAY"
 | 
|---|
| 131 |  E  S COPAY="COPAY"
 | 
|---|
| 132 |  S ZRL=ZRL_MP_FS_COPAY_FS_$S($G(CAP):"NON-SAFETY",1:"SAFETY")_FS_$S($G(RFRM):"REFILLABLE",'$G(RFRM):"NON-REFILLABLE",1:"""""")_FS
 | 
|---|
| 133 |  S ZRL=ZRL_$S($G(RFRM)>1:RFRM_" Refills remain prior to",$G(RFRM)=1:"Last fill prior to",1:"""""")_FS_$S($E(MW)="W":"""""",1:MW)_FS
 | 
|---|
| 134 |  S NURSE=$S($P($G(^DPT(DFN,"NHC")),"^")="Y":1,$P($G(^PS(55,DFN,40)),"^"):1,1:0)
 | 
|---|
| 135 |  S ZRL=ZRL_$S($G(NURSE):"Mfg______Exp______",1:"""""")_FS_$S($G(FP)="P":"PARTIAL",1:"""""")_FS
 | 
|---|
| 136 |  S DATE=$$HLDATE^HLFNC(FDT) D NOW^%DTC S NOW=$$HLDATE^HLFNC(%,"TS")
 | 
|---|
| 137 |  K DIC,DR,DIQ S DA=$P($$SITE^VASITE(),"^") I DA D
 | 
|---|
| 138 |  .K PSOINST S DIC=4,DIQ(0)="I",DR=99,DIQ="PSOINST" D EN^DIQ1
 | 
|---|
| 139 |  .S PSOINST=PSOINST(4,DA,99,"I") K DIC,DA,DR,DIQ,PSOINST(4)
 | 
|---|
| 140 |  S DRUG=$$ZZ^PSOSUTL(IRXN),DEA=$P($G(^PSDRUG(+$P(^PSRX(IRXN,0),"^",6),0)),"^",3),WARN=$P($G(^(0)),"^",8)
 | 
|---|
| 141 |  S ZRL=ZRL_NOW_FS_DATE_FS_$S($G(NFLD):NFLD,1:"""""")_FS_DASPLY_FS_PSOINST_"-"_IRXN_FS_$S($G(WARN)'="":"DRUG WARNING "_$G(WARN),1:"""""")_FS_QTY
 | 
|---|
| 142 |  ;COMPENSATE FOR $L(ZRL)>245
 | 
|---|
| 143 |  I $L(ZRL)>245 S LTH=$E($L(ZRL)/245,1) S:$L(ZRL)#245>0 LTH=LTH+1 F WW=1:1:LTH D
 | 
|---|
| 144 |  .S:WW=1 ST=1,EN=245 S:WW>1 ST=(ST+245),EN=(EN+245)
 | 
|---|
| 145 |  .S ZRL1=$E(ZRL,ST,EN)
 | 
|---|
| 146 |  .S:WW=1 ^TMP("PSO",$J,PSI)=ZRL1
 | 
|---|
| 147 |  .S:WW>1 ^TMP("PSO",$J,PSI,WW-1)=ZRL1
 | 
|---|
| 148 |  S:'$D(LTH) ^TMP("PSO",$J,PSI)=ZRL
 | 
|---|
| 149 |  S PSI=PSI+1
 | 
|---|
| 150 |  K SITE,PSZIP,PSOHZIP,CLN,CLN1,CSINER,CSINER1,MW,MP,NOW,QTY,CAP,DASPLY,COPAY,NURSE,DATE,DRUG,WARN,DEA,LTH,WW,ST,EN,VADM,VAPA,%,X,NFLD,RFRM
 | 
|---|
| 151 |  Q
 | 
|---|