| 1 | SDSCUTL ;ALB/JAM/RBS - ASCD Utility Program ; 4/24/07 4:26pm
 | 
|---|
| 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 |  ;
 | 
|---|
| 8 | TYPE ; Select proper user type based on security key.
 | 
|---|
| 9 |  ; called by routines:  SDSCEDT,SDSCLST,SDSCMSR,SDSCRP1,SDSCSSD
 | 
|---|
| 10 |  ;     sets variables:  SDTYPE,SDSCTAT,SDOPT,SDSCCR
 | 
|---|
| 11 |  ;                      (should be killed by calling routines)
 | 
|---|
| 12 |  I $G(SDTYPE)=""!($G(SDSCTAT)="")!($G(SDOPT)="") D
 | 
|---|
| 13 |  . I $D(^XUSEC("SDSC SUPER",DUZ)) D  Q
 | 
|---|
| 14 |  .. ; Supervisor can look at encounters with any status.
 | 
|---|
| 15 |  .. S SDTYPE="S",SDSCTAT="",SDOPT="SA^Y:YES;N:NO;S:SKIP;R:REVIEW"
 | 
|---|
| 16 |  .. S SDSCCR=""
 | 
|---|
| 17 |  .. Q
 | 
|---|
| 18 |  . I $D(^XUSEC("SDSC CLINICAL",DUZ)) D  Q
 | 
|---|
| 19 |  .. ; Clinician can only look at encounters with a status of REVIEW.
 | 
|---|
| 20 |  .. S SDTYPE="C",SDSCTAT="R",SDOPT="SA^Y:YES;N:NO;S:SKIP;R:REVIEW"
 | 
|---|
| 21 |  .. S SDSCCR="I $P(^(0),U,5)=SDSCTAT"
 | 
|---|
| 22 |  .. Q
 | 
|---|
| 23 |  . ; User (default) can only look at encounters with a status of NEW.
 | 
|---|
| 24 |  . S SDTYPE="U",SDSCTAT="N",SDOPT="SA^Y:YES;N:NO;S:SKIP;R:REVIEW"
 | 
|---|
| 25 |  . S SDSCCR="I $P(^(0),U,5)=SDSCTAT"
 | 
|---|
| 26 |  . Q
 | 
|---|
| 27 |  Q
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | NBFP(SDOE) ; Is first-party non-billable based on either clinic, stop code, or patient?
 | 
|---|
| 30 |  N SDOE0,SDPAT,SDOEDT
 | 
|---|
| 31 |  I $G(SDOE)="" Q 0
 | 
|---|
| 32 |  S SDOE0=$$GETOE^SDOE(SDOE),SDPAT=$P(SDOE0,U,2),SDOEDT=+SDOE0
 | 
|---|
| 33 |  I '+$$FIRST^IBRSUTL(SDOE) Q 1
 | 
|---|
| 34 |  Q 0
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 | NBTP(SDOE) ; Is third-party non-billable based on either clinic, stop code, or patient?
 | 
|---|
| 37 |  N SDOE0,SDPAT,SDOEDT,SDCOV
 | 
|---|
| 38 |  I $G(SDOE)="" Q 0
 | 
|---|
| 39 |  S SDOE0=$$GETOE^SDOE(SDOE),SDPAT=$P(SDOE0,U,2),SDOEDT=+SDOE0
 | 
|---|
| 40 |  I '+$$THIRD^IBRSUTL(SDOE) Q 1
 | 
|---|
| 41 |  ; ICR#: 4419 (SUPPORTED) - look for Outpatient coverage
 | 
|---|
| 42 |  S SDCOV=$S($$INSUR^IBBAPI(SDPAT,SDOEDT,"O","",16)<1:0,1:1)
 | 
|---|
| 43 |  I 'SDCOV Q 1
 | 
|---|
| 44 |  Q 0
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 | SENS(SDFN,SDFLG) ; Check for Sensitive Patient
 | 
