| 1 | SDSCEDT ;ALB/JAM/RBS - ASCD Review and Edit SC value for encounters. ; 4/24/07 4:29pm
 | 
|---|
| 2 |  ;;5.3;Scheduling;**495**;Aug 13, 1993;Build 50
 | 
|---|
| 3 |  ;;MODIFIED FOR NATIONAL RELEASE from a Class III software product
 | 
|---|
| 4 |  ;;known as Service Connected Automated Monitoring (SCAM).
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  Q
 | 
|---|
| 7 | START ; Called by option "SDSC EDIT BY DATE - Edit encounters by date range"
 | 
|---|
| 8 |  N SCVST,SCOPT,SDSCEDIT S SDSCEDIT=1
 | 
|---|
| 9 |  D HOME^%ZIS
 | 
|---|
| 10 |  ;  Ask which records should be reviewed.
 | 
|---|
| 11 |  S SCOPT=$$SCSEL^SDSCUTL() I SCOPT="" G END
 | 
|---|
| 12 |  ; Select correct user type based on security key.
 | 
|---|
| 13 |  D TYPE^SDSCUTL
 | 
|---|
| 14 |  ; Get start and end date for encounter list.
 | 
|---|
| 15 |  D GETDATE^SDSCOMP I SDSCTDT="" G END
 | 
|---|
| 16 |  D DIV^SDSCUTL
 | 
|---|
| 17 |  D ^DIR
 | 
|---|
| 18 |  I $G(DTOUT)!($G(DUOUT)) G END
 | 
|---|
| 19 |  S SDSCDVSL=Y,SDSCDVLN=SCLN
 | 
|---|
| 20 |  K DIR,X,Y,SCLN
 | 
