[613] | 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")
|
---|