| [613] | 1 | PSOHLINC ;BIR/RTR - Process incoming order messages from CHCS ;06/17/02
 | 
|---|
 | 2 |  ;;7.0;OUTPATIENT PHARMACY;**111,143**;DEC 1997
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 | EN ;Process incoming outpatient order messages
 | 
|---|
 | 5 |  N PSOXLONG,PSOHDFOR,PSOHLTAG,PSOHBDS,PSOHMSG,PSOHLMIS,PSOHLRS,PSOHEID,PSOHEIDS,PSOHFSP,PSOHLNOP,PSOXHI,PSOHLZ,PSOHLZC,PSOHLRXO,PSOXMH,PSOHY,PSOEXMS,PSOEXXQ,PSOHG,PSOBH,X,Y
 | 
|---|
 | 6 |  I '$G(DT) S DT=$$DT^XLFDT
 | 
|---|
 | 7 |  S (PSOXLONG,PSOHLRXO,PSOHLNOP,PSOHDFOR)=0
 | 
|---|
 | 8 |  S PSOHFSP=$E(HL("ECH"),1)
 | 
|---|
 | 9 |  K PSOHLMIS
 | 
|---|
 | 10 |  F PSOXHI=1:1 K PSOHB X HLNEXT Q:HLQUIT'>0!(PSOHLNOP)!(PSOHDFOR)!(PSOXLONG)  S PSOHB=HLNODE,PSOXMH=$E(PSOHB,1,3) D
 | 
|---|
 | 11 |  .S PSOHG=0 F  S PSOHG=$O(HLNODE(PSOHG)) Q:'PSOHG!(PSOHLNOP)!(PSOHDFOR)!(PSOXLONG)  S PSOHB(PSOHG)=HLNODE(PSOHG)
 | 
|---|
 | 12 |  .I (PSOXMH'?3U),(PSOXMH'?2U1N) S PSOHDFOR=1 Q
 | 
|---|
 | 13 |  .I $T(@PSOXMH)]"" D @PSOXMH
 | 
|---|
 | 14 |  ;Quit if not a Pharmacy message, no acknowledgements
 | 
|---|
 | 15 |  I $G(PSOHLNOP) Q
 | 
|---|
 | 16 |  I $G(PSOHY("OCC"))="CA" D ENDC^PSOHLDC Q
 | 
|---|
 | 17 |  I PSOXLONG S PSOEXMS="Invalid NTE segment, greater than 245 characters." D NAK^PSOHLEXC Q
 | 
|---|
 | 18 |  S (PSOHBDS,PSOEXXQ)=0
 | 
|---|
 | 19 |  I PSOHDFOR S PSOEXMS="Invalid message structure." D NAK^PSOHLEXC Q
 | 
|---|
 | 20 |  F PSOHMSG="MSH","PID","PV1","ORC","RXO" Q:PSOEXXQ  I '$D(PSOHLMIS(PSOHMSG)) S PSOEXMS="Missing "_PSOHMSG_" segment." S PSOHBDS=1 D NAK^PSOHLEXC
 | 
|---|
 | 21 |  ;Quit if segment is missing
 | 
|---|
 | 22 |  I $G(PSOEXXQ) Q
 | 
|---|
 | 23 |  ;Quit if not a Pharmacy message, no acknowledgements
 | 
|---|
 | 24 |  ;I $G(PSOHLNOP) Q
 | 
|---|
 | 25 |  ;check for data exceptions
 | 
|---|
 | 26 |  D CHECK^PSOHLEXC
 | 
|---|
 | 27 |  ;PSOEXXQ set if a NAK was sent back
 | 
|---|
 | 28 |  I $G(PSOEXXQ) Q
 | 
|---|
 | 29 |  ;Enter order into Pending Outpatient Orders file
 | 
|---|
 | 30 |  D ADD^PSOHCPRS
 | 
|---|
 | 31 |  ;Send successful acknowledgement if PSOEXXQ not set
 | 
|---|
 | 32 |  I '$G(PSOEXXQ) D ACK^PSOHLEXC
 | 
|---|
 | 33 |  Q
 | 
|---|
 | 34 |  ;What about regular acknowledgements?  handled by HL7 package somehow
 | 
|---|
 | 35 |  Q
 | 
|---|
 | 36 | MSH ;Process MSH segment
 | 
|---|
 | 37 |  I $P(PSOHB,HL("FS"),5)'="PSO RECEIVE" S PSOHLNOP=1
 | 
|---|
 | 38 |  S PSOHLMIS("MSH")=""
 | 
|---|
 | 39 |  Q
 | 
|---|
 | 40 | PID ;Process PID segment
 | 
|---|
 | 41 |  D FORM
 | 
|---|
 | 42 |  S PSOHY("PAT")=+$P(PSOHB,HL("FS"),3)
 | 
|---|
 | 43 |  S PSOHLMIS("PID")=""
 | 
|---|
 | 44 |  Q
 | 
|---|
 | 45 | PV1 ;Process PV1 segment
 | 
|---|
 | 46 |  D FORM
 | 
|---|
 | 47 |  S PSOHY("LOC")=+$P(PSOHB,HL("FS"),3)
 | 
|---|
 | 48 |  S PSOHLMIS("PV1")=""
 | 
|---|
 | 49 |  Q
 | 
|---|
 | 50 | DG1 ;Process DG1 segment ; future use
 | 
|---|
 | 51 |  D FORM
 | 
|---|
 | 52 |  S $P(PSOHY("ICD"),U,$P(PSOHB,HL("FS"),1))=$P(PSOHB,HL("FS"),3)
 | 