|---|
| 21 |  S SDSCDIV=$S(SDSCDVSL'[SDSCDVLN:","_SDSCDVSL,1:"")
 | 
|---|
| 22 |  ; Initialize quit flags.
 | 
|---|
| 23 |  S SDQFLG=0,SDFLG=0
 | 
|---|
| 24 |  I SDSCTAT'="" D OPT
 | 
|---|
| 25 |  I SDSCTAT="" D  S SDSCTAT=""
 | 
|---|
| 26 |  . S SDSCTAT="N" D OPT Q:SDQFLG=1
 | 
|---|
| 27 |  . S SDSCTAT="R" D OPT Q:SDQFLG=1
 | 
|---|
| 28 |  . Q
 | 
|---|
| 29 |  I SDFLG=0 D EN^DDIOL("No editable encounters found in the specified date range. ",,"!!?10") W *7
 | 
|---|
| 30 |  G END
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 | OPT ; Loop through requested encounter status for specified date range, display each encounter, and allow edit.
 | 
|---|
| 33 |  S SDOEDT=SDSCTDT F  S SDOEDT=$O(^SDSC(409.48,"C",SDSCTAT,SDOEDT)) Q:SDOEDT\1>SDEDT  Q:(SDOEDT="")!(SDQFLG=1)  D
 | 
|---|
| 34 |  . S SDOE=0 F  S SDOE=$O(^SDSC(409.48,"C",SDSCTAT,SDOEDT,SDOE)) Q:'SDOE!(SDQFLG=1)  D
 | 
|---|
| 35 |  .. ; Check review selection
 | 
|---|
| 36 |  .. S SDV0=$P($$GETOE^SDOE(SDOE),U,5) I SDV0="" Q
 | 
|---|
| 37 |  .. S SCVST=$$GET1^DIQ(9000010,SDV0_",",80001,"I")
 | 
|---|
| 38 |  .. I SCVST'=SCOPT,SCOPT'=2 Q
 | 
|---|
| 39 |  .. ; Initialize flag and do final editability checks on encounter.
 | 
|---|
| 40 |  .. S SDEFLG=0 D CHECK
 | 
|---|
| 41 |  .. ; If edit flag not set, quit. (Don't display error in this loop.)
 | 
|---|
| 42 |  .. I SDEFLG=0 Q
 | 
|---|
| 43 |  .. ; Check for sensitive patient
 | 
|---|
| 44 |  .. I $$SENS^SDSCUTL(SDPAT,0) Q
 | 
|---|
| 45 |  .. ; Display encounter.
 | 
|---|
| 46 |  .. D DISPLAY,DISPLAY1
 | 
|---|
| 47 |  .. ; IF quit flag set, quit.
 | 
|---|
| 48 |  .. I SDQFLG=1 Q
 | 
|---|
| 49 |  .. ;Check if data came from an ancillary package and okay to edit
 | 
|---|
| 50 |  .. I '$$ANCPKG^SDSCUTL(SDOE) S SDSCMSG="Cannot edit encounter." Q
 | 
|---|
| 51 |  .. ; Otherwise, edit encounter.
 | 
|---|
| 52 |  .. D EDIT
 | 
|---|
| 53 |  Q
 | 
|---|
| 54 | START1 ; Called by option "SDSC SINGLE EDIT - Edit single encounter"
 | 
|---|
| 55 |  N SDSCEDIT S SDSCEDIT=1
 | 
|---|
| 56 |  D HOME^%ZIS
 | 
|---|
| 57 |  D TYPE^SDSCUTL
 | 
|---|
| 58 |  ; Initialize quit flag.
 | 
|---|
| 59 |  S SDQFLG=0
 | 
|---|
| 60 |  F  D  Q:SDQFLG=1
 | 
|---|
| 61 |  . S DIC(0)="AEMNZ",DIC="^SDSC(409.48,"
 | 
|---|
| 62 |  . S DIC("A")="Select OUTPATIENT ENCOUNTER: "
 | 
|---|
| 63 |  . I SDSCCR]"" S DIC("S")=SDSCCR_",$P($G(^SCE(+Y,0)),""^"",6)="""""
 | 
|---|
| 64 |  . I SDSCCR="" S DIC("S")="I $P($G(^SCE(+Y,0)),""^"",6)="""""
 | 
|---|
| 65 |  . W !
 | 
|---|
| 66 |  . D ^DIC
 | 
|---|
| 67 |  . I +Y=-1!$D(DTOUT)!$D(DUOUT) S SDQFLG=1 Q
 | 
|---|
| 68 |  . S SDOE=+Y,SDOEDT=$P($G(^SDSC(409.48,SDOE,0)),U,7)
 | 
|---|
| 69 |  . ; Separate editing checks and display code for ListMan.
 | 
|---|
| 70 |  . ; Initialize flag and do final editability checks on encounter.
 | 
|---|
| 71 |  . S SDEFLG=0 D CHECK
 | 
|---|
| 72 |  . ; If edit flag not set, display error and quit.
 | 
|---|
| 73 |  . I SDEFLG=0 D EN^DDIOL("Cannot edit encounter# "_SDOE_". Missing data. ",,"!!?10") W *7 Q
 | 
|---|
| 74 |  . ; Check for sensitive patient
 | 
|---|
| 75 |  . I $$SENS^SDSCUTL(SDPAT,0) Q
 | 
|---|
| 76 |  . ; Display encounter.
 | 
|---|
| 77 |  . D DISPLAY,DISPLAY1
 | 
|---|
| 78 |  . ; If quit flag set, quit.
 | 
|---|
| 79 |  . I SDQFLG=1 Q
 | 
|---|
| 80 |  . I '$$ANCPKG^SDSCUTL(SDOE) D EN^DDIOL("Cannot edit encounter.") Q
 | 
|---|
| 81 |  . ; Otherwise, edit encounter.
 | 
|---|
| 82 |  . D EDIT
 | 
|---|
| 83 |  G END
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 | CHECK ; Final editing checks for specified encounter.
 | 
|---|
| 86 |  ; Check division, if doesn't match, quit.
 | 
|---|
| 87 |  I $G(SDSCDIV)'="",(","_SDSCDIV_",")'[(","_$P(^SDSC(409.48,SDOE,0),U,12)_",") Q
 | 
|---|
| 88 |  ; Get encounter data. If no encounter data, quit.
 | 
|---|
| 89 |  S SDOEDAT=$$GETOE^SDOE(SDOE)
 | 
|---|
| 90 |  I SDOEDAT="" S SDSCMSG=" no encounter zero node" Q
 | 
|---|
| 91 |  ; Get patient IEN.
 | 
|---|
| 92 |  S SDPAT=$P(SDOEDAT,U,2)
 | 
|---|
| 93 |  ; Get visit file entry. If no visit, quit.
 | 
|---|
| 94 |  S SDV0=$P(SDOEDAT,U,5) I SDV0="" S SDSCMSG=" encounter missing visit number" Q
 | 
|---|
| 95 |  I $G(^AUPNVSIT(SDV0,0))="" S SDSCMSG=" no visit zero node" Q
 | 
|---|
| 96 |  ; Get current service connection value from visit.
 | 
|---|
| 97 |  S SDOSC=$$GET1^DIQ(9000010,SDV0_",",80001,"I")
 | 
|---|
| 98 |  ; Get package and source info from visit file. If missing, quit.
 | 
|---|
| 99 |  S SDSCPKG=$$GET1^DIQ(9000010,SDV0_",",81202,"E") I SDSCPKG="" S SDSCPKG="SCHEDULING"
 | 
|---|
| 100 |  S SDSCSRC=$$GET1^DIQ(9000010,SDV0_",",81203,"E") I SDSCSRC="" S SDSCSRC="AUTOMATED SC DESIGNATION"
 | 
|---|
| 101 |  ; Data checks successful. Set flags to allow edit to continue
 | 
|---|
| 102 |  S SDEFLG=1,SDFLG=1
 | 
|---|
| 103 |  Q
 | 
|---|
| 104 | DISPLAY ; Compile display for the specified encounter into a TMP global.
 | 
|---|
| 105 |  ; Clear scratch global and reset line counter.
 | 
|---|
| 106 |  K ^TMP("SDSCLST",$J) S SDLN=0
 | 
|---|
| 107 |  S SDTMP="Encounter "_SDOE
 | 
|---|
| 108 |  I SDOSC=1 S SDTMP=SDTMP_" is marked as service connected and may not be."
 | 
|---|
| 109 |  E  S SDTMP=SDTMP_" is NOT marked as service connected."
 | 
|---|
| 110 |  D LINE(SDTMP)
 | 
|---|
| 111 |  D LINE(" ")
 | 
|---|
| 112 |  ; Display the date for the encounter.
 | 
|---|
| 113 |  D LINE("Date of Encounter:  "_$$FMTE^XLFDT(SDOEDT,"5MZ"))
 | 
|---|
| 114 |  ; Display the clinic for the encounter.
 | 
|---|
| 115 |  S SDCLIN=$P(SDOEDAT,U,4),SDTMP="Location:           "
 | 
|---|
| 116 |  I SDCLIN]"" S SDTMP=SDTMP_$P($G(^SC(SDCLIN,0)),U)
 | 
|---|
| 117 |  D LINE(SDTMP)
 | 
|---|
| 118 |  ; Display the primary provider for the visit.
 | 
|---|
| 119 |  S SDPRV=$P($G(^SDSC(409.48,SDOE,0)),U,8),SDTMP="Primary Provider:   "
 | 
|---|
| 120 |  I SDPRV]"" S SDTMP=SDTMP_$$UP^XLFSTR($$NAME^XUSER(SDPRV))
 | 
