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