[613] | 1 | SD53103A ;ALB/MJK - Unique Visit ID Clean Up ; March 10,1997
|
---|
| 2 | ;;5.3;Scheduling;**103**;AUG 13, 1993
|
---|
| 3 | ;
|
---|
| 4 | Q
|
---|
| 5 | ;
|
---|
| 6 | ONE ; -- entry point to select a single -1 encounter and resync
|
---|
| 7 | N DIC,Y,SDOE,SDPKG,SDTALK,SDEXIT
|
---|
| 8 | IF '$$INIT^SD53103B() G ONEQ
|
---|
| 9 | S SDTALK=1,SDEXIT=0
|
---|
| 10 | D HDR^SD53103B("Single") W !
|
---|
| 11 | F D IF SDEXIT G ONEQ
|
---|
| 12 | . S DIC="^SCE(",DIC("S")="N SDOE0 S SDOE0=^(0) IF $$SCREEN^SD53103A(SDOE0)",DIC(0)="AEMQ" D ^DIC
|
---|
| 13 | . IF +Y<1 S SDEXIT=1 Q
|
---|
| 14 | . ; -- display record
|
---|
| 15 | . S SDOE=+Y D OE^SD53103B(SDOE)
|
---|
| 16 | . IF $$OK^SD53103B() D
|
---|
| 17 | . . N SDX
|
---|
| 18 | . . S SDX=$$MSG(SDOE,$$RESYNC(SDOE))
|
---|
| 19 | . . IF $P(SDX,U)["RE-LINKED" D
|
---|
| 20 | . . . W "Re-Linked successfully:"
|
---|
| 21 | . . . D OE^SD53103B(SDOE)
|
---|
| 22 | . . ELSE D
|
---|
| 23 | . . . W $C(7),"Error has occurred.",!,"Please make a note of the following: ",!?10,SDX,!
|
---|
| 24 | ONEQ Q
|
---|
| 25 | ;
|
---|
| 26 | SCAN ; -- entry point to scan encounter file for -1's to either
|
---|
| 27 | ; 'count only' or 'count and fix'
|
---|
| 28 | N SDBEG,SDEND,SDMODE,SDPKG,SDTALK
|
---|
| 29 | ;
|
---|
| 30 | ; -- init global locals
|
---|
| 31 | IF '$$INIT^SD53103B() G SCANQ
|
---|
| 32 | D HDR^SD53103B("Date Range")
|
---|
| 33 | ;
|
---|
| 34 | ; -- get date range
|
---|
| 35 | IF '$$RANGE^SD53103B(.SDBEG,.SDEND) G SCANQ
|
---|
| 36 | ;
|
---|
| 37 | ; -- ask which mode
|
---|
| 38 | S SDMODE=$$MODE^SD53103B() IF 'SDMODE G SCANQ
|
---|
| 39 | ;
|
---|
| 40 | ; -- ask if ok to continue
|
---|
| 41 | IF '$$OK^SD53103B() G SCANQ
|
---|
| 42 | ; -- queue process
|
---|
| 43 | D QUEUE
|
---|
| 44 | SCANQ Q
|
---|
| 45 | ;
|
---|
| 46 | QUEUE ; queue job
|
---|
| 47 | N I,ZTDESC,ZTIO,ZTRTN,ZTSAVE,ZTSK
|
---|
| 48 | W !
|
---|
| 49 | S ZTIO="",ZTDESC="Fix -1 Outpatient Encounters",ZTRTN="DQ^SD53103A"
|
---|
| 50 | F I="SDTALK","SDMODE","SDBEG","SDEND","SDPKG" S ZTSAVE(I)=""
|
---|
| 51 | D ^%ZTLOAD
|
---|
| 52 | I $G(ZTSK) W !!,"Task queued: #",ZTSK
|
---|
| 53 | Q
|
---|
| 54 | ;
|
---|
| 55 | ;
|
---|
| 56 | DQ ; -- dequeue point...collect results and generate message.
|
---|
| 57 | N SDOE,SDOE0,SDDT,SDCNT,SDRT
|
---|
| 58 | ; -- set up and scan records
|
---|
| 59 | S SDDT=SDBEG,SDCNT=0,SDRT=$NA(^TMP("SDVISIT FIX",$J)) K @SDRT
|
---|
| 60 | F S SDDT=$O(^SCE("B",SDDT)) Q:'SDDT!(SDDT>SDEND) D Q:$$S^%ZTLOAD
|
---|
| 61 | . S SDOE=""
|
---|
| 62 | . F S SDOE=$O(^SCE("B",SDDT,SDOE)) Q:'SDOE D
|
---|
| 63 | . . S SDOE0=$G(^SCE(SDOE,0)) Q:SDOE0=""
|
---|
| 64 | . . ; -- use only -1's
|
---|
| 65 | . . IF $$SCREEN(.SDOE0) D
|
---|
| 66 | . . . S SDCNT=SDCNT+1
|
---|
| 67 | . . . IF SDMODE=1 S @SDRT@(SDCNT)=$$MSG(SDOE,"COUNT ONLY")
|
---|
| 68 | . . . IF SDMODE=2 S @SDRT@(SDCNT)=$$MSG(SDOE,$$RESYNC(SDOE))
|
---|
| 69 | ;
|
---|
| 70 | D RESULTS^SD53103B(.SDMODE,.SDBEG,.SDEND,.SDRT,.SDCNT)
|
---|
| 71 | K @SDRT
|
---|
| 72 | Q
|
---|
| 73 | ;
|
---|
| 74 | SCREEN(SDOE0) ; -- process screen for -1's and null ID's
|
---|
| 75 | N SDOK
|
---|
| 76 | ; -- don't use if before 10/1/96
|
---|
| 77 | IF +SDOE0,+SDOE0<2961001 Q 0
|
---|
| 78 | ; -- use if -1 id
|
---|
| 79 | IF $P(SDOE0,U,20)=-1 Q 1
|
---|
| 80 | ; -- use if id null and (has a completion date OR action req status)
|
---|
| 81 | IF $P(SDOE0,U,20)="",$P(SDOE0,U,7)!($P(SDOE0,U,12)=14) Q 1
|
---|
| 82 | ; -- use if id nul and visit exists
|
---|
| 83 | IF $P(SDOE0,U,20)="",$P(SDOE0,U,5) Q 1
|
---|
| 84 | Q 0
|
---|
| 85 | ;
|
---|
| 86 | MSG(SDOE,STATUS) ; -- build display text
|
---|
| 87 | N SDOE0,SDMSG
|
---|
| 88 | S SDOE0=$G(^SCE(+$G(SDOE),0))
|
---|
| 89 | IF SDOE0="" S SDMSG="Bad encounter entry passed"_U_+$G(SDOE)_U G MSGQ
|
---|
| 90 | S SDMSG=$S(STATUS["ERROR":">> ",1:" ")_STATUS
|
---|
| 91 | S SDMSG=SDMSG_U_SDOE_U_$P(SDOE0,U,6)_U_$P(SDOE0,U,5)
|
---|
| 92 | S SDMSG=SDMSG_U_$P($G(^DPT(+$P(SDOE0,U,2),0),"Unknown Patient"),U)
|
---|
| 93 | S SDMSG=SDMSG_U_$$FMTE^XLFDT(+SDOE0)
|
---|
| 94 | S SDMSG=SDMSG_U_$P($G(^SC(+$P(SDOE0,U,4),0),"Unknown Clinic"),U)
|
---|
| 95 | MSGQ Q SDMSG
|
---|
| 96 | ;
|
---|
| 97 | RESYNC(SDOE) ; -- resync sd and pce data
|
---|
| 98 | N SDOE0,SDVST,SDOK,SDOEC,SDCNT
|
---|
| 99 | S SDOK=0
|
---|
| 100 | S SDOE0=$G(^SCE(SDOE,0))
|
---|
| 101 | IF SDOE0="" G RESYNCQ
|
---|
| 102 | ;
|
---|
| 103 | ; -- get visit
|
---|
| 104 | S SDVST=$$VSIT(SDOE)
|
---|
| 105 | IF 'SDVST G RESYNCQ
|
---|
| 106 | D DOT
|
---|
| 107 | ;
|
---|
| 108 | ; -- set oe visit field
|
---|
| 109 | D OESET(SDOE,SDVST)
|
---|
| 110 | ;
|
---|
| 111 | ; -- quit if child
|
---|
| 112 | IF $P(SDOE0,U,6) D G RESYNCQ
|
---|
| 113 | . S SDOK=1
|
---|
| 114 | ;
|
---|
| 115 | ; -- set oe visit field for children of parent
|
---|
| 116 | S SDOEC=0
|
---|
| 117 | F S SDOEC=$O(^SCE("APAR",SDOE,SDOEC)) Q:'SDOEC D OESET(SDOEC,SDVST)
|
---|
| 118 | ;
|
---|
| 119 | ; -- send data to pce for parent
|
---|
| 120 | S SDOK=$$DATA2PCE(SDOE)
|
---|
| 121 | ;
|
---|
| 122 | RESYNCQ Q $S(SDOK:"RE-LINKED",1:"ERROR OCCURRED")
|
---|
| 123 | ;
|
---|
| 124 | OESET(SDOE,SDVST) ; -- set oe visit field
|
---|
| 125 | N DA,DR,DIE
|
---|
| 126 | ;
|
---|
| 127 | ; -- if id = -1 reset id
|
---|
| 128 | IF $P($G(^AUPNVSIT(+SDVST,150)),U)=-1 D
|
---|
| 129 | . N ID
|
---|
| 130 | . S ID=$$GETVID^VSITVID()
|
---|
| 131 | . K ^AUPNVSIT("VID",-1,+SDVST)
|
---|
| 132 | . S $P(^AUPNVSIT(+SDVST,150),U)=ID
|
---|
| 133 | . S ^AUPNVSIT("VID",ID,+SDVST)=""
|
---|
| 134 | ;
|
---|
| 135 | S DIE="^SCE(",DR=".05////"_SDVST,DA=SDOE D ^DIE
|
---|
| 136 | D DOT
|
---|
| 137 | Q
|
---|
| 138 | ;
|
---|
| 139 | VSIT(SDOE) ; -- get/find visit
|
---|
| 140 | N SDOE0,SDVST,VSIT,DFN,DIE,DIC,DR,DA,X,VSITPKG,SDOEP
|
---|
| 141 | S SDVST=0
|
---|
| 142 | S SDOE0=$G(^SCE(+$G(SDOE),0))
|
---|
| 143 | IF SDOE0="" G VSITQ
|
---|
| 144 | ;
|
---|
| 145 | ; -- if entry already has visit, use it
|
---|
| 146 | IF $P(SDOE0,U,5) S SDVST=$P(SDOE0,U,5) G VSITQ
|
---|
| 147 | ;
|
---|
| 148 | ; -- if parent has pointer to visit, use it
|
---|
| 149 | S SDOEP=$P(SDOE0,U,6)
|
---|
| 150 | IF SDOEP D IF SDVST G VSITQ
|
---|
| 151 | . S SDVST=$P($G(^SCE(SDOEP,0)),U,5)
|
---|
| 152 | ;
|
---|
| 153 | ; -- call api to get visit entry
|
---|
| 154 | S VSIT(0)="ENMD1"
|
---|
| 155 | S VSIT=+SDOE0
|
---|
| 156 | S DFN=+$P(SDOE0,U,2)
|
---|
| 157 | S VSITPKG="SD"
|
---|
| 158 | S VSIT("CLN")=$P(SDOE0,U,3)
|
---|
| 159 | S VSIT("SVC")=$S($$INP^SDAM2(DFN,VSIT)="I":"I",1:"A")
|
---|
| 160 | S VSIT("INS")=$P($G(^DG(40.8,+$P(SDOE0,U,11),0)),U,7)
|
---|
| 161 | S VSIT("ELG")=$S($P(SDOE0,U,13):$P(SDOE0,U,13),1:+$G(^DPT(DFN,.36)))
|
---|
| 162 | IF $P(SDOE0,U,4) S VSIT("LOC")=$P(SDOE0,U,4)
|
---|
| 163 | IF $P(SDOE0,U,6) S X=$G(^SCE($P(SDOE0,U,6),0)) IF X]"" S VSIT=+X I $P(X,U,5) S VSIT("LNK")=$P(X,U,5)
|
---|
| 164 | IF '$P(SDOE0,U,6) D
|
---|
| 165 | . S VSIT("PRI")="P"
|
---|
| 166 | E D
|
---|
| 167 | . IF $P(SDOE0,U,8)=4 D
|
---|
| 168 | . . S VSIT("PRI")="C",VSIT("SVC")=$S($$INP^SDAM2(DFN,VSIT)="I":"D",1:"X")
|
---|
| 169 | . E D
|
---|
| 170 | . . S VSIT("PRI")="S"
|
---|
| 171 | ;
|
---|
| 172 | ; -- do checks
|
---|
| 173 | I 'VSIT,'DFN,'VSIT("ELG")!('VSIT("INS"))!('VSIT("CLN")) G VSITQ
|
---|
| 174 | ;
|
---|
| 175 | ; -- add/find visit
|
---|
| 176 | ;
|
---|
| 177 | ; -- change call if orinating process is a disposition.
|
---|
| 178 | I $P(SDOE0,U,8)=3 D
|
---|
| 179 | .; -- must be valid disposition clinic
|
---|
| 180 | . IF $O(^PX(815,1,"DHL","B",+$P(SDOE0,U,4),0)) D DISPVSIT^PXAPI Q
|
---|
| 181 | .; -- if interactive mode, ok to get visit
|
---|
| 182 | . IF SDTALK D
|
---|
| 183 | . . D DISPVSIT^PXAPI
|
---|
| 184 | . .; -- visit created and loc defined; re-set oe location field
|
---|
| 185 | . . IF +$G(VSIT("IEN"))>0,VSIT("LOC") D
|
---|
| 186 | . . . S $P(^SCE(SDOE,0),U,4)=VSIT("LOC")
|
---|
| 187 | . . .; -- re-set children oe location field
|
---|
| 188 | . . . N SDOEC S SDOEC=0
|
---|
| 189 | . . . F S SDOEC=$O(^SCE("APAR",SDOE,SDOEC)) Q:'SDOEC D
|
---|
| 190 | . . . . S $P(^SCE(SDOEC,0),U,4)=VSIT("LOC")
|
---|
| 191 | ;
|
---|
| 192 | IF $P(SDOE0,U,8)'=3 D
|
---|
| 193 | .; -- quit if parent is a disposition and bad location; parent will fix
|
---|
| 194 | . IF $P($G(^SCE(+$P(SDOE0,U,6),0)),U,8)=3,'$O(^PX(815,1,"DHL","B",+$P(SDOE0,U,4),0)) Q
|
---|
| 195 | . D ^VSIT
|
---|
| 196 | ;
|
---|
| 197 | IF +$G(VSIT("IEN"))>0 S SDVST=+VSIT("IEN")
|
---|
| 198 | VSITQ Q SDVST
|
---|
| 199 | ;
|
---|
| 200 | DATA2PCE(SDOE) ; -- send data to pce
|
---|
| 201 | N SDOE0,X,SDVST,SDPRV,SDIAG,SDCLS,SDPROC,SDPCE,SDOK,SDOEC
|
---|
| 202 | S SDOK=0
|
---|
| 203 | ;
|
---|
| 204 | ; -- gather needed data
|
---|
| 205 | S SDOE0=$G(^SCE(SDOE,0)) G DATAQ:SDOE0=""
|
---|
| 206 | S SDVST=$P(SDOE0,U,5) G DATAQ:'SDVST
|
---|
| 207 | ;
|
---|
| 208 | ; -- if visit has v-file data quit
|
---|
| 209 | IF $O(^AUPNVCPT("AD",SDVST,0))!($O(^AUPNVPRV("AD",SDVST,0)))!($O(^AUPNVPOV("AD",SDVST,0))) S SDOK=1 G DATAQ
|
---|
| 210 | ;
|
---|
| 211 | ; -- get data from parent
|
---|
| 212 | D SET(SDOE,"SDPRV",409.44),DOT
|
---|
| 213 | D SET(SDOE,"SDIAG",409.43),DOT
|
---|
| 214 | D SET(SDOE,"SDCLS",409.42),DOT
|
---|
| 215 | D PROC^SCDXUTL0(SDOE,"SDPROC"),DOT ; -- gets both parent & children data
|
---|
| 216 | ;
|
---|
| 217 | ; -- get data from children
|
---|
| 218 | S SDOEC=0
|
---|
| 219 | F S SDOEC=$O(^SCE("APAR",SDOE,SDOEC)) Q:'SDOEC D
|
---|
| 220 | . D SET(SDOEC,"SDPRV",409.44),DOT
|
---|
| 221 | . D SET(SDOEC,"SDIAG",409.43),DOT
|
---|
| 222 | . D SET(SDOEC,"SDCLS",409.42),DOT
|
---|
| 223 | ;
|
---|
| 224 | ; ---build pce data array
|
---|
| 225 | D BUILD("SDPRV","SDIAG","SDCLS","SDPROC","SDPCE")
|
---|
| 226 | ;
|
---|
| 227 | ; -- call pce api to file data
|
---|
| 228 | IF $$DATA2PCE^PXAPI("SDPCE",SDPKG,"SD TO PCE RESYNC",SDVST)=1 D
|
---|
| 229 | . S SDOK=1
|
---|
| 230 | DATAQ Q SDOK
|
---|
| 231 | ;
|
---|
| 232 | BUILD(SDPROV,SDDX,SDCLASS,SDCPT,SDATA) ; -- build pce data array
|
---|
| 233 | N X,SDI,SDIEN,SDCNT
|
---|
| 234 | S SDI=0 F S SDI=$O(@SDCLASS@(SDI)) Q:'SDI D
|
---|
| 235 | . S X=@SDCLASS@(SDI)
|
---|
| 236 | . S @SDATA@("ENCOUNTER",1,$P("AO^IR^SC^EC",U,+X))=$P(X,U,3)
|
---|
| 237 | ;
|
---|
| 238 | ; -- set provider info
|
---|
| 239 | IF $O(@SDPROV@(0)) D
|
---|
| 240 | . S (SDCNT,SDIEN)=0
|
---|
| 241 | . F S SDIEN=$O(@SDPROV@(SDIEN)) Q:'SDIEN D
|
---|
| 242 | . . S X=@SDPROV@(SDIEN)
|
---|
| 243 | . . S SDCNT=SDCNT+1
|
---|
| 244 | . . S @SDATA@("PROVIDER",SDCNT,"NAME")=+X
|
---|
| 245 | ;
|
---|
| 246 | ; -- set dx info
|
---|
| 247 | IF $O(@SDDX@(0)) D
|
---|
| 248 | . S (SDCNT,SDIEN)=0
|
---|
| 249 | . F S SDIEN=$O(@SDDX@(SDIEN)) Q:'SDIEN D
|
---|
| 250 | . . S X=@SDDX@(SDIEN)
|
---|
| 251 | . . S SDCNT=SDCNT+1
|
---|
| 252 | . . S @SDATA@("DX/PL",SDCNT,"DIAGNOSIS")=+X
|
---|
| 253 | . . S @SDATA@("DX/PL",SDCNT,"PRIMARY")=+$P(X,U,3)
|
---|
| 254 | ;
|
---|
| 255 | ; -- set cpt info
|
---|
| 256 | IF $O(@SDCPT@(0)) D
|
---|
| 257 | . ; -- count times performed
|
---|
| 258 | . N SDX
|
---|
| 259 | . S (SDCNT,SDIEN)=0
|
---|
| 260 | . F S SDIEN=$O(@SDCPT@(SDIEN)) Q:'SDIEN D
|
---|
| 261 | . . S X=@SDCPT@(SDIEN)
|
---|
| 262 | . . S SDX(+X)=$G(SDX(+X))+1
|
---|
| 263 | . ;
|
---|
| 264 | . ; -- build nodes
|
---|
| 265 | . S (SDCNT,SDIEN)=0
|
---|
| 266 | . F S SDIEN=$O(SDX(SDIEN)) Q:'SDIEN D
|
---|
| 267 | . . S X=SDX(SDIEN)
|
---|
| 268 | . . S SDCNT=SDCNT+1
|
---|
| 269 | . . S @SDATA@("PROCEDURE",SDCNT,"PROCEDURE")=SDIEN
|
---|
| 270 | . . S @SDATA@("PROCEDURE",SDCNT,"QTY")=+X
|
---|
| 271 | BUILDQ Q
|
---|
| 272 | ;
|
---|
| 273 | SET(SDOE,ARRAY,FILE) ;Set-up Array for Outpatient Encounter
|
---|
| 274 | ; Input -- SDOE Outpatient Encounter IEN
|
---|
| 275 | ; Output -- ARRAY Provider or dx Array Subscripted by a ien
|
---|
| 276 | ;
|
---|
| 277 | N SDIEN
|
---|
| 278 | S SDIEN=0
|
---|
| 279 | F S SDIEN=$O(^SDD(FILE,"OE",SDOE,SDIEN)) Q:'SDIEN D
|
---|
| 280 | . S X=$G(^SDD(FILE,SDIEN,0)) Q:X=""
|
---|
| 281 | . S @ARRAY@(SDIEN)=X
|
---|
| 282 | SETQ Q
|
---|
| 283 | ;
|
---|
| 284 | DOT ; -- write '.' if ok to talk
|
---|
| 285 | IF SDTALK D
|
---|
| 286 | . W "."
|
---|
| 287 | Q
|
---|
| 288 | ;
|
---|