|---|
| 121 |  D LINE(SDTMP)
 | 
|---|
| 122 |  ; Display the patient name and last 4 SSN.
 | 
|---|
| 123 |  S SDTMP="Patient:            "
 | 
|---|
| 124 |  I SDPAT]"" D
 | 
|---|
| 125 |  . N DFN,VADM S DFN=SDPAT D DEM^VADPT
 | 
|---|
| 126 |  . S SDTMP=SDTMP_$E(VADM(1),1,25)_" ("_$E($P(VADM(2),U),6,9)_")"
 | 
|---|
| 127 |  . ; Add flag if patient is considered sensitive.
 | 
|---|
| 128 |  . I +$P($G(^DGSL(38.1,+SDPAT,0)),U,2) S SDTMP=SDTMP_"  *SENSITIVE*"
 | 
|---|
| 129 |  D LINE(SDTMP)
 | 
|---|
| 130 |  ; Compile patient insurance information.
 | 
|---|
| 131 |  D INS
 | 
|---|
| 132 |  ; Review VBA/ICD9 SC response
 | 
|---|
| 133 |  D VBAICD
 | 
|---|
| 134 |  ; Compile all POVs for this visit.
 | 
|---|
| 135 |  D GETPDX^SDOERPC(.SDPDX,SDOE),POV2S
 | 