|---|
 | 53 | ZCL Q  ;future use
 | 
|---|
 | 54 |  ;
 | 
|---|
 | 55 | ORC ;Process ORC segment
 | 
|---|
 | 56 |  S PSOHLRXO=1 ;For future use in processing NTE's, if other segments get NTE(6) or (7)
 | 
|---|
 | 57 |  D FORM
 | 
|---|
 | 58 |  I $O(PSOHB(""))'="" D ORC^PSOHLINL Q
 | 
|---|
 | 59 |  S PSOHY("OCC")=$P(PSOHB,HL("FS"))
 | 
|---|
 | 60 |  ;Set priority to Routine
 | 
|---|
 | 61 |  S PSOHY("PRIOR")="R"
 | 
|---|
 | 62 |  S PSOHY("CHNUM")=$P($P(PSOHB,HL("FS"),2),PSOHFSP)
 | 
|---|
 | 63 |  D NOW^%DTC S PSOHY("EDT")=%
 | 
|---|
 | 64 |  S X=$P(PSOHB,HL("FS"),9) D
 | 
|---|
 | 65 |  .I X S PSOHY("SDT")=$$HL7TFM^XLFDT(X) Q
 | 
|---|
 | 66 |  .S PSOHY("SDT")=$G(PSOHY("EDT"))
 | 
|---|
 | 67 |  S PSOHY("ENTER")=+$P(PSOHB,HL("FS"),10)
 | 
|---|
 | 68 |  S PSOHY("PROV")=+$P(PSOHB,HL("FS"),12)
 | 
|---|
 | 69 |  S PSOHLMIS("ORC")=""
 | 
|---|
 | 70 |  Q
 | 
|---|
 | 71 | RXO ;Process RXO segment
 | 
|---|
 | 72 |  D FORM
 | 
|---|
 | 73 |  I $O(PSOHB(""))'="" D RXO^PSOHLINL Q
 | 
|---|
 | 74 |  S PSOHY("DRUG")=+$P(PSOHB,HL("FS"),10)
 | 
|---|
 | 75 |  S PSOHY("QTY")=$P(PSOHB,HL("FS"),11)
 | 
|---|
 | 76 |  S PSOHY("REF")=$P(PSOHB,HL("FS"),13)
 | 
|---|
 | 77 |  S PSOHLMIS("RXO")=""
 | 
|---|
 | 78 |  Q
 | 
|---|
 | 79 | RXR ;Process RXR segment
 | 
|---|
 | 80 |  D FORM
 | 
|---|
 | 81 |  Q
 | 
|---|
 | 82 | ZRX ;Process ZRX segment
 | 
|---|
 | 83 |  D FORM
 | 
|---|
 | 84 |  S PSOHY("PICK")=$S($P(PSOHB,HL("FS"),4)="M":"M",1:"W")
 | 
|---|
 | 85 |  Q
 | 
|---|
 | 86 | NTE ;
 | 
|---|
 | 87 |  D FORM
 | 
|---|
 | 88 |  I $P(PSOHB,HL("FS"))=6 D COMM Q
 | 
|---|
 | 89 |  I $P(PSOHB,HL("FS"))=7 D SIG Q
 | 
|---|
 | 90 |  Q
 | 
|---|
 | 91 | COMM ;Process Provider Comments
 | 
|---|
 | 92 |  I $O(PSOHB(""))'="" D COMM^PSOHLINL Q
 | 
|---|
 | 93 |  K ^UTILITY($J,"W")
 | 
|---|
 | 94 |  S X=$P(PSOHB,HL("FS"),3,999)
 | 
|---|
 | 95 |  I $L(X)>245 S PSOXLONG=1 Q
 | 
|---|
 | 96 |  S DIWL=1,DIWR=70,DIWF="" D ^DIWP
 | 
|---|
 | 97 |  D ENCOMM^PSOHLINL
 | 
|---|
 | 98 |  K ^UTILITY($J,"W")
 | 
|---|
 | 99 |  Q
 | 
|---|
 | 100 | SIG ;Process SIG
 | 
|---|
 | 101 |  I $O(PSOHB(""))'="" D SIG^PSOHLINL Q
 | 
|---|
 | 102 |  K ^UTILITY($J,"W")
 | 
|---|
 | 103 |  S X=$P(PSOHB,HL("FS"),3,999)
 | 
|---|
 | 104 |  I $L(X)>245 S PSOXLONG=1 Q
 | 
|---|
 | 105 |  S DIWL=1,DIWR=70,DIWF="" D ^DIWP
 | 
|---|
 | 106 |  D ENSIG^PSOHLINL
 | 
|---|
 | 107 |  K ^UTILITY($J,"W")
 | 
|---|
 | 108 |  Q
 | 
|---|
 | 109 | FORM ;
 | 
|---|
 | 110 |  S PSOHB=$E(PSOHB,(4+$L(HL("FS"))),$L(PSOHB))
 | 
|---|
 | 111 |  Q
 | 
|---|
 | 112 |  ;AND IF YOU ADD PSOHLNEW TO THE PATCH, FIX THE HEADER OF THE 3 NODE TO MATCH HOW YOU DID IT IN PSOHCPRS. SINCE IT IS A WORD PROCESSING FIELD
 | 
|---|
 | 113 |  ; And maybe fix -1 problem if no related institution is found
 | 
|---|
 | 114 |  ; AND IF YOU PATCH PSOHLSN1, AT THE rxr POINT, INITIALIZE RTENAME AT THE BEGINNING OF EACH LOOP
 | 
|---|