1 | SCMCCV ;ALB/REW - PCMM Conversion of Patient File Fields ; 1 Feb 1996
|
---|
2 | ;;5.3;Scheduling;**41**;AUG 13, 1993
|
---|
3 | EN ;
|
---|
4 | ; Variables:
|
---|
5 | ; SCASSIGN: 1=Make Patient Assignments if unambiguous (0=No,default)
|
---|
6 | ; SCDT: Date to make assignments (Default=DT)
|
---|
7 | ; SCYESTM: 1=Make Pt Tm as well as Pt Posit Assmnts,default(0=No)
|
---|
8 | ; SCNOPRPT 1=Don't print patient-detail lines
|
---|
9 | ;
|
---|
10 | N SCOK,DFN,SCPCNODE,SCLIST,SCTMPLST,SCHISTAR,SCASSIGN,SCYESTM,SCTM,Y,SCSTOP,SCPAGE,SCNOPRPT,SCTEAMAR,SCNOW,SCSUB
|
---|
11 | N SCLSEQ,SCN,SCESEQ,SCPARM,SCP,SCBEGIN,SCEND,SCINCL,SCDTS
|
---|
12 | IF '$$OKASK D MESS("Search aborted","!?5") G QTEN
|
---|
13 | IF '$D(IO("Q")) D
|
---|
14 | .U IO
|
---|
15 | .D REP
|
---|
16 | .D ^%ZISC
|
---|
17 | ELSE D
|
---|
18 | .F X="SCASSIGN","SCYESTM","SCDT","SCNOPRPT" S ZTSAVE(X)=""
|
---|
19 | .S Y=$$QUE("SC Patient-Team/Practitioner"_$S('SCASSIGN:"Report Only",1:"Report and Assignment"),"REP^SCMCCV")
|
---|
20 | QTEN Q
|
---|
21 | ;
|
---|
22 | OKASK() ;
|
---|
23 | N SCOK,DIR
|
---|
24 | ;do you want to assign or just get a report?
|
---|
25 | S DIR(0)="Y"
|
---|
26 | S DIR("B")="NO"
|
---|
27 | S DIR("A")="Do you want to assign patients right now?"
|
---|
28 | S DIR("A",1)=""
|
---|
29 | S DIR("A",2)=""
|
---|
30 | S DIR("A",3)=" YES = Assign Patients to Teams and Team Positions"
|
---|
31 | S DIR("A",4)=" NO = Just print report to see how things would be"
|
---|
32 | D ^DIR
|
---|
33 | IF $D(DTOUT)!$D(DUOUT)!$D(DIROUT) S SCOK=0 G QTASK
|
---|
34 | S SCASSIGN=Y
|
---|
35 | ;do you want to omit printing patients?
|
---|
36 | S DIR(0)="Y"
|
---|
37 | S DIR("B")="YES"
|
---|
38 | S DIR("A")="Do you want to omit printing patients?"
|
---|
39 | S DIR("A",1)=""
|
---|
40 | S DIR("A",2)=""
|
---|
41 | S DIR("A",3)=" NO = Print detail line for each patient that is assignable"
|
---|
42 | S DIR("A",4)=" YES = Just print Team & Practitioner information"
|
---|
43 | D ^DIR
|
---|
44 | IF $D(DTOUT)!$D(DUOUT)!$D(DIROUT) S SCOK=0 G QTASK
|
---|
45 | S SCNOPRPT=Y
|
---|
46 | IF '$D(SCASSIGN) S SCASSIGN=0
|
---|
47 | IF '$D(SCDT) S SCDT=DT
|
---|
48 | IF '$D(SCYESTM) S SCYESTM=1
|
---|
49 | S SCOK=$$GETDEV
|
---|
50 | QTASK Q SCOK
|
---|
51 | ;
|
---|
52 | REP ;non-interactive portion
|
---|
53 | Q:$$FIRST^SCMCRU ;check for task end
|
---|
54 | IF '$$OKINIT() G QTEN
|
---|
55 | D MESS(" ..Ok")
|
---|
56 | IF '$$OKBUILD G QRP
|
---|
57 | D MESS(" ..Ok")
|
---|
58 | IF '$$OKREPORT G QRP
|
---|
59 | D MESS(" ..Ok")
|
---|
60 | IF '$$OKCLEAN G QRP
|
---|
61 | D MESS(" ..Ok")
|
---|
62 | QRP Q
|
---|
63 | ;
|
---|
64 | OKINIT() ;
|
---|
65 | N SCOK
|
---|
66 | S SCOK=1
|
---|
67 | D MESS(">>> Checking Programmer Variables:","!,?5")
|
---|
68 | IF +$G(DUZ)'>0!($G(U)'="^")!('$D(DT)) D Q 0
|
---|
69 | . S XPDABORT=1
|
---|
70 | . D MESS("You must first initialize Programmer Environment by running ^XUP")
|
---|
71 | . S SCOK=0
|
---|
72 | S SCLIST="SCTMPLST"
|
---|
73 | D INIT^SCAPMCU1(.SCOK)
|
---|
74 | D NOW^%DTC
|
---|
75 | S SCNOW=%
|
---|
76 | S SCHISTAR(.05)=1 ;pc practitioner
|
---|
77 | S SCHISTAR(.06)=DUZ ;user entering
|
---|
78 | S SCHISTAR(.07)=SCNOW ;date entered
|
---|
79 | S SCTEAMAR(.08)=1 ;pc team
|
---|
80 | S SCTEAMAR(.11)=DUZ ;user
|
---|
81 | S SCTEAMAR(.12)=SCNOW ;date enter=now
|
---|
82 | Q SCOK
|
---|
83 | ;
|
---|
84 | OKBUILD() ;
|
---|
85 | N SCOK
|
---|
86 | S SCOK=1
|
---|
87 | D MESS(">>> Looping through PC Nodes of PATIENT File","!,?5")
|
---|
88 | S DFN=0
|
---|
89 | F S DFN=$O(^DPT(DFN)) Q:'DFN S SCPCNODE=$G(^DPT(DFN,"PC")) IF SCPCNODE]"" D D:'(DFN#100) MESS(".")
|
---|
90 | .S ^TMP("SCMC",$J,"TMPRPT",+$P(SCPCNODE,U,2),+$P(SCPCNODE,U,1),DFN)=""
|
---|
91 | Q SCOK
|
---|
92 | ;
|
---|
93 | OKREPORT() ;
|
---|
94 | N SCOK,SCTM,SCPR,SCTMNODE
|
---|
95 | S SCOK=1
|
---|
96 | D MESS(">>> Producing PATIENT File PC Report","!?5")
|
---|
97 | D MESS(" Checking Team/Practitioner Assignments:","!?10")
|
---|
98 | S SCTM=0
|
---|
99 | F S SCTM=$O(^TMP("SCMC",$J,"TMPRPT",SCTM)) Q:'SCTM!$G(SCSTOP) D
|
---|
100 | .S SCTMNODE=$G(^SCTM(404.51,SCTM,0))
|
---|
101 | .D MESS(">>>Team: "_$$DISPTM(SCTM),"!!?10")
|
---|
102 | .IF '$$OKTEAM(SCTM,SCDT) D
|
---|
103 | ..S SCOK=0
|
---|
104 | ..;D MESS("Problem(s) with Practitioner Assignments","!?15")
|
---|
105 | Q SCOK
|
---|
106 | ;
|
---|
107 | OKTEAM(SCTM,SCDT) ;return 1 if exactly 1 posit for each team assignment
|
---|
108 | ;needs 'tmp('scmc',$j,'tmpr' array defined
|
---|
109 | ;return count of positions pract is assigned to to team
|
---|
110 | N SCOK,SC200,SCTMND,SCFLD,SCF
|
---|
111 | S SCOK=1
|
---|
112 | S SCTMND=$G(^SCTM(404.51,+$G(SCTM),0))
|
---|
113 | F SCFLD=3,6,7 IF '$P(SCTMND,U,SCFLD) D ;check required fields
|
---|
114 | .S SCOK=0
|
---|
115 | .S SCF=$$DDNAME^SCMCRU(404.51,(SCFLD*.01))
|
---|
116 | .D MESS(SCF_" (#"_(SCFLD*.01)_") of Team required. Enter via PCMM ","!?20")
|
---|
117 | G:'SCOK QTOKTM
|
---|
118 | S SCOK=$$ACTTM^SCMCTMU(SCTM,SCDT)
|
---|
119 | IF 'SCOK D G QTOKTM
|
---|
120 | .N SCX
|
---|
121 | .S SCX=$D(^SCTM(404.58,SCTM,"AIDT",SCTM))
|
---|
122 | .D:'SCX MESS(" Never activated - Edit via PCMM")
|
---|
123 | .D:SCX MESS(" Not active on "_SCDT)
|
---|
124 | IF SCOK<0 D G QTOKTM
|
---|
125 | .D MESS(" Error in setup")
|
---|
126 | IF $D(^TMP("SCMC",$J,"TMPRPT",SCTM,0)) D
|
---|
127 | .D MESS("Team Assignment Only","!?15")
|
---|
128 | .D:'SCNOPRPT MESS("Patients to be assigned to this team:","!?20")
|
---|
129 | .S DFN=0 F S DFN=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,0,DFN)) Q:'DFN D
|
---|
130 | ..D MESS($$DISPPT(DFN),"!?25")
|
---|
131 | ..S SCX=$$NMPCTM^SCAPMCU2(DFN,SCDT,1)
|
---|
132 | ..D:SCX&(+SCX=SCTM)&('SCNOPRPT) MESS("Already assigned","!?27")
|
---|
133 | ..D:SCX&(+SCX'=SCTM)&('SCNOPRPT) MESS("Previously assigned to "_$P(SCX,U,2),"!?27")
|
---|
134 | ..Q:SCX
|
---|
135 | ..D:$G(SCASSIGN) PCUPDTM(DFN)
|
---|
136 | .D:$G(SCASSIGN) MAILLST^SCMCTMM(SCTM,"SCTEAMAR",SCDT,"^TMP(""SCMC"",$J,""NEWTM"",SCTM)")
|
---|
137 | .F SCSUB="NEWTM","BADTM" K ^TMP("SCMC",$J,SCSUB,SCTM)
|
---|
138 | S SC200=0
|
---|
139 | F S SC200=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,SC200)) Q:'SC200 D
|
---|
140 | .N SCTMPLST,SCCNT,SCTP,SCX,DFN
|
---|
141 | .D MESS("Practitioner: "_$$DISP200(SC200),"!?15")
|
---|
142 | .IF '$D(^VA(200,SC200,0)) D
|
---|
143 | ..S SCOK=0
|
---|
144 | ..D MESS("Bad Practitioner Assignment"_$S(SCNOPRPT:"",1:" for the following patient(s):"),"!?15")
|
---|
145 | ..S DFN=0 F S DFN=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,SC200,DFN)) Q:'DFN D
|
---|
146 | ...D MESS($$DISPPT(DFN),"!?25")
|
---|
147 | .ELSE D
|
---|
148 | .S:'$$TPPR^SCAPMC(SC200,"SCDTS",,,"SCTMPLST($J)",.SCERR) SCOK=0
|
---|
149 | .S SCXTP=0 F SCCNT=0:1 S SCXTP=$O(SCTMPLST($J,"SCTP",SCTM,SCXTP)) Q:'SCXTP S SCTP=SCXTP D MESS("Position: "_$$DISPTP(SCTP),"!?17")
|
---|
150 | .;if no team-position assignments for pract
|
---|
151 | .IF 'SCCNT D
|
---|
152 | ..S SCOK=0
|
---|
153 | ..D MESS("is assigned to "_SCCNT_" positions on team","!?20")
|
---|
154 | ..D MESS("you need to assign him/her to a position on the team","!?20")
|
---|
155 | ..S ^TMP("SCMC",$J,"NO_TP",SCTM,SC200)=""
|
---|
156 | .;if exactly one practitioner assignment to team
|
---|
157 | .IF SCCNT=1 D
|
---|
158 | ..D:'SCNOPRPT MESS("Patients to be assigned to this position:","!?20")
|
---|
159 | ..S DFN=0 F S DFN=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,SC200,DFN)) Q:'DFN D
|
---|
160 | ...D MESS($$DISPPT(DFN),"!?25")
|
---|
161 | ...S SCX=$$NMPCTP^SCAPMCU2(DFN,SCDT,1)
|
---|
162 | ...D:SCX&(+SCX=SCTP)&('SCNOPRPT) MESS("Already assigned","!?27")
|
---|
163 | ...D:SCX&(+SCX'=SCTP)&('SCNOPRPT) MESS("Previously assigned to "_$P(SCX,U,2),"!?27")
|
---|
164 | ...Q:SCX
|
---|
165 | ...D:$G(SCASSIGN) PCUPD(DFN)
|
---|
166 | ..D:$G(SCASSIGN) MAILLST^SCMCTPM(SCTP,"SCHISTAR",SCDT,"^TMP(""SCMC"",$J,""NEWTP"",SCTP)","^TMP(""SCMC"",$J,""OLDTP"",SCTP)","^TMP(""SCMC"",$J,""BADTP"",SCTP)")
|
---|
167 | ..D:$G(SCASSIGN) MAILLST^SCMCTMM(SCTM,"SCTEAMAR",SCDT,"^TMP(""SCMC"",$J,""NEWTM"",SCTM)")
|
---|
168 | ..F SCSUB="NEWTP","OLDTP","BADTP" K ^TMP("SCMC",$J,SCSUB,SCTP)
|
---|
169 | ..K ^TMP("SCMC",$J,"NEWTM",SCTM)
|
---|
170 | .;if multiple positin assignments for team for pract
|
---|
171 | .IF SCCNT>1 D
|
---|
172 | ..S SCOK=0
|
---|
173 | ..D MESS("Practitioner is assigned to "_SCCNT_" positions on team","!?20")
|
---|
174 | ..D MESS("because there is more than one position for this team","!?20")
|
---|
175 | ..D MESS("and practitioner, there will be no patient assignments","!?20")
|
---|
176 | ..S SCTP=0 F S SCTP=$O(SCTMPLST($J,SCTM,SCTP)) Q:'SCTP S ^TMP("SCMC",$J,"MULT_TP",SCTM,SC200,SCTP)=""
|
---|
177 | .IF SCCNT=1 S ^TMP("SCMC",$J,"ONE_TP",SCTM,SC200,SCTP)=""
|
---|
178 | QTOKTM Q SCOK
|
---|
179 | ;
|
---|
180 | PCUPD(DFN) ;
|
---|
181 | N SCX,SCNOMAIL
|
---|
182 | S SCNOMAIL=1
|
---|
183 | ;This is NOT a stand-alone procedure
|
---|
184 | S SCX=$$ACPTTP^SCAPMC(DFN,SCTP,"SCHISTAR",SCDT,.SCERR,SCYESTM)
|
---|
185 | IF SCX D
|
---|
186 | .D MESS("File #404.43 ien = "_+SCX,"!?30")
|
---|
187 | .IF $P(SCX,U,2) D
|
---|
188 | ..D MESS(" New Entry")
|
---|
189 | ..S ^TMP("SCMC",$J,"NEWTP",SCTP,DFN)=""
|
---|
190 | ..IF $P(SCX,U,4) D
|
---|
191 | ...D MESS(" Team Assignment Made. IEN="_$P(SCX,U,3),"!?30")
|
---|
192 | ...S ^TMP("SCMC",$J,"NEWTM",SCTM,DFN)=""
|
---|
193 | .ELSE D
|
---|
194 | ..D MESS(" Already Assigned")
|
---|
195 | ..S ^TMP("SCMC",$J,"OLDTP",SCTP,DFN)=""
|
---|
196 | ELSE D
|
---|
197 | .D MESS(" - NOT saved")
|
---|
198 | .S ^TMP("SCMC",$J,"BADTP",+$G(SCTP),DFN)=""
|
---|
199 | .D:('$P(SCX,U,2))&('$P(SCX,U,4))&('$P(SCX,U,3)) MESS("No Patient Team Assignment","!?30")
|
---|
200 | Q
|
---|
201 | ;
|
---|
202 | PCUPDTM(DFN) ;
|
---|
203 | N SCX,SCNOMAIL
|
---|
204 | S SCNOMAIL=1
|
---|
205 | ;This is NOT a stand-alone procedure
|
---|
206 | S SCX=$$ACPTTM^SCAPMC(DFN,SCTM,"SCTEAMAR",SCDT,.SCERR)
|
---|
207 | IF SCX D
|
---|
208 | .D MESS("File #404.42 ien = "_+SCX,"!?30")
|
---|
209 | .IF $P(SCX,U,2) D
|
---|
210 | ..D MESS(" New Entry")
|
---|
211 | ..S ^TMP("SCMC",$J,"NEWTM",SCTM,DFN)=""
|
---|
212 | ELSE D
|
---|
213 | .D MESS(" - NOT saved")
|
---|
214 | .S ^TMP("SCMC",$J,"BADTM",+$G(SCTM),DFN)=""
|
---|
215 | Q
|
---|
216 | ;
|
---|
217 | OKCLEAN() ;
|
---|
218 | D MESS(">>> Cleaning up ^TMP(""SCMC"" global","!?5")
|
---|
219 | N SCOK
|
---|
220 | S SCOK=1
|
---|
221 | ;K ^TMP("SCMC",$J)
|
---|
222 | Q SCOK
|
---|
223 | ;
|
---|
224 | DISP200(SC200) ;
|
---|
225 | Q $P($G(^VA(200,SC200,0)),U,1)_" [#"_SC200_"]"
|
---|
226 | ;
|
---|
227 | DISPTP(SCTP) ;
|
---|
228 | Q $P($G(^SCTM(404.57,SCTP,0)),U,1)_" [#"_SCTP_"]"
|
---|
229 | ;
|
---|
230 | DISPTM(SCTM) ;
|
---|
231 | Q $P($G(^SCTM(404.51,SCTM,0)),U,1)_" [#"_SCTM_"]"
|
---|
232 | ;
|
---|
233 | DISPPT(DFN) ;
|
---|
234 | Q $S(SCNOPRPT:"",1:$E($P($G(^DPT(DFN,0)),U,1),1,21)_" [SSN#:"_$P($G(^DPT(DFN,0)),U,9)_"]")
|
---|
235 | ;
|
---|
236 | MESS(TEXT,FORMAT) ;
|
---|
237 | Q:$G(SCSTOP)!($G(TEXT)="")
|
---|
238 | S FORMAT=$G(FORMAT,"?5")
|
---|
239 | D OUT^SCMCRU(TEXT,FORMAT)
|
---|
240 | Q
|
---|
241 | ;
|
---|
242 | GETDEV() ;
|
---|
243 | N SCOK
|
---|
244 | S SCOK=0
|
---|
245 | S %ZIS="PMQ" D ^%ZIS G:POP QTGDV
|
---|
246 | S SCOK=1
|
---|
247 | QTGDV Q (SCOK)
|
---|
248 | ;
|
---|
249 | QUE(NAME,START) ;
|
---|
250 | ; Needed: ZTSAVE array
|
---|
251 | ; NAME = description
|
---|
252 | ; START = starting point of routine
|
---|
253 | S ZTDESC=NAME,ZTRTN=START
|
---|
254 | D ^%ZTLOAD W:$D(ZTSK) !,"TASK #",ZTSK
|
---|
255 | D HOME^%ZIS K IO("Q")
|
---|
256 | Q ZTSK
|
---|