|---|
| 136 |  ; Compile all disabilities for this patient.
 | 
|---|
| 137 |  D DIS2S
 | 
|---|
| 138 |  Q
 | 
|---|
| 139 | DISPLAY1 ; Display the specified encounter.
 | 
|---|
| 140 |  W @IOF
 | 
|---|
| 141 |  S L=0
 | 
|---|
| 142 |  F SDLN=1:1 Q:'$D(^TMP("SDSCLST",$J,SDLN,0))  D  Q:$G(SDQFLG)=1
 | 
|---|
| 143 |  . I L+3>IOSL D CONT^SDSCUTL S L=2 Q:$G(SDQFLG)=1
 | 
|---|
| 144 |  . W !,^TMP("SDSCLST",$J,SDLN,0)
 | 
|---|
| 145 |  . S L=L+1
 | 
|---|
| 146 |  . Q
 | 
|---|
| 147 |  W !
 | 
|---|
| 148 |  Q
 | 
|---|
| 149 | INS ; Compile patient means test and insurance information.
 | 
|---|
| 150 |  S SDCP=$$BIL^DGMTUB(SDPAT,SDOEDT)
 | 
|---|
| 151 |  D LINE(" ")
 | 
|---|
| 152 |  D LINE("Patient "_$S(SDCP=1:"is",1:"is not")_" copay eligible.")
 | 
|---|
| 153 |  S SDACT=+$$INSUR^IBBAPI(SDPAT,SDOEDT)
 | 
|---|
| 154 |  D LINE("Patient "_$S(SDACT=1:"is",1:"is not")_" insured.")
 | 
|---|
| 155 |  I 'SDACT Q
 | 
|---|
| 156 |  ; ICR#: 4419 (SUPPORTED) - look for Outpatient coverage
 | 
|---|
| 157 |  S SDCOV=$S($$INSUR^IBBAPI(SDPAT,SDOEDT,"O","",16)<1:0,1:1)
 | 
|---|
| 158 |  D LINE("Outpatient Coverage is "_$S(SDCOV:"",1:"not ")_"covered.")
 | 
|---|
| 159 |  Q
 | 
|---|
| 160 | POV2S ; Compile all POV entries for the specified visit.
 | 
|---|
| 161 |  D LINE(" "),LINE("      POVs/ICDs:")
 | 
|---|
| 162 |  S SDVPOV0=0 F  S SDVPOV0=$O(^AUPNVPOV("AD",SDV0,SDVPOV0)) Q:'SDVPOV0  D
 | 
|---|
| 163 |  . S SDPOV=$P($G(^AUPNVPOV(SDVPOV0,0)),U)
 | 
|---|
| 164 |  . ; Added display if diagnosis is marked service connected (CIDC) - ALA 9/27/05
 | 
|---|
| 165 |  . S SDPOVSC=$P($G(^AUPNVPOV(SDVPOV0,800)),U)
 | 
|---|
| 166 |  . S SCDX=$$ICDDX^ICDCODE(SDPOV,+SDOEDAT)
 | 