|---|
| 47 |  ; Input
 | 
|---|
| 48 |  ;     SDFN  - Patient IEN
 | 
|---|
| 49 |  ;     SDFLG - '1' if called from ListMan edit
 | 
|---|
| 50 |  ;           - '0' if called from roll-and-scroll
 | 
|---|
| 51 |  ;  Returns
 | 
|---|
| 52 |  ;     '0' - OK to view (patient is not sensitive, user has key, or answered 'OK')
 | 
|---|
| 53 |  ;     '1' - not OK to view patient (patient is sensitive, user does not have key and answered 'NO')
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  N SDANS
 | 
|---|
| 56 |  S SDANS=0
 | 
|---|
| 57 |  I +$P($G(^DGSL(38.1,+SDFN,0)),U,2) D
 | 
|---|
| 58 |  . NEW DIC,Y,DFN,X,VADM
 | 
|---|
| 59 |  . S DFN=SDFN D DEM^VADPT
 | 
|---|
| 60 |  . I $G(SDFLG)=0 W !!,$E(VADM(1),1,25)_" ("_$E($P(VADM(2),U),6,9)_")",!!
 | 
|---|
| 61 |  . I $G(SDFLG)=1 D FULL^VALM1
 | 
|---|
| 62 |  . S DIC(0)="AE",Y=SDFN
 | 
|---|
| 63 |  . D ^DGSEC
 | 
|---|
| 64 |  . I Y<0 S SDANS=1
 | 
|---|
| 65 |  . I $D(^XUSEC("DG SENSITIVITY",DUZ)) D
 | 
|---|
| 66 |  .. ; If user holds key, prevent sensitive patient warning from scrolling off screen
 | 
|---|
| 67 |  .. N DIR W ! S DIR(0)="E" D ^DIR
 | 
|---|
| 68 |  .D KVA^VADPT
 | 
|---|
| 69 |  Q SDANS
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | DIV ;  Ask for Division
 | 
|---|
| 72 |  N SDN
 | 
|---|
| 73 |  S SDN=0
 | 
|---|
| 74 |  F  S SDN=$O(^DG(40.8,SDN)) Q:'SDN  D
 | 
|---|
| 75 |  . S DIR("A",SDN)=SDN_"  "_$P(^DG(40.8,SDN,0),"^",1)
 | 
|---|
| 76 |  . S SCLN=SDN
 | 
|---|
| 77 |  S SCLN=SCLN+1,DIR("A",SCLN)=SCLN_"  ALL"
 | 
|---|
| 78 |  S DIR(0)="L^1:"_SCLN,DIR("B")=SCLN
 | 
|---|
| 79 |  S DIR("A")="Select DIVISION"
 | 
|---|
| 80 |  Q
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 | SRV ;  Ask for Clinic Service
 | 
|---|
| 83 |  N TDIR
 | 
|---|
| 84 |  S TDIR="M:MEDICINE;S:SURGERY;P:PSYCHIATRY;R:REHAB MEDICINE;N:NEUROLOGY;0:NONE;"
 | 
|---|
| 85 |  S TDIR=TDIR_"A:ALL"
 | 
|---|
| 86 |  S DIR(0)="S^"_TDIR,DIR("A")="Select SERVICE"
 | 
|---|
| 87 |  Q
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 | STEDT(SDOE,SDTYPE,SDRFLG,SDSCC) ; Store the TRACK EDITS multiple for encounter
 | 
|---|
| 90 |  ;  Input:
 | 
|---|
| 91 |  ;    SDOE - Encounter IEN
 | 
|---|
| 92 |  ;  SDTYPE - Type of User - (Supervisor, Clinician, User)
 | 
|---|
| 93 |  ;  SDRFLG - Review flag var
 | 
|---|
| 94 |  ;   SDSCC - visit file service connected value (1/0)
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 |  ;  Output: none
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ; First add a new entry to the multiple.
 | 
