1 | SCDXUAPI ;ALB/MLI - Utility API to add OOS clinic locations ; 10/8/96
|
---|
2 | ;;5.3;Scheduling;**63**;AUG 13, 1993
|
---|
3 | ;
|
---|
4 | ; This utility should be called only by the lab or radiology packages
|
---|
5 | ; or other applications designated as needing clinics which are
|
---|
6 | ; exempted from classification and check-out information. It will
|
---|
7 | ; create clinic locations which are editable only using this API.
|
---|
8 | ; These locations will be set up to not allow clinic patterns to be
|
---|
9 | ; built (no appointments may be made to the clinics).
|
---|
10 | ;
|
---|
11 | RAD(IEN,PKG) ; radiology call
|
---|
12 | ;
|
---|
13 | ; Description:
|
---|
14 | ; This call will accept the IEN of a location currently defined.
|
---|
15 | ; It will check to look for clinic patterns. If none exist, it
|
---|
16 | ; will update the location fields for an occasion of service
|
---|
17 | ; location. If there are clinic patterns set up, it will convert
|
---|
18 | ; the existing entry to non-count and create a new entry with the
|
---|
19 | ; appropriate fields defined. It will return the IEN of the entry
|
---|
20 | ; used (either the same as the incoming IEN or the IEN of the new
|
---|
21 | ; entry which had to be created).
|
---|
22 | ;
|
---|
23 | ; Input: IEN of existing entry in the Hospital Location file
|
---|
24 | ; PKG as either name, namespace, or IEN of package file
|
---|
25 | ; Output: same IEN or different one if new one had to be created
|
---|
26 | ; - OR- -1^code^description of error encountered
|
---|
27 | ;
|
---|
28 | N ERR,I,OK,SDERR,X,Y
|
---|
29 | S PKG=$$PKGIEN(PKG)
|
---|
30 | F I="IEN","PKG" S SDERR(I)=@I
|
---|
31 | S ERR=$$ERRCHK(.SDERR,1)
|
---|
32 | I ERR]"" G RADQ ; error encountered
|
---|
33 | S OK=$$CHK(IEN) ; patterns?
|
---|
34 | I OK D UPD(IEN,PKG)
|
---|
35 | I 'OK D
|
---|
36 | . D NONCOUNT(IEN)
|
---|
37 | . S IEN=$$NEW(IEN,PKG)
|
---|
38 | RADQ Q $S(ERR]"":ERR,1:IEN)
|
---|
39 | ;
|
---|
40 | ;
|
---|
41 | LOC(NAME,INST,STOP,PKG,IEN,INACT) ; add/edit location for ancillary app
|
---|
42 | ;
|
---|
43 | ; Description:
|
---|
44 | ; This call will accept the name, division, and stop code (DSS ID)
|
---|
45 | ; of the clinic location to be add/edited. If the IEN is passed in,
|
---|
46 | ; the entry with that IEN will be updated. Otherwise, a new entry will
|
---|
47 | ; be added. If the INACT variable is set to a date, it will INACTIVATE
|
---|
48 | ; the location (if it exists).
|
---|
49 | ;
|
---|
50 | ; Input: NAME of clinic to be created (optional)
|
---|
51 | ; INST as pointer to the institution file (optional)
|
---|
52 | ; STOP as number of stop code (not IEN) for
|
---|
53 | ; occasion of service range of codes (optional)
|
---|
54 | ; PKG as package file IEN, name, or namespace - required!
|
---|
55 | ; IEN as IEN of location if you want to update an already
|
---|
56 | ; existing location (optional. If not defined, NAME,
|
---|
57 | ; INST, STOP become required)
|
---|
58 | ; INACT as a date if you want to inactivate the location that
|
---|
59 | ; has the IEN you defined (optional)
|
---|
60 | ;
|
---|
61 | ; Output: IEN of location created/inactivated - OR -
|
---|
62 | ; -1^error message if problem encountered
|
---|
63 | N ERR,I,SCERR,X
|
---|
64 | S PKG=$$PKGIEN(PKG)
|
---|
65 | F I="NAME","INST","STOP","INACT","IEN","PKG" I $G(@I) S SCERR(I)=@I
|
---|
66 | S ERR=$$ERRCHK(.SCERR)
|
---|
67 | I ERR]"" G LOCQ
|
---|
68 | I $D(STOP) S STOP=$O(^DIC(40.7,"C",+STOP,0)) I 'STOP S Y=$$ERR(6) G LOCQ
|
---|
69 | I $G(IEN)]"" D
|
---|
70 | . N X
|
---|
71 | . S X=$G(^SC(IEN,"OOS"))
|
---|
72 | . I X,($P(X,"^",2)=PKG) D EDIT(IEN,$G(NAME),$G(INST),$G(STOP),PKG,$G(INACT)) Q
|
---|
73 | . S ERR=$$ERR(7)
|
---|
74 | E D
|
---|
75 | . F I="NAME","INST","STOP" I @I']"" S ERR=$$ERR(8) Q
|
---|
76 | . S IEN=$$ADD(NAME,PKG) I IEN'>0 S ERR=$$ERR(9) Q
|
---|
77 | . D EDIT(IEN,NAME,INST,STOP,PKG)
|
---|
78 | LOCQ Q $S(ERR]"":ERR,1:IEN)
|
---|
79 | ;
|
---|
80 | ;
|
---|
81 | ERRCHK(SC,RAD) ; check input variables for consistency
|
---|
82 | ;
|
---|
83 | ; if RAD defined, don't check division/institution
|
---|
84 | ;
|
---|
85 | N LOC,OK,X,Y
|
---|
86 | S Y=""
|
---|
87 | I $D(SC("IEN")) D I +Y<0 G ERRCHKQ
|
---|
88 | . N IEN
|
---|
89 | . S IEN=SC("IEN")
|
---|
90 | . S LOC=$G(^SC(+IEN,0))
|
---|
91 | . I LOC']"" S Y=$$ERR(1) Q ; invalid ptr
|
---|
92 | . I '$G(RAD),'$D(^DIC(4,+$G(SC("INST")),0)) D I Y]"" Q
|
---|
93 | . . I '$P(LOC,"^",4),'$P(LOC,"^",15) S Y=$$ERR(2) Q ; bad inst/div
|
---|
94 | . S X=$G(^SC(IEN,"I"))
|
---|
95 | . I +X,('$P(X,"^",2)!($P(X,"^",2)>DT)) S Y=$$ERR(3) Q ; inactive
|
---|
96 | . S X=$G(^SC(IEN,"OOS"))
|
---|
97 | . I +X,($P(X,"^",2)'=SC("PKG")) S Y=$$ERR(5) Q ; wrong pkg
|
---|
98 | I PKG'>0 S Y=$$ERR(4) G ERRCHKQ ; pkg invalid
|
---|
99 | I $D(SC("STOP")) D I Y]"" G ERRCHKQ
|
---|
100 | . N STOP
|
---|
101 | . S STOP=SC("STOP")
|
---|
102 | . S STOP=$O(^DIC(40.7,"C",+STOP,0))
|
---|
103 | . I 'STOP S Y=$$ERR(6) Q ; bad stop code
|
---|
104 | . I '$$EX^SDCOU2(+STOP) S Y=$$ERR(10) Q ; not oos stop
|
---|
105 | ERRCHKQ Q Y
|
---|
106 | ;
|
---|
107 | ;
|
---|
108 | NONCOUNT(IEN) ; convert location to non-count
|
---|
109 | ;
|
---|
110 | ; Input: IEN of location to convert
|
---|
111 | ; Output: none
|
---|
112 | ;
|
---|
113 | N DA,DIE,DR
|
---|
114 | S DIE="^SC(",DA=IEN,DR="2502////Y"
|
---|
115 | D ^DIE
|
---|
116 | Q
|
---|
117 | ;
|
---|
118 | ;
|
---|
119 | UPD(IEN,PKG) ; update existing entry
|
---|
120 | ;
|
---|
121 | ; Called from within routine only...not supported
|
---|
122 | ; Input: IEN as IEN of location to update
|
---|
123 | ; PKG as calling package
|
---|
124 | ;
|
---|
125 | N SC
|
---|
126 | D VAR(IEN,.SC)
|
---|
127 | D EDIT(IEN,SC("NAME"),SC("INST"),SC("STOP"),PKG)
|
---|
128 | Q
|
---|
129 | ;
|
---|
130 | ;
|
---|
131 | NEW(IEN,PKG) ; create new entry given parameters from existing entry
|
---|
132 | ;
|
---|
133 | ; Called from within routine only...not supported
|
---|
134 | ; Input: IEN as IEN of location to update
|
---|
135 | ; PKG as calling package
|
---|
136 | ;
|
---|
137 | N SC
|
---|
138 | D VAR(IEN,.SC)
|
---|
139 | S IEN=$$ADD(SC("NAME"),PKG)
|
---|
140 | D EDIT(IEN,SC("NAME"),SC("INST"),SC("STOP"),PKG)
|
---|
141 | Q IEN
|
---|
142 | ;
|
---|
143 | ;
|
---|
144 | VAR(IEN,SC) ; set up variables for ADD and EDIT calls based on existing entry
|
---|
145 | ;
|
---|
146 | ; Input: IEN as IEN of existing location
|
---|
147 | ; Output: SC("NAME") as name of location
|
---|
148 | ; SC("INST") as institution file ptr
|
---|
149 | ; SC("STOP") as IEN of clinic stop file
|
---|
150 | ;
|
---|
151 | N DIV,X
|
---|
152 | S X=$G(^SC(+$G(IEN),0))
|
---|
153 | S SC("NAME")=$P(X,"^",1)
|
---|
154 | S SC("STOP")=$P(X,"^",7)
|
---|
155 | I $P(X,"^",4) S SC("INST")=$P(X,"^",4) G VARQ
|
---|
156 | S DIV=$P(X,"^",15),SC("INST")=$P($G(^DG(40.8,+DIV,0)),"^",7)
|
---|
157 | VARQ Q
|
---|
158 | ;
|
---|
159 | ;
|
---|
160 | PKGIEN(PKG) ; get IEN of package file entry
|
---|
161 | ;
|
---|
162 | ; Input: PKG as IEN, name, or abbreviation of PKG
|
---|
163 | ; Output: IEN of package file
|
---|
164 | ;
|
---|
165 | N Y
|
---|
166 | S PKG=$G(PKG)
|
---|
167 | I PKG']"" S Y=-1 G PKGIENQ
|
---|
168 | I PKG S Y=PKG G PKGIENQ
|
---|
169 | S Y=$O(^DIC(9.4,"C",PKG,0)) I Y G PKGIENQ
|
---|
170 | S Y=$O(^DIC(9.4,"B",PKG,0)) I Y G PKGIENQ
|
---|
171 | S Y=-1
|
---|
172 | PKGIENQ Q Y
|
---|
173 | ;
|
---|
174 | ;
|
---|
175 | DIV(INST) ; return division associated with institution
|
---|
176 | Q $O(^DG(40.8,"AD",+INST,0))
|
---|
177 | ;
|
---|
178 | ;
|
---|
179 | CHK(IEN) ; check to see if patterns exist for IEN
|
---|
180 | ;
|
---|
181 | ; Input: IEN of hospital location file
|
---|
182 | ; Output: 1 if ok (no patterns exist); 0 otherwise
|
---|
183 | ;
|
---|
184 | N I,OK
|
---|
185 | S OK=1
|
---|
186 | I $G(^SC(IEN,"SL"))]"" S OK=0 G CHKQ
|
---|
187 | I $O(^SC(IEN,"ST",0)) S OK=0 G CHKQ
|
---|
188 | I $O(^SC(IEN,"T",0)) S OK=0 G CHKQ
|
---|
189 | F I=0:1:6 I $O(^SC(IEN,"T"_I,0)) S OK=0 Q
|
---|
190 | CHKQ Q OK
|
---|
191 | ;
|
---|
192 | ;
|
---|
193 | ADD(SCNAME,SCPKG) ; add new entry
|
---|
194 | ;
|
---|
195 | N DD,DIC,DINUM,DO,X,Y
|
---|
196 | S DIC="^SC(",X=SCNAME,DIC(0)="L"
|
---|
197 | S DIC("DR")="50.01////1;50.02////^S X=$$PKGIEN^SCDXUAPI(SCPKG);"
|
---|
198 | D FILE^DICN
|
---|
199 | Q +Y
|
---|
200 | ;
|
---|
201 | ;
|
---|
202 | EDIT(SCIEN,SCNAME,SCINST,SCSTOP,SCPKG,SCINACT) ; update fields
|
---|
203 | ;
|
---|
204 | N DA,DIE,DR,INST,X
|
---|
205 | S DIE="^SC(",DA=SCIEN,DR=""
|
---|
206 | I $G(SCNAME)]"" S DR=DR_".01///^S X=SCNAME;" ; name
|
---|
207 | S DR=DR_"2////C;" ; type = clinic
|
---|
208 | I $G(SCINST)]"" D
|
---|
209 | . S DR=DR_"3////^S X=SCINST;" ; inst ptr
|
---|
210 | . S DR=DR_"3.5////^S X=$$DIV^SCDXUAPI(SCINST);" ; division
|
---|
211 | I $G(SCSTOP)]"" S DR=DR_"8////^S X=SCSTOP;" ; stop code
|
---|
212 | S DR=DR_"2504////Y;" ; clinic meets here
|
---|
213 | S DR=DR_"9////0;" ; service=none
|
---|
214 | S DR=DR_"2502////N;" ; non-count=no
|
---|
215 | S DR=DR_"2502.5////0;" ; on fileroom list = no
|
---|
216 | S DR=DR_"26////1;" ; ask provider = yes
|
---|
217 | S DR=DR_"27////0;" ; ask diagnosis = no
|
---|
218 | S DR=DR_"2500////Y;" ; prohibit access=yes
|
---|
219 | S DR=DR_"50.01////1;" ; occasion of serv loc
|
---|
220 | S DR=DR_"50.02////^S X=$$PKGIEN^SCDXUAPI(SCPKG);" ; calling pkg
|
---|
221 | I $G(SCINACT) D
|
---|
222 | . S DR=DR_"2505////^S X=SCINACT;" ; inact date
|
---|
223 | . S DR=DR_"2506///@;" ; remove react date
|
---|
224 | D ^DIE
|
---|
225 | Q
|
---|
226 | ;
|
---|
227 | ;
|
---|
228 | ERR(NUMBER) ; return error message corresponding to the number passed in
|
---|
229 | ;
|
---|
230 | ; Input: NUMBER of error message to return
|
---|
231 | ; Output: -1^NUMBER^Error Message Text
|
---|
232 | ;
|
---|
233 | Q "-1^"_NUMBER_"^"_$P($T(ERRORS+NUMBER),";;",2)
|
---|
234 | ;
|
---|
235 | ;
|
---|
236 | ERRORS ; list of error messages
|
---|
237 | ;;Hospital Location IEN is Invalid
|
---|
238 | ;;Neither institution nor division defined properly for existing entry
|
---|
239 | ;;Location has an inactivation date
|
---|
240 | ;;Invalid PKG variable passed in
|
---|
241 | ;;IEN belongs to another package (PKG file entries don't match)
|
---|
242 | ;;Invalid stop code passed
|
---|
243 | ;;Invalid IEN passed to LOC call (package doesn't 'own' IEN)
|
---|
244 | ;;NAME, INST, and STOP not all defined before LOC call when IEN not set
|
---|
245 | ;;Unable to add entry to Hospital Location file
|
---|
246 | ;;Stop code not an occassion of service stop
|
---|
247 | ;
|
---|
248 | ;
|
---|
249 | SCREEN(PKG) ; screen to only allow OOS locations for specified package
|
---|
250 | Q "I +$G(^(""OOS"")),($P(^(""OOS""),""^"",2)="_$$PKGIEN(PKG)_")"
|
---|
251 | ;
|
---|
252 | EXEMPT() ; screen on clinic stop file to select only OOS stops
|
---|
253 | Q "I $$EX^SDCOU2(+Y)"
|
---|
254 | ;
|
---|
255 | PKGNM(SCPKG) ; Return Name of Package
|
---|
256 | ; Input: SCPKG - Pointer to Package File (9.4)
|
---|
257 | ; Returned: Name of Package or 'Bad or Missing Pointer'
|
---|
258 | ;
|
---|
259 | N SCOS
|
---|
260 | D:$G(SCPKG) GETS^DIQ(9.4,SCPKG,.01,"E","SCOS")
|
---|
261 | Q $S($D(SCOS(9.4,(+$G(SCPKG))_",",.01,"E")):SCOS(9.4,(+$G(SCPKG))_",",.01,"E"),1:"Bad or Missing Pointer")
|
---|