|---|
| 167 |  . S SDPSC=$S(SDPDX=$P(SCDX,U):"*P* ",1:"")_$S(SDPOVSC=1:"*SC* ",1:"")
 | 
|---|
| 168 |  . S SDTMP=$J(SDPSC,15)_$P(SCDX,U,2)_"          "
 | 
|---|
| 169 |  . S SDTMP=$E(SDTMP,1,23)_$P(SCDX,U,4)
 | 
|---|
| 170 |  . D LINE(SDTMP)
 | 
|---|
| 171 |  Q
 | 
|---|
| 172 | DIS2S ; Compile all rated disabilities for this patient.
 | 
|---|
| 173 |  ;DBIA4807 and DBIA1476
 | 
|---|
| 174 |  D LINE(" ")
 | 
|---|
| 175 |  D LINE("          Rated Disabilities:")
 | 
|---|
| 176 |  N SCRD,I,I1,I2
 | 
|---|
| 177 |  D RDIS^DGRPDB(SDPAT,.SCRD)
 | 
|---|
| 178 |  S I=0 F  S I=$O(SCRD(I)) Q:'I  D
 | 
|---|
| 179 |  . S I1=SCRD(I)
 | 
|---|
| 180 |  . S I2=$S($D(^DIC(31,+I1,0)):$P(^(0),U,3)_"    "_$P(^(0),"^",1)_" ("_+$P(I1,"^",2)_"%-"_$S($P(I1,"^",3):"SC",$P(I1,"^",3)']"":"not specified",1:"NSC")_")",1:"")
 | 
|---|
| 181 |  . D LINE("               "_I2)
 | 
|---|
| 182 |  Q
 | 
|---|
| 183 | VBAICD ;ASCD (VBA/ICD9) SC evaluation
 | 
|---|
| 184 |  N Y,VAL
 | 
|---|
| 185 |  D LINE("  ")
 | 
|---|
| 186 |  S Y=$$SC^SDSCAPI(SDPAT,,SDOE)
 | 
|---|
| 187 |  D LINE("ASCD Evaluation: "_$P(Y,"^",2))
 | 
|---|
| 188 |  Q
 | 
|---|
| 189 | LINE(LINE) ; Save a line of text into the scratch global.
 | 
|---|
| 190 |  S SDLN=SDLN+1,^TMP("SDSCLST",$J,SDLN,0)=LINE
 | 
|---|
| 191 |  Q
 | 
|---|
| 192 | EDIT ; Allow user to edit the specified encounter or send for review. (Roll and scroll)
 | 
|---|
| 193 |  K DIR,X,Y
 | 
|---|
| 194 |  S DIR(0)=SDOPT
 | 
|---|
| 195 |  S DIR("A")="DO YOU WANT TO CHANGE THE SERVICE CONNECTION FOR THIS ENCOUNTER? "
 | 
|---|
| 196 |  S DIR("?")=" "
 | 
|---|
| 197 |  S DIR("?",1)="Enter:"
 | 
|---|
| 198 |  S DIR("?",2)="    'YES'    to modify this encounter's Service Connected statuses."
 | 
|---|
| 199 |  S DIR("?",3)="    'NO'     to retain this encounter's Service Connected statuses."
 | 
|---|
| 200 |  S DIR("?",4)="    'SKIP'   to skip this encounter and review it later."
 | 
|---|
| 201 |  I SDOPT["REVIEW" S DIR("?",5)="    'REVIEW' to flag this encounter for clinical review."
 | 
|---|
| 202 |  D ^DIR
 | 
|---|
| 203 |  I $D(DTOUT)!$D(DUOUT) S SDQFLG=1 Q
 | 
|---|
| 204 |  S SDANS=Y K DIR,X,Y
 | 
|---|
| 205 | LEDT ;  ListMan Entry Point for Editing
 | 
|---|
| 206 |  ; If user selected 'SKIP', postpone action on this entry.
 | 
|---|
| 207 |  I $G(SDANS)="S" Q
 | 
|---|
| 208 |  ; Set 'REVIEW' flag if required.
 | 
|---|
| 209 |  S SDRFLG=$S(SDANS="R":1,1:0)
 | 
|---|
| 210 |  ; Lock record before editing
 | 
|---|
| 211 |  I '$$LOCK^SDSCUTL(SDOE) D  Q
 | 
|---|
| 212 |  . W !!,"*** Encounter ",SDOE," locked by another user. Try later. ***" H 2
 | 
|---|
| 213 |  ; If user answered 'YES' then send call PCE API.
 | 
|---|
| 214 |  I SDANS="Y" D
 | 
|---|
| 215 |  . N SDEDIT S SDEDIT=1
 | 
|---|
| 216 |  . S X=$$INTV^PXAPI("POV",SDSCPKG,SDSCSRC,SDV0) HANG 1
 | 
|---|
| 217 |  I '$D(^SDSC(409.48,SDOE)) D  G CTUP  ;Entry deleted because of review match
 | 
|---|
| 218 |  . W !!,"*** Encounter ",SDOE," Removed from ASCD File - True Match Found ***" H 2
 | 
|---|
| 219 |  S SDSCC=$$GET1^DIQ(9000010,SDV0_",",80001,"I")
 | 
|---|
| 220 |  I SDSCC="",$D(^SDSC(409.48,SDOE)) D  G CTUP ;Remove entry if no SC value
 | 
|---|
| 221 |  . N DA,DIK S DA=SDOE,DIK="^SDSC(409.48," D ^DIK
 | 
|---|
| 222 |  . W !!,"*** Encounter ",SDOE," Removed from ASCD File - No SC value found in Visit File ***" H 2
 | 
|---|
| 223 |  ; Store any changes the user made in the TRACK EDITS multiple.
 | 
|---|
| 224 |  D STEDT^SDSCUTL(SDOE,SDTYPE,SDRFLG,SDSCC)
 | 
|---|
| 225 | CTUP ; Update claims tracking file in IB.
 | 
|---|
| 226 |  D
 | 
|---|
| 227 |  . I '$D(^SDSC(409.48,SDOE)) N SCTUPD S SCTUPD=$$RNBU^IBRSUTL(SDOE,1) Q
 | 
|---|
| 228 |  . D CLM^SDSCCLM(SDOE)
 | 
|---|
| 229 |  D UNLOCK^SDSCUTL(SDOE)
 | 
|---|
| 230 |  Q
 | 
|---|
| 231 |  ;
 | 
|---|
| 232 | END ; Clear all variables before exiting.
 | 
|---|
| 233 |  K SDSCTDT,SDEDT,SDOEDT,SDOE,SDOEX,SDEC,SDPAT,SDPASS,SDICD,SDPOV,SDSCC
 | 
|---|
| 234 |  K SDCST,SDSCPKG,SDSCSRC,SDPOVSC,SDPSC,SCDX,SDSCDVSL,SDFILEOK,SDV0
 | 
|---|
| 235 |  K SDVPOV0,SDPD,SDIENS,DA,DIE,DIC,DLAYGO,DIERR,ERR,SDRFLG,SDQFLG,SDTYPE
 | 
|---|
| 236 |  K SDOPT,SDSCTAT,SDSCDIV,SDSCDVLN,SDSCMSG,SDPRV,SDCLIN,SDLIST,P,L,SDABRT
 | 
|---|
| 237 |  K X,X1,X2,Y,DTOUT,DUOUT,DIR,SDACT,SDCOV,SDSCCR,SDOEDAT,SDEFLG,SDOSC,SDCP
 | 
|---|
| 238 |  K SDFLG,SDLN,SDTMP,SDANS,SDSCBDT,SDSCEDT,SDCNT,SDDATA,SDPDX
 | 
|---|
| 239 |  D KVA^VADPT
 | 
|---|
| 240 |  Q
 | 
|---|