|---|
| 99 |  Q:'$G(SDOE)
 | 
|---|
| 100 |  N DD,DO,X,DA,DIC,DIE,DLAYGO,SDIENS,SDPD,SDVBA,ERR
 | 
|---|
| 101 |  I '$D(^SDSC(409.48,SDOE,1,0)) S ^SDSC(409.48,SDOE,1,0)="^409.481^^"
 | 
|---|
| 102 |  S X=$P(^SDSC(409.48,SDOE,1,0),U,3)+1
 | 
|---|
| 103 |  S DA(1)=SDOE,DA=X,DIC="^SDSC(409.48,"_DA(1)_",1,",DIE=DIC
 | 
|---|
| 104 |  S DLAYGO=409.481,DIC("P")=DLAYGO,DIC(0)="L"
 | 
|---|
| 105 |  K DD,DO
 | 
|---|
| 106 |  D FILE^DICN
 | 
|---|
| 107 |  K DD,DO
 | 
|---|
| 108 |  ; Next update the fields within the multiple.
 | 
|---|
| 109 |  S SDIENS=$$IENS^DILF(.DA)
 | 
|---|
| 110 |  S SDPD(409.481,SDIENS,.02)=DT
 | 
|---|
| 111 |  S SDPD(409.481,SDIENS,.03)=DUZ
 | 
|---|
| 112 |  S SDPD(409.481,SDIENS,.04)=$G(SDTYPE)
 | 
|---|
| 113 |  ; If user answered "REVIEW", set the review flag to "YES".
 | 
|---|
| 114 |  ; Else, set SERV. CONNECT (OK BY USER?) field with current SC status.
 | 
|---|
| 115 |  I $G(SDRFLG)=1 S SDPD(409.481,SDIENS,.06)=1
 | 
|---|
| 116 |  E  S SDPD(409.481,SDIENS,.05)=$G(SDSCC)
 | 
|---|
| 117 |  D FILE^DIE("","SDPD","ERR")
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  ; -- If not "REVIEW" flag,
 | 
