| 1 | PSSHLU ;BIR/RLW-UTILITIES USED IN BUILDING HL7 SEGMENTS ;11/14/96
 | 
|---|
| 2 |  ;;1.0;PHARMACY DATA MANAGEMENT;**38**;9/30/97
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | INIT ; set up HL7 application variables
 | 
|---|
| 5 |  ;I '$D(HLNDAP) S HLNDAP=0,HLNDAP=$O(^HL(770,"B","OE/RR",HLNDAP)),HLSDT="PS" D INIT^HLTRANS I $D(HLERR) W !!?7,"THE HL7 INITIALIZATION FAILED",!! Q
 | 
|---|
| 6 |  S PSJI=1
 | 
|---|
| 7 |  S PSSHINST=$P($G(^DIC(4,+$P($G(^XMB(1,1,"XUS")),"^",17),99)),"^") S ^TMP("HLS",$J,"PS",PSJI)="MSH|^~\&|PHARMACY|"_$G(PSSHINST)_"|||||MFN" K PSSHINST
 | 
|---|
| 8 |  S PSJCLEAR="F J=0:1:LIMIT S FIELD(J)="""""
 | 
|---|
| 9 |  Q
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 | SEGMENT(LIMIT) ;
 | 
|---|
| 12 |  N SUBSEG,SEGLENGT S SUBSEG=0,SEGMENT(SUBSEG)="" F J=0:1:LIMIT D
 | 
|---|
| 13 |  .I SEGMENT(SUBSEG)']"" S SEGMENT(SUBSEG)=FIELD(J) Q
 | 
|---|
| 14 |  .S SEGLENGT=$L(SEGMENT(SUBSEG))+$L(FIELD(J))
 | 
|---|
| 15 |  .I SEGLENGT<245 S SEGMENT(SUBSEG)=SEGMENT(SUBSEG)_"|"_FIELD(J) Q
 | 
|---|
| 16 |  .I $L(SEGMENT(SUBSEG))=245 S SUBSEG=SUBSEG+1,SEGMENT(SUBSEG)="|"_FIELD(J) Q
 | 
|---|
| 17 |  .S SEGMENT(SUBSEG)=SEGMENT(SUBSEG)_"|"_$E(FIELD(J),1,244-$L(SEGMENT(SUBSEG))),SUBSEG=SUBSEG+1,SEGMENT(SUBSEG)=$E(FIELD(J),SEGLENGT-245,SEGLENGT+1)
 | 
|---|
| 18 |  S PSJI=PSJI+1,^TMP("HLS",$J,"PS",PSJI)=SEGMENT(0)
 | 
|---|
| 19 |  F J=1:1 Q:'$D(SEGMENT(J))  S ^TMP("HLS",$J,"PS",PSJI,J)=SEGMENT(J)
 | 
|---|
| 20 |  Q
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 | CALL(HLEVN) ; call DHCP HL7 package -or- protocol, to pass Orders
 | 
|---|
| 23 |  ; HLEVN = number of segments in message
 | 
|---|
| 24 |  ;D EN^HLTRANS W:$D(HLERR) !!?7,"***ERROR IN CREATING HL7 MAIL MESSAGE***"
 | 
|---|
| 25 |  S MSG="^TMP(""HLS"",$J,""PS"")"
 | 
|---|
| 26 |  D MSG^XQOR("PS EVSEND OR",.MSG)
 | 
|---|
| 27 |  Q
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | MF(HLEVN) ; call DHCP HL7 -or- protocol, to pass Master File transactions
 | 
|---|
| 30 |  ; HLEVN = number of segments in message
 | 
|---|
| 31 |  ;D EN^HLTRANS W:$D(HLERR) !!?7,"***ERROR IN CREATING HL7 MAIL MESSAGE***"
 | 
|---|
| 32 |  S MSG="^TMP(""HLS"",$J,""PS"")"
 | 
|---|
| 33 |  D MSG^XQOR("PS MFSEND OR",.MSG)
 | 
|---|
| 34 |  Q
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 | SCH(HLEVN)         ; call to pass Schedule file to OE/RR
 | 
|---|
| 37 |  S MSG="^TMP(""HLS"",$J,""PS"")"
 | 
|---|
| 38 |  D MSG^XQOR("PS EVSEND SCH",.MSG)
 | 
|---|
| 39 |  Q
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 | USAGE(POI) ;
 | 
|---|
| 42 |  N USAGE,PSSDDINX,I F I="O","I","B","A","V" S USAGE(I)=0
 | 
|---|
| 43 |  I $P($G(^PS(50.7,POI,0)),"^",3) G IVFLAG
 | 
|---|
| 44 |  S I="" F PSSDDINX=0:0 S PSSDDINX=$O(^PS(50.7,"A50",POI,PSSDDINX)) Q:'PSSDDINX  D
 | 
|---|
| 45 |  .I '$P($G(^PSDRUG(PSSDDINX,"I")),"^")!(+$P($G(^("I")),"^")>DT) D
 | 
|---|
| 46 |  ..S USAGE=$P($G(^PSDRUG(PSSDDINX,2)),"^",3),USAGE=$TR(USAGE,"U","I") F I="O","I" S:USAGE[I USAGE(I)=USAGE(I)+1
 | 
|---|
| 47 |  .N PSSOAD,PSSOSD
 | 
|---|
| 48 |  .F PSSOAD=0:0 S PSSOAD=$O(^PSDRUG("A526",PSSDDINX,PSSOAD)) Q:'PSSOAD  D
 | 
|---|
| 49 |  ..Q:$P($G(^PS(52.6,PSSOAD,"I")),"^")&(+$P($G(^PS(52.6,PSSOAD,"I")),"^")'>DT)
 | 
|---|
| 50 |  ..S USAGE("I")=USAGE("I")+1,USAGE("V")=USAGE("V")+1
 | 
|---|
| 51 |  ..I $P($G(^PS(52.6,PSSOAD,0)),"^",13) S USAGE("A")=USAGE("A")+1
 | 
|---|
| 52 |  .F PSSOSD=0:0 S PSSOSD=$O(^PSDRUG("A527",PSSDDINX,PSSOSD)) Q:'PSSOSD  D
 | 
|---|
| 53 |  ..Q:$P($G(^PS(52.7,PSSOSD,"I")),"^")&(+$P($G(^PS(52.7,PSSOSD,"I")),"^")'>DT)
 | 
|---|
| 54 |  ..S USAGE("I")=USAGE("I")+1,USAGE("V")=USAGE("V")+1
 | 
|---|
| 55 |  ..I $P($G(^PS(52.7,PSSOSD,0)),"^",13) S USAGE("B")=USAGE("B")+1
 | 
|---|
| 56 | IVFLAG ;
 | 
|---|
| 57 |  S USAGE="" F I="O","I","B","A","V" S USAGE=USAGE_I_USAGE(I)
 | 
|---|
| 58 |  Q USAGE
 | 
|---|