1 | QACMAIL1 ;ERC/WASHCIOFO-Send data to reposititory ;11/29/99
|
---|
2 | ;;2.0;Patient Representative;**4,14,15,17**;07/25/1995
|
---|
3 | ;continuation routine - contains looping code, assigns variables
|
---|
4 | ;and stuffs values into temporary global ^TMP("QAC MAIL",$J,linecount)
|
---|
5 | ;
|
---|
6 | ENV ;environment check - to ensure that the Mailman patch creating
|
---|
7 | ;domain has beem installed.
|
---|
8 | N QACQ,QACE,ZPDQUIT
|
---|
9 | S QACQ="Q-PSS.MED.VA.GOV"
|
---|
10 | Q:$$FIND1^DIC(4.2,,"QX",QACQ,"B",,"QACE")
|
---|
11 | W !!?5,$C(7),"**** Installation of this patch requires that domain "
|
---|
12 | W !?10,QACQ," be defined."
|
---|
13 | S XPDQUIT=1
|
---|
14 | W !!!?5,"Refer to patch XM*999*133 for domain definition information."
|
---|
15 | W !?15,"<Patch QAC*2.0*4 installation aborted!>",!!
|
---|
16 | Q
|
---|
17 | LOOP ;
|
---|
18 | ;loop through file 745.1 looking for entries edited
|
---|
19 | ;since the previous rollup that have at least one issue code.
|
---|
20 | N QACD,QACDD,QACJ,QACLAST,QACOUNT
|
---|
21 | S QACJ=0
|
---|
22 | S QACLAST=$P($G(^QA(740,1,"QAC")),U,4)
|
---|
23 | ;(DBIA #3061 for lookup of value of QAC LAST RECORD in file #740)
|
---|
24 | S QACOUNT=0
|
---|
25 | F S QACJ=$O(^QA(745.1,"F",3,QACJ)) Q:QACJ'>0!($G(QACOUNT)>700) D WORK
|
---|
26 | I $G(QACLAST)'>0 D
|
---|
27 | . ;if QACLAST'>0, need to run rollup for the first time from 10/01/99
|
---|
28 | . S QACD=$O(^QA(745.1,"D",2991000)) Q:QACD'>0 D
|
---|
29 | . . S QACJ=$O(^QA(745.1,"D",QACD,QACJ)) Q:QACJ'>0 S QACJ=QACJ-1 D
|
---|
30 | . . . F S QACJ=$O(^QA(745.1,QACJ)) Q:QACJ'>0!($G(QACOUNT)>700) D WORK
|
---|
31 | S DIE="^QA(740,",DA=1,DR="753////^S X=QACLAST"
|
---|
32 | D ^DIE K DA,DIE,DR
|
---|
33 | Q
|
---|
34 | WORK ;
|
---|
35 | D NODE0
|
---|
36 | S QACLAST=QACJ
|
---|
37 | S QACOUNT=QACOUNT+1
|
---|
38 | S DIE="^QA(745.1,",DA=QACJ,DR="41///@" D ^DIE K DA,DIE,DR
|
---|
39 | Q
|
---|
40 | DATA ; Set data into local variables and then into ^TMP global for
|
---|
41 | ; inclusion in mail message.
|
---|
42 | N QACNODE2,QACNODE7
|
---|
43 | N QACK,QACL,QACM,QACN
|
---|
44 | N QACCOM,QACDAT,QACDATE,QACDAYS,QACDISC,QACDIV,QACDOB,QACELIG,QACISSC
|
---|
45 | N QACLSAT,QACMADE,QACNO,QACPGV,QACPSRV,QACRDAT,QACRDATE,QACROC
|
---|
46 | N QACSEAT,QACSEX,QACSSN,QACSTAT,QACTST
|
---|
47 | ;if record was previously rejected and is now closed set Roll-up status
|
---|
48 | ;to "0" (call ROLL(0)) - if still open but has IC call ROLL(2)
|
---|
49 | ;if record previously sent but "open", but is now closed, call ROLL(0)
|
---|
50 | N QACNOT
|
---|
51 | S QACROC=$P($G(QACNODE0),U)
|
---|
52 | I $G(QACNODE0)]"" D
|
---|
53 | . I $P($G(QACNODE0),U,3)]"" D
|
---|
54 | . . S QACSSN=$P(VADM(2),U) ;SSN
|
---|
55 | . . S QACDOB=$P(VADM(3),U) ;DOB
|
---|
56 | . . I $G(QACDOB) D ;Austin wanted dates in MMDDYYYY
|
---|
57 | . . . S QACDOB=$P($$FMTHL7^XLFDT(QACDOB),"-")
|
---|
58 | . . . S QACDOB=$E(QACDOB,5,8)_$E(QACDOB,1,4)
|
---|
59 | . . S QACSEX=$P(VADM(5),U)
|
---|
60 | . S QACDATE=$P(QACNODE0,U,2) ;date of contact
|
---|
61 | . I $G(QACDATE) D
|
---|
62 | . . S QACDATE=$P($$FMTHL7^XLFDT(QACDATE),"-")
|
---|
63 | . . S QACDATE=$E(QACDATE,5,8)_$E(QACDATE,1,4)
|
---|
64 | . S QACPSRV=$P($G(QACNODE0),U,14) ;period of service
|
---|
65 | . S QACPGV=$P($G(QACNODE0),U,15) ;Persian Gulf vet?
|
---|
66 | . S QACDIV=""
|
---|
67 | . I $P($G(QACNODE0),U,16)]"" D DIV16
|
---|
68 | . ;S QACDIV=$E(QACDIV,1,30)
|
---|
69 | . I $G(QACDIV)["Unknown" S QACDIV=""
|
---|
70 | . S QACELIG=$S($P($G(QACNODE0),U,4)]"":$O(^DIC(8,"B",$P($G(QACNODE0),U,4),0)),1:"UNK") ;eligibility
|
---|
71 | . S QACMADE=$P(QACNODE0,U,10)
|
---|
72 | NODE2 ; set variables for node 2
|
---|
73 | S QACNODE2=$G(^QA(745.1,QACJ,2))
|
---|
74 | I QACNODE2]"" S QACTST=$P($G(QACNODE2),U,2) ;treatment status
|
---|
75 | S QACINTAP=$P($G(QACNODE2),U,7) ;Internal Appeal
|
---|
76 | NODE3 ;issue code info
|
---|
77 | S QACK=0
|
---|
78 | F S QACK=$O(^QA(745.1,QACJ,3,QACK)) Q:QACK'>0 D
|
---|
79 | . S QACISSC(QACK)=$P(^QA(745.2,^QA(745.1,QACJ,3,QACK,0),0),U)
|
---|
80 | . I $P($G(^QA(745.1,QACJ,3,QACK,3,0)),U,3)'>0 S QACDISC(QACK,1)=QACISSC(QACK)_"^"
|
---|
81 | . S QACL=0
|
---|
82 | . F S QACL=$O(^QA(745.1,QACJ,3,QACK,3,QACL)) Q:QACL'>0 D
|
---|
83 | . . ;get code for discipline
|
---|
84 | . . N QACTEMP,QACTMP
|
---|
85 | . . S QACTMP=$P($G(^QA(745.1,QACJ,3,QACK,3,QACL,0)),U,2)
|
---|
86 | . . S QACTEMP=$S($G(QACTMP)]"":$P($G(^QA(745.5,QACTMP,0)),U),1:"")
|
---|
87 | . . S QACDISC(QACK,QACL)=QACISSC(QACK)_"^"_$G(QACTEMP)
|
---|
88 | NODE7 ;set variables for node 7
|
---|
89 | S QACNODE7=$G(^QA(745.1,QACJ,7)) I $G(QACNODE7)]"" D
|
---|
90 | . S QACSTAT=$P($G(QACNODE7),U,2) ;status
|
---|
91 | . S QACRDATE=$P(QACNODE7,U) ;resolution date
|
---|
92 | . I $G(QACRDATE) D
|
---|
93 | . . S QACRDATE=$P($$FMTHL7^XLFDT(QACRDATE),"-")
|
---|
94 | . . S QACRDATE=$E(QACRDATE,5,8)_$E(QACRDATE,1,4)
|
---|
95 | . S QACDAYS=$P($G(QACNODE7),U,4) ;days to resolution
|
---|
96 | NODE8 ; set variables for employee multiple
|
---|
97 | N QACC
|
---|
98 | S QACC=0
|
---|
99 | K QACEM,QACEMP
|
---|
100 | F S QACC=$O(^QA(745.1,QACJ,8,QACC)) Q:QACC'>0 D
|
---|
101 | . S QACEM=^QA(745.1,QACJ,8,QACC,0) Q:QACEM'>0
|
---|
102 | . S QACEM=$P($G(^VA(200,QACEM,0)),U)
|
---|
103 | . I $G(QACEM)]"" S QACEMP(QACJ,QACC)=QACEM
|
---|
104 | NODE12 ; set variables for source(s) of contact multiple
|
---|
105 | N QACD,QACSOR,QACSR
|
---|
106 | S QACD=0
|
---|
107 | F S QACD=$O(^QA(745.1,QACJ,12,QACD)) Q:QACD'>0 D
|
---|
108 | . S QACSR=^QA(745.1,QACJ,12,QACD,0) Q:QACSR']""
|
---|
109 | . I $G(QACSR)]"" S QACSOR(QACJ,QACD)=QACSR
|
---|
110 | STUFF ; Stuff variables into ^TMP global for use in ^XMD
|
---|
111 | ; field delimiter = "^"
|
---|
112 | ; line delimiter = "&"
|
---|
113 | ; record delimiter = "$"
|
---|
114 | ; message delimiter = "#"
|
---|
115 | N QACJJ,QACKK,QACLL
|
---|
116 | S QACRCNT=QACRCNT+1
|
---|
117 | ;check message size - need to ensure message < 32000
|
---|
118 | I $G(QACTCNT)>29000 D NEWMSG^QACMAIL0
|
---|
119 | X QACINC
|
---|
120 | S ^TMP("QAC MAIL",$J,QACLCNT)=$G(QACROC)_"^ROC^"_$G(QACDATE)_"^"_$G(QACSSN)_"^"_$G(QACSEX)_"^"_$G(QACDOB)_"^"_$G(QACSTAT)_"^"_$G(QACRDATE)_"^"_$G(QACTST)_"^"_$G(QACPSRV)
|
---|
121 | S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_"^"_$G(QACPGV)_"^"_$G(QACDIV)_"^"_$G(QACDAYS)_"^"_$G(QACELIG)_"^"_$G(QACMADE)_"^"_$G(QACVISN)_"^"_$G(QACINTAP)_"&"
|
---|
122 | STFFISSC ;stuff issue code values into ^TMP
|
---|
123 | ;using "~" as an Issue Code delimiter
|
---|
124 | N QACCHCNT
|
---|
125 | S (QACJJ,QACKK)=0
|
---|
126 | I $O(QACISSC(0))'>0 Q
|
---|
127 | X QACINC S ^TMP("QAC MAIL",$J,QACLCNT)=$G(QACROC)_"^ISSC^"
|
---|
128 | F S QACJJ=$O(QACDISC(QACJJ)) Q:QACJJ'>0 D
|
---|
129 | . S QACKK=0
|
---|
130 | . F S QACKK=$O(QACDISC(QACJJ,QACKK)) Q:QACKK'>0 D
|
---|
131 | . . N QACLIN,QACLINE
|
---|
132 | . . S QACLINE=QACDISC(QACJJ,QACKK)
|
---|
133 | . . ; adding employee(s) to each issue code. In future employee (and
|
---|
134 | . . ; location) will be associated with Issue Code - code will change
|
---|
135 | . . ; here. For now, location will be represented by "" in last piece
|
---|
136 | . . ; There will be one IC, one Disc., one location and one employee
|
---|
137 | . . ; separated by "^", and each 4 field set separated by "~"
|
---|
138 | . . S (QACE,QACCHCNT)=0
|
---|
139 | . . I $O(QACEMP(0))'>0 S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_QACLINE_"^^~"
|
---|
140 | . . F S QACE=$O(QACEMP(QACJ,QACE)) Q:QACE'>0 D
|
---|
141 | . . . S QACLIN=QACLINE_"^"_$G(QACEMP(QACJ,QACE))_"^~" ;space for loc
|
---|
142 | . . . I $L(QACLIN)+$L(^TMP("QAC MAIL",$J,QACLCNT))>200 D
|
---|
143 | . . . . X QACINC
|
---|
144 | . . . . S ^TMP("QAC MAIL",$J,QACLCNT)=""
|
---|
145 | . . . S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_QACLIN
|
---|
146 | . . . S QACLIN=""
|
---|
147 | S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_"&"
|
---|
148 | STFFSOUR ;stuff values for source(s) of contact into ^TMP
|
---|
149 | X QACINC
|
---|
150 | S ^TMP("QAC MAIL",$J,QACLCNT)=$G(QACROC)_"^SOUR"
|
---|
151 | N QACF
|
---|
152 | S QACF=0
|
---|
153 | F S QACF=$O(QACSOR(QACJ,QACF)) Q:QACF'>0 D
|
---|
154 | . S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_"^"_$G(QACSOR(QACJ,QACF))
|
---|
155 | S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_"$"
|
---|
156 | Q
|
---|
157 | NODE0 ;set values from zero node
|
---|
158 | N DFN,QACNAME,QACNODE0,QACNOFLG,VADM
|
---|
159 | S QACNODE0=^QA(745.1,QACJ,0)
|
---|
160 | I $P($G(QACNODE0),U,3)]"" D
|
---|
161 | . S DFN=$P(QACNODE0,U,3)
|
---|
162 | . D ^VADPT
|
---|
163 | S QACNAME=$S($G(VADM(1))]"":VADM(1),1:"No Patient Involved")
|
---|
164 | ;If no issue code count record and go to next entry.
|
---|
165 | I $P($G(^QA(745.1,QACJ,3,0)),U,3)<1 D
|
---|
166 | . S QACNOCNT=$G(QACNOCNT)+1,QACNOT=1
|
---|
167 | . ;D ROLL^QACMAIL0(1) ;sets Roll-Up Status to rejected
|
---|
168 | . Q
|
---|
169 | I $G(QACNOT)=1 S QACNOT=0 Q
|
---|
170 | D DATA
|
---|
171 | Q
|
---|
172 | LOOP1 ;post-install to check previously rejected records (see if they now
|
---|
173 | ;have Issue Codes) and to get any records since last run of the
|
---|
174 | ;rollup. for QAC*2*17. will set these records to a Rollup Status
|
---|
175 | ;of 3, which means they will be transmitted with the next run.
|
---|
176 | N QACF,QACJ
|
---|
177 | F QACF=1,2 S QACJ=0 D
|
---|
178 | . F S QACJ=$O(^QA(745.1,"F",QACF,QACJ)) Q:QACJ'>0 D
|
---|
179 | . . I $P($G(^QA(745.1,QACJ,3,0)),U,3)'>0 D DIE("@") Q
|
---|
180 | . . D DIE(3)
|
---|
181 | S QACJ=$P(^QA(740,1,"QAC"),U,4)
|
---|
182 | I $G(QACJ)']"" Q
|
---|
183 | F S QACJ=$O(^QA(745.1,QACJ)) Q:QACJ'>0 D
|
---|
184 | . D DIE(3)
|
---|
185 | Q
|
---|
186 | DIE(QACE) ;
|
---|
187 | S DIE="^QA(745.1,",DA=QACJ,DR="41///^S X=QACE"
|
---|
188 | D ^DIE
|
---|
189 | K DA,DIE,DR,QACE
|
---|
190 | Q
|
---|
191 | DIV16 ;division field, #37
|
---|
192 | S QACNO=$P($G(QACNODE0),U,16)
|
---|
193 | ;D INST^QACUTL0(QACNO,.QACDIV)
|
---|
194 | S QACDIV=$P($G(^DIC(4,QACNO,99)),U)
|
---|
195 | Q
|
---|