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
|
---|