1 | TMGSRVP ; SLC/JER - RPCs for CREATE & UPDATE ;11/01/03
|
---|
2 | ;;1.0;TEXT INTEGRATION UTILITIES;**1,7,19,28,47,89,104,100,115,109,167,113,112,175**;Jun 20, 1997
|
---|
3 | ;
|
---|
4 | ;"Note: Code copied from TIUSRVP for local modifications.
|
---|
5 |
|
---|
6 | MAKE(SUCCESS,DFN,TITLE,VDT,VLOC,VSIT,TIUX,VSTR,SUPPRESS,NOASF) ;" New Document
|
---|
7 | ;" SUCCESS = (by ref) TIU DOCUMENT # (PTR to 8925)
|
---|
8 | ;" = 0^Explanatory message if no SUCCESS
|
---|
9 | ;" DFN = Patient (#2)
|
---|
10 | ;" TITLE = TIU Document Definition (#8925.1)
|
---|
11 | ;" [VDT] = Date(/Time) of Visit
|
---|
12 | ;" [VLOC] = Visit Location (HOSPITAL LOCATION)
|
---|
13 | ;" [VSIT] = Visit file ien (#9000010)
|
---|
14 | ;" [VSTR] = Visit string (i.e., VLOC;VDT;VTYPE)
|
---|
15 | ;" [NOASF] = if 1=Do Not Set ASAVE cross-reference
|
---|
16 | ;" TIUX = (by ref) array containing field data and document body
|
---|
17 | ;
|
---|
18 | N TIU,TIUDA,LDT,NEWREC
|
---|
19 | S SUCCESS=0
|
---|
20 | I +$G(VSIT) S VSTR=$$VSTRBLD(+VSIT)
|
---|
21 | I $L($G(VSTR)) D
|
---|
22 | . S VDT=$S(+$G(VDT):+$G(VDT),1:$P(VSTR,";",2))
|
---|
23 | . S LDT=$S(+$G(VDT):$$FMADD^XLFDT(VDT,"","",1),1:"")
|
---|
24 | . S VLOC=$S(+$G(VLOC):+$G(VLOC),1:$P(VSTR,";"))
|
---|
25 | . ; If note is for Ward Location, call MAIN^TIUMOVE
|
---|
26 | . I $P($G(^SC(+VLOC,0)),U,3)="W" D Q
|
---|
27 | . . DO MAIN^TIUMOVE(.TIU,DFN,"",VDT,LDT,1,"LAST",0,+VLOC)
|
---|
28 | . ;" Otherwise, call PATVADPT^TIULV
|
---|
29 | . D PATVADPT^TIULV(.TIU,DFN,"",VSTR)
|
---|
30 | I '+$G(VSIT),'$L($G(VSTR)),+$G(VDT),+$G(VLOC) D
|
---|
31 | . S VDT=$G(VDT),LDT=$S(+$G(VDT):$$FMADD^XLFDT(VDT,"","",1),1:"")
|
---|
32 | . ;" If note is for Ward Location, call MAIN^TIUMOVE
|
---|
33 | . I $P($G(^SC(+VLOC,0)),U,3)="W" D Q
|
---|
34 | . . DO MAIN^TIUMOVE(.TIU,DFN,"",VDT,LDT,1,"LAST",0,+VLOC)
|
---|
35 | . ;" Otherwise, call MAIN^TIUVSIT
|
---|
36 | . D MAIN^TIUVSIT(.TIU,DFN,"",VDT,LDT,"LAST",0,VLOC)
|
---|
37 | I '+$G(TIU("VSTR")) D
|
---|
38 | . D EVENT^TIUSRVP1(.TIU,DFN)
|
---|
39 | S TIU("INST")=$$DIVISION^TIULC1(+TIU("LOC"))
|
---|
40 | I $S($D(TIU)'>9:1,+$G(DFN)'>0:1,1:0) S SUCCESS="0^"_$$EZBLD^DIALOG(89250001) Q
|
---|
41 | ;
|
---|
42 | S TIUDA=$$GETREC(DFN,.TIU,TITLE,.NEWREC)
|
---|
43 | I +TIUDA'>0 S SUCCESS="0^"_$$EZBLD^DIALOG(89250002) Q
|
---|
44 | S SUCCESS=+TIUDA
|
---|
45 | ;
|
---|
46 | D STUFREC^TIUSRVP1(+TIUDA,.TIUX,DFN,,TITLE,.TIU)
|
---|
47 | S:'+$G(NOASF) ^TIU(8925,"ASAVE",DUZ,TIUDA)=""
|
---|
48 | K ^TIU(8925,+TIUDA,"TEMP")
|
---|
49 | M ^TIU(8925,+TIUDA,"TEMP")=TIUX("TEXT") K TIUX("TEXT")
|
---|
50 | D SETXT0(TIUDA)
|
---|
51 | D FILE(.SUCCESS,+TIUDA,.TIUX,+$G(SUPPRESS))
|
---|
52 | I +SUCCESS'>0 D DIK^TIURB2(TIUDA) Q
|
---|
53 | I +$O(^TIU(8925,+TIUDA,"TEMP",0)) D MERGTEXT^TIUEDI1(+TIUDA,.TIU)
|
---|
54 | I +$G(TIU("STOP")) D DEFER^TIUVSIT(TIUDA,TIU("STOP")) I 1
|
---|
55 | E D QUE^TIUPXAP1
|
---|
56 | I '+$G(SUPPRESS) D
|
---|
57 | . D RELEASE^TIUT(TIUDA,1)
|
---|
58 | . D UPDTIRT^TIUDIRT(.TIU,TIUDA)
|
---|
59 | K ^TIU(8925,+TIUDA,"TEMP")
|
---|
60 | Q
|
---|
61 | ;
|
---|
62 | VSTRBLD(VSIT) ;" Given Visit ien, build Visit-Descriptor String
|
---|
63 | N TIUY,VSIT0,VLOC,VDT,VSVCAT
|
---|
64 | S VSIT0=$G(^AUPNVSIT(+VSIT,0)),VDT=+$P(VSIT0,U),VLOC=+$P(VSIT0,U,22)
|
---|
65 | S VSVCAT=$P(VSIT0,U,7)
|
---|
66 | S TIUY=VLOC_";"_VDT_";"_VSVCAT
|
---|
67 | Q TIUY
|
---|
68 | ;
|
---|
69 | SETXT0(TIUDA) ;" Set root node of "TEMP" WP-field
|
---|
70 | N TIUC,TIUI S (TIUC,TIUI)=0
|
---|
71 | F S TIUI=$O(^TIU(8925,TIUDA,"TEMP",TIUI)) Q:+TIUI'>0 D
|
---|
72 | . S:$D(^TIU(8925,TIUDA,"TEMP",TIUI,0)) TIUC=TIUC+1
|
---|
73 | S ^TIU(8925,TIUDA,"TEMP",0)="^^"_TIUC_U_TIUC_U_DT_"^^"
|
---|
74 | Q
|
---|
75 | ;
|
---|
76 | MAKEADD(TIUDADD,TIUDA,TIUX,SUPPRESS) ;" Create addendum
|
---|
77 | ;"Input: TIUADD -- OUT Parameter, for results
|
---|
78 | ;" TIUDA -- IEN of the parent document in file 8925
|
---|
79 | ;" TIUX -- Local input array containing the data to be filed for the
|
---|
80 | ;" addendum record, formatted as below. It should look something like this:
|
---|
81 | ;" TIUX(.02)=45678
|
---|
82 | ;" TIUX(1301)=2960703.104556
|
---|
83 | ;" TIUX(1302)=293764
|
---|
84 | ;" TIUX("TEXT",1,0)="The patient is a 70 year old WHITE MALE, who presented to the ONCOLOGY CLINIC"
|
---|
85 | ;" TIUX("TEXT",2,0)="On JULY 3, 1996@10:00 AM, with the chief complaint of NECK PAIN..."
|
---|
86 | ;" SUPPRESS
|
---|
87 | ;"Output: TIUADD returns IEN of created record, or error msg--
|
---|
88 | ;" -1^Could not create addendum.
|
---|
89 | ;" 0^<some message>
|
---|
90 | ;
|
---|
91 | N DIE,DR,DA,DIC,X,Y,DLAYGO,TIUATYP,TIUCAN,TIUFPRIV,TIU
|
---|
92 | S TIUFPRIV=1
|
---|
93 | S TIUCAN=$$CANDO^TIULP(TIUDA,"MAKE ADDENDUM")
|
---|
94 | I TIUCAN'>0 DO Q
|
---|
95 | . S TIUDADD="0^You may not MAKE AN ADDENDUM for this "
|
---|
96 | . S TIUDADD=TIUDADD_$$STATUS^TIULC(TIUDA)_" "
|
---|
97 | . S TIUDADD=TIUDADD_$$PNAME^TIULC1(+$G(^TIU(8925,+TIUDA,0)))
|
---|
98 | S TIUATYP=+$$WHATITLE^TIUPUTU("ADDENDUM")
|
---|
99 | S (DIC,DLAYGO)=8925,DIC(0)="L",X=""""_"`"_TIUATYP_""""
|
---|
100 | D ^DIC
|
---|
101 | S TIUDADD=+Y
|
---|
102 | I +Y'>0 S TIUDADD=TIUDADD_"^Could not create addendum." Q
|
---|
103 | D GETTIU^TIULD(.TIU,TIUDA)
|
---|
104 | S TIU("DOCTYP")=TIUATYP_U_$$PNAME^TIULC1(TIUATYP)
|
---|
105 | D STUFREC^TIUSRVP1(+TIUDADD,.TIUX,DFN,+$G(TIUDA),TIUATYP,.TIU)
|
---|
106 | K ^TIU(8925,+TIUDADD,"TEMP")
|
---|
107 | M ^TIU(8925,+TIUDADD,"TEMP")=TIUX("TEXT") K TIUX("TEXT")
|
---|
108 | D SETXT0(+TIUDADD)
|
---|
109 | D FILE(.SUCCESS,+TIUDADD,.TIUX,+$G(SUPPRESS))
|
---|
110 | I +SUCCESS'>0 D DIK^TIURB2(TIUDADD) Q
|
---|
111 | I +$O(^TIU(8925,+TIUDADD,"TEMP",0)) D MERGTEXT^TIUEDI1(+TIUDADD,.TIU)
|
---|
112 | I '+$G(SUPPRESS) D RELEASE^TIUT(+TIUDADD,1)
|
---|
113 | K ^TIU(8925,+TIUDADD,"TEMP")
|
---|
114 | Q
|
---|
115 | ;
|
---|
116 | UPDATE(SUCCESS,TIUDA,TIUX,SUPPRESS) ; Update existing Document
|
---|
117 | N TIU,TIUI,TIUC,TIUD0,TIUD12,TIUD15,TIUCPF,TITLE
|
---|
118 | I $S(+$G(TIUDA)'>0:1,'$D(^TIU(8925,+TIUDA,0)):1,1:0) D Q
|
---|
119 | . S SUCCESS="0^ Cannot update a non-existent document..."
|
---|
120 | I +$P($G(^TIU(8925,+TIUDA,0)),U,5)>6 D Q
|
---|
121 | . S SUCCESS="0^ TIU Document #"_TIUDA_" is already signed..."
|
---|
122 | I $D(TIUX("TEXT")) D
|
---|
123 | . K ^TIU(8925,+TIUDA,"TEMP")
|
---|
124 | . M ^TIU(8925,+TIUDA,"TEMP")=TIUX("TEXT")
|
---|
125 | . S (TIUC,TIUI)=0
|
---|
126 | . F S TIUI=$O(^TIU(8925,+TIUDA,"TEMP",TIUI)) Q:+TIUI'>0 D
|
---|
127 | . . S TIUC=TIUC+1
|
---|
128 | . I +TIUC>0 S ^TIU(8925,+TIUDA,"TEMP",0)="^^"_TIUC_U_TIUC_U_DT_"^^"
|
---|
129 | . K TIUX("TEXT")
|
---|
130 | I +$O(TIUX(""))'>0 S:+$G(SUPPRESS) SUCCESS=+TIUDA Q
|
---|
131 | S TIUD0=$G(^TIU(8925,TIUDA,0)),TIUD12=$G(^(12)),TITLE=+TIUD0
|
---|
132 | ;Set a flag to indicate whether or not a Title is a member of the
|
---|
133 | ;Clinical Procedures Class (1=Yes and 0=No)
|
---|
134 | S TIUCPF=+$$ISA^TIULX(TITLE,+$$CLASS^TIUCP)
|
---|
135 | D SETCOS(TIUDA,.TIUX,TIUD0,TIUD12)
|
---|
136 | ; Title changed? Refile DC
|
---|
137 | I +$G(TIUX(.01))>0,(+$G(TIUX(.01))'=+TIUD0) D
|
---|
138 | . S TIUX(.04)=$$DOCCLASS^TIULC1(+$G(TIUX(.01)))
|
---|
139 | D FILE(.SUCCESS,+TIUDA,.TIUX,+$G(SUPPRESS),TIUCPF)
|
---|
140 | I +SUCCESS'>0 K ^TIU(8925,+TIUDA,"TEMP") Q
|
---|
141 | D GETTIU^TIULD(.TIU,TIUDA)
|
---|
142 | I $D(^TIU(8925,+TIUDA,"TEMP")) D
|
---|
143 | . K ^TIU(8925,+TIUDA,"TEXT")
|
---|
144 | . D MERGTEXT^TIUEDI1(+TIUDA,.TIU)
|
---|
145 | . K ^TIU(8925,+TIUDA,"TEMP")
|
---|
146 | . S:'+$G(SUCCESS) SUCCESS=+TIUDA
|
---|
147 | ; If signed, re-file /ES/
|
---|
148 | S TIUD15=$G(^TIU(8925,+TIUDA,15))
|
---|
149 | I +TIUD15 D
|
---|
150 | . N TIUBY,DR,DIE,DA,X,Y S TIUBY=$P(TIUD15,U,2) Q:+TIUBY'>0
|
---|
151 | . S DR="1503///^S X=$$SIGNAME^TIULS("_TIUBY_");1504///^S X=$$SIGTITL^TIULS("_TIUBY_")"
|
---|
152 | . S DA=TIUDA,DIE=8925 D ^DIE
|
---|
153 | ; send alerts
|
---|
154 | I '+$G(SUPPRESS) D
|
---|
155 | . I +$P(TIUD0,U,5)<5,'$D(TIUX(.05)) D UPDSTAT(TIUDA,+$G(TIUD0))
|
---|
156 | . D SEND^TIUALRT(TIUDA),SENDID^TIUALRT1(TIUDA):+$G(^TIU(8925,+TIUDA,21))
|
---|
157 | . D UPDTIRT^TIUDIRT(.TIU,TIUDA)
|
---|
158 | Q
|
---|
159 | ;
|
---|
160 | SETCOS(TIUDA,TIUX,TIUD0,TIUD12) ; set cosig req
|
---|
161 | N TIUDAD,TIUEXS,TIUNCS,TIUEXCS,TIURCS,TIUATT,TIUTTL,TIUDAD0
|
---|
162 | S TIUEXS=$S(+$G(TIUX(1202)):+$G(TIUX(1202)),1:$P(TIUD12,U,4))
|
---|
163 | S TIUNCS=$S(+$G(TIUX(1208)):+$G(TIUX(1208)),+$G(TIUX(1209)):+$G(TIUX(1209)),1:0)
|
---|
164 | I TIUNCS S TIUX(1506)=$S(TIUNCS=TIUEXS:0,1:1) G SETCOSX
|
---|
165 | S TIUEXCS=$P(TIUD12,U,8),TIUATT=$P(TIUD12,U,9)
|
---|
166 | S TIUDAD=+$P(TIUD0,U,6),TIUDAD0=$G(^TIU(8925,+TIUDAD,0))
|
---|
167 | I +$$ISDS^TIULX($S(+TIUDAD:+TIUDAD0,1:+TIUD0)) D G SETCOSX
|
---|
168 | . S TIUX(1506)=$S(TIUEXS=TIUEXCS:0,1:1)
|
---|
169 | S TIUTTL=$S(+$G(TIUX(.01)):+$G(TIUX(.01)),1:+TIUD0)
|
---|
170 | S TIUX(1506)=+$$REQCOSIG^TIULP(TIUTTL,TIUDA,TIUEXS)
|
---|
171 | SETCOSX S:'TIUX(1506) TIUX(1208)="@"
|
---|
172 | Q
|
---|
173 | ;
|
---|
174 | UPDSTAT(DA,TITLE) ; Update status on commit
|
---|
175 | N DR,DIE S DR=".05////"_$$STATUS^TIUSRVP1(DA,0,TITLE)
|
---|
176 | I '+$P($G(^TIU(8925,DA,13)),U,4) S DR=DR_";1304////^S X=$$NOW^XLFDT"
|
---|
177 | S DIE=8925
|
---|
178 | D ^DIE
|
---|
179 | Q
|
---|
180 | ;
|
---|
181 | GETREC(DFN,TIU,TITLE,TIUNEW) ; Get/create document record
|
---|
182 | N DA,DIC,DIE,DLAYGO,DR,X,Y,TIUDPRM,TIUFPRIV,TIUHIT,TIUSCAT
|
---|
183 | S (TIUHIT,DA)=0,TIUFPRIV=1
|
---|
184 | S (DIC,DLAYGO)=8925,DIC(0)="FL"
|
---|
185 | S X=""""_"`"_+TITLE_"""" D ^DIC K DIC("S")
|
---|
186 | I +Y'>0 Q Y_U_" Insufficient data to create a new record."
|
---|
187 | S DA=+Y,TIUNEW=+$P(Y,U,3)
|
---|
188 | N DIE,DR,TIUVISIT S DIE=8925
|
---|
189 | S TIUVISIT=$S(+$G(TIU("VISIT")):+$G(TIU("VISIT")),1:"")
|
---|
190 | S TIUSCAT=$S(+$L($P($G(TIU("CAT")),U)):$P($G(TIU("CAT")),U),+$L($P($G(TIU("VSTR")),";",3)):$P($G(TIU("VSTR")),";",3),1:"")
|
---|
191 | S DR=".04////"_$$DOCCLASS^TIULC1(+$P(Y,U,2))_";.13////"_TIUSCAT_";1205////"_$P($G(TIU("LOC")),U)_";1211////"_$P($G(TIU("VLOC")),U)_";1212////"_$P($G(TIU("INST")),U)
|
---|
192 | D ^DIE
|
---|
193 | Q +$G(DA)
|
---|
194 | ;
|
---|
195 | FILE(SUCCESS,TIUDA,TIUX,SUPPRESS,TIUCPF) ; Call FM Filer & commit
|
---|
196 | ;"Purpose:
|
---|
197 | ;"Input: SUCCESS -- Out paramater
|
---|
198 | ;" TIUDA -- IEN
|
---|
199 | ;" TIUX -- Array with text to file
|
---|
200 | ;" SUPPRESS -- if 1 then suppress addditional processing
|
---|
201 | ;" TIUCPF
|
---|
202 | N FDA,FDARR,IENS,FLAGS,TIUMSG,TIUCMMTX
|
---|
203 | S IENS=""""_TIUDA_",""",FDARR="FDA(8925,"_IENS_")",FLAGS=""
|
---|
204 | I +$G(TIUX(1202)) S TIUX(1204)=+$G(TIUX(1202))
|
---|
205 | I +$G(TIUX(1209)) S TIUX(1208)=+$G(TIUX(1209))
|
---|
206 | ;"If the document is a member of the Clinical Procedures Class, set the
|
---|
207 | ;"Entered By field to the Author/Dictator field
|
---|
208 | I $G(TIUCPF),+$G(TIUX(1202)) S TIUX(1302)=+$G(TIUX(1202))
|
---|
209 | M @FDARR=TIUX
|
---|
210 | D FILE^DIE(FLAGS,"FDA","TIUMSG") ; File record
|
---|
211 | I $D(TIUMSG)>9 S SUCCESS=0_U_$G(TIUMSG("DIERR",1,"TEXT",1)) Q
|
---|
212 | S SUCCESS=TIUDA
|
---|
213 | I '+$G(SUPPRESS) D
|
---|
214 | . N DA
|
---|
215 | . S DA=TIUDA
|
---|
216 | . S TIUCMMTX=$$COMMIT^TIULC1(+$G(^TIU(8925,+TIUDA,0)))
|
---|
217 | . I TIUCMMTX]"" X TIUCMMTX
|
---|
218 | . K ^TIU(8925,"ASAVE",DUZ,TIUDA)
|
---|
219 | Q
|
---|
220 | ;
|
---|
221 | SIGN(ERR,TIUDA,TIUX) ; API for /es/
|
---|
222 | N X,TIUACT,TIUSIGN,TIUD0,TIUD12,TIUSTAT,SIGNER,COSIGNER,VALID,XTRASGNR
|
---|
223 | N TIUES S ERR=0
|
---|
224 | S TIUD0=$G(^TIU(8925,+TIUDA,0)),TIUD12=$G(^TIU(8925,+TIUDA,12))
|
---|
225 | S SIGNER=$P(TIUD12,U,4),COSIGNER=$P(TIUD12,U,8)
|
---|
226 | I (DUZ'=SIGNER),(DUZ'=COSIGNER) S XTRASGNR=+$O(^TIU(8925.7,"AE",+TIUDA,+DUZ,0))
|
---|
227 | S TIUSTAT=+$P(TIUD0,U,5)
|
---|
228 | S TIUACT=$S(TIUSTAT'>5:"SIGNATURE",+$G(XTRASGNR):"SIGNATURE",1:"COSIGNATURE")
|
---|
229 | S TIUSIGN=$$CANDO^TIULP(TIUDA,TIUACT)
|
---|
230 | I +TIUSIGN'>0 S ERR="89250004^"_$P(TIUSIGN,U,2) Q
|
---|
231 | S VALID=$$VALIDATE($$DECRYP^XUSRB1(TIUX))
|
---|
232 | I +VALID'>0 S ERR="89250005^"_$$EZBLD^DIALOG(89250005) Q
|
---|
233 | S TIUES=1_U_$P($G(^VA(200,+DUZ,20)),U,2,3)
|
---|
234 | I '+$G(XTRASGNR) D ES^TIURS(TIUDA,TIUES)
|
---|
235 | I +$G(XTRASGNR) D ADDSIG^TIURS1(TIUDA,XTRASGNR)
|
---|
236 | I +$G(^TIU(8925,TIUDA,21)),(TIUACT="SIGNATURE") D AUDLINK^TIUGR1(TIUDA,"a",+$G(^(21)))
|
---|
237 | Q
|
---|
238 | ;
|
---|
239 | VALIDATE(X) ; Validate /es/-code
|
---|
240 | N TIUY S TIUY=0
|
---|
241 | D HASH^XUSHSHP I X]"",(X=$P($G(^VA(200,+DUZ,20)),U,4)) S TIUY=1
|
---|
242 | Q TIUY
|
---|
243 | ;
|
---|
244 | DELETE(ERR,TIUDA,TIURSN,OVRRIDE) ; delete document
|
---|
245 | N TIUDEL,TIUD0 S ERR=0
|
---|
246 | I '+$G(OVRRIDE) D Q:+$G(TIUDEL)'>0
|
---|
247 | . S TIUDEL=$$CANDO^TIULP(TIUDA,"DELETE RECORD")
|
---|
248 | . I TIUDEL'>0 S ERR="89250003^"_$$EZBLD^DIALOG(89250003)
|
---|
249 | S TIUD0=$G(^TIU(8925,+TIUDA,0))
|
---|
250 | I +$P(TIUD0,U,5)'<6 D Q
|
---|
251 | . S TIURSN=$G(TIURSN,"A")
|
---|
252 | . D DELTEXT^TIURB2(TIUDA,TIURSN)
|
---|
253 | D DIK^TIURB2(TIUDA)
|
---|
254 | D DELAUDIT^TIUEDI1(TIUDA)
|
---|
255 | Q
|
---|
256 | ;
|
---|
257 | LOCK(ERR,TIUDA) ; Bid for lock on a TIU Document record
|
---|
258 | L +^TIU(8925,+TIUDA):1 I S ERR=0
|
---|
259 | E S ERR="1^ Another session has this record locked."
|
---|
260 | Q
|
---|
261 | ;
|
---|
262 | UNLOCK(ERR,TIUDA) ; Decrement Lock on a TIU Document record
|
---|
263 | L -^TIU(8925,+TIUDA) S ERR=0
|
---|
264 | Q
|
---|