|---|
| 120 |  ;    Set file;field (#409.48;.09) SERV. CONNECT (OK BY VBA/ICD?)
 | 
|---|
| 121 |  ;    equal to the VBA/ICD9 match result.
 | 
|---|
| 122 |  I '$G(SDRFLG) D
 | 
|---|
| 123 |  . K SDPD,ERR
 | 
|---|
| 124 |  . S SDVBA=$$SC^SDSCAPI(,,SDOE)
 | 
|---|
| 125 |  . S SDPD(409.48,SDOE_",",.09)=$P(SDVBA,U,3)
 | 
|---|
| 126 |  . D FILE^DIE("","SDPD","ERR")
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | CONT ; Standard press RETURN to continue prompt.
 | 
|---|
| 130 |  N DIR,X,Y,DTOUT,DUOUT
 | 
|---|
| 131 |  S DIR(0)="EA"
 | 
|---|
| 132 |  S DIR("A")="Enter RETURN to continue "
 | 
|---|
| 133 |  D ^DIR
 | 
|---|
| 134 |  I $D(DTOUT)!$D(DUOUT) S SDQFLG=1
 | 
|---|
| 135 |  W @IOF,!,"Encounter ",SDOE," (cont'd)"
 | 
|---|
| 136 |  Q
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 | ANCPKG(SCEIEN) ;check if visit came from an ancillary package & if to continue
 | 
|---|
| 139 |  N PCEIEN,DIR,DA,X,Y
 | 
|---|
| 140 |  I '$G(SCEIEN) Q 1
 | 
|---|
| 141 |  S PCEIEN=$P($$GETOE^SDOE(SCEIEN),"^",5) I 'PCEIEN Q 1
 | 
|---|
| 142 |  I $P($G(^AUPNVSIT(PCEIEN,150)),"^",3)'="A" Q 1
 | 
|---|
| 143 |  W $C(7)
 | 
|---|
| 144 |  S DIR("A",1)="WARNING: This encounter came from another package. If it is changed"
 | 
|---|
| 145 |  S DIR("A",2)="         it will not agree with what is in the originating package."
 | 
|---|
| 146 |  S DIR("A",3)="        "
 | 
|---|
| 147 |  S DIR("A")="Do you want to continue with this encounter"
 | 
|---|
| 148 |  S DIR("B")="YES",DIR(0)="Y"
 | 
|---|
| 149 |  D ^DIR
 | 
|---|
| 150 |  Q $S(Y:1,Y<0:1,1:0)
 | 
|---|
| 151 | NCTCL(SDCLIN) ;Checks if a non-count clinic
 | 
|---|
| 152 |  I $P($G(^SC(+SDCLIN,0)),U,17)="Y" Q 1
 | 
|---|
| 153 |  Q 0
 | 
|---|
| 154 | SCHNG(SDOE) ;Checks if a completed encounter SC value was changed.
 | 
|---|
| 155 |  ;Input:  SDOE - Encounter IEN
 | 
|---|
| 156 |  ;Output: SC Changed^Orignal Value(1 or 0)^Last Value(1 or 0)
 | 
|---|
| 157 |  ;         SC Changed: 0-no change, 1-change
 | 
|---|
| 158 |  ;         Null is return if invalid
 | 
|---|
| 159 |  N SDVAL,SDORG,SDUSR
 | 
|---|
| 160 |  I $G(SDOE)="" Q ""
 | 
|---|
| 161 |  S SDVAL=$G(^SDSC(409.48,SDOE,0)) I SDVAL="" Q ""
 | 
|---|
| 162 |  I $P(SDVAL,"^",5)'="C" Q ""
 | 
|---|
| 163 |  S SDORG=$P(SDVAL,U,13),SDUSR=$P(SDVAL,U,6)
 | 
|---|
| 164 |  I SDORG="" S SDORG=1
 | 
|---|
| 165 |  Q $S(SDORG=SDUSR:0,1:1)_U_SDORG_U_SDUSR
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 | LOCK(SCIEN) ;Locks an ASCD record.
 | 
|---|
| 168 |  ; This function locks an ASCD so as to prevent another process from 
 | 
|---|
| 169 |  ; editing the same record.
 | 
|---|
| 170 |  ;  Input:  SCIEN - IEN of record in file #409.48
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  ; Output:  Returns 1 if lock was successful, 0 otherwise
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 |  I $G(SCIEN) L +^SDSC(409.48,SCIEN):5
 | 
|---|
| 175 |  Q $T
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 | UNLOCK(SCIEN) ;Unlocks an ASCD record.
 | 
|---|
| 178 |  ; This function releases the lock on an ASCD record created by $$LOCK.
 | 
|---|
| 179 |  ;  Input: SCIEN - IEN of record in file #409.48
 | 
|---|
| 180 |  ;
 | 
|---|
| 181 |  ; Output: None
 | 
|---|
| 182 |  ;
 | 
|---|
| 183 |  I $G(SCIEN) L -^SDSC(409.48,SCIEN)
 | 
|---|
| 184 |  Q
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 | SCSEL() ;Prompts for the type of service connection records to review.
 | 
|---|
| 187 |  ; Input:  No input required
 | 
|---|
| 188 |  ; Output: 1 - SC, 0 - NSC, 2 - All and "" (null)
 | 
|---|
| 189 |  N DIR
 | 
|---|
| 190 |  W !,"Service Connected Encounters Review Selection"
 | 
|---|
| 191 |  S DIR(0)="SO^S:Service Connected;N:Non-Service Connected;A:All"
 | 
|---|
| 192 |  S DIR("B")="S",DIR("A")="Which type do you want to review?"
 | 
|---|
| 193 |  D ^DIR I $D(DIRUT) Q ""
 | 
|---|
| 194 |  Q $S(Y="S":1,Y="N":0,1:2)
 | 
|---|