| 1 | EASMTCHK ;ALB/SCK,PJR -  MEANS TEST BLOCKING CHECK ; 11/13/03 11:13am
 | 
|---|
| 2 |  ;;1.0;ENROLLMENT APPLICATION SYSTEM;**3,12,15,38,46**;MAR 15,2001
 | 
|---|
| 3 |  ; This routine provides an API, which when called from Appointment Management will allow 
 | 
|---|
| 4 |  ; for the blocking of future appointments and appointment check-in/out if the patient 
 | 
|---|
| 5 |  ; requires a Means Test or has a Means Test Status of Required. $$LST^DGMTU is used 
 | 
|---|
| 6 |  ; to determine if a MT is REQUIRED.  If a MT does not have a status of REQUIRED, 
 | 
|---|
| 7 |  ; but is more than 365 days out (same criteria used in OLD^DGMTU4), the MT will 
 | 
|---|
| 8 |  ; be considered "REQUIRED" for blocking purposes. If a Means Test is required, the 
 | 
|---|
| 9 |  ; following combinations of appointment actions will be blocked:
 | 
|---|
| 10 |  ;    o Making a future appt for a Regular appt type
 | 
|---|
| 11 |  ;    o Check In/Out an appt which is either a Regular or Research type
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ; A Walk-in will see the alert notice, and will be warned NOT to CHECK-IN the walk-in 
 | 
|---|
| 14 |  ; appointment. Unscheduled/Walk-ins can ONLY be checked out.
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ; This API may be passed a flag to "silence" the screen display of the alert message, and 
 | 
|---|
| 17 |  ; will accept an array variable to return the alert text in. Inpatient appointments 
 | 
|---|
| 18 |  ; are not affected in any way.  Domicilary are not considered inpatients for the purpose 
 | 
|---|
| 19 |  ; of Means Test Blocking for appointments
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | MT(DFN,EASAPT,EASACT,EASDT,EASQT,EASMSG) ; Entry point for MT Check
 | 
|---|
| 22 |  ; Input Variables
 | 
|---|
| 23 |  ;    DFN    - Patient's IEN in File #2
 | 
|---|
| 24 |  ;    EASAPT - Appointment Type (File #409.1) [Optional]
 | 
|---|
| 25 |  ;    EASACT - Appointment Action Flag [Optional] Default = "Other"
 | 
|---|
| 26 |  ;             "M"  - Make an Appointment
 | 
|---|
| 27 |  ;             "C"  - Check In/Out an existing appointment
 | 
|---|
| 28 |  ;             "W"  - Unscheduled/Walk-in appointment
 | 
|---|
| 29 |  ;             "O"  - Other
 | 
|---|
| 30 |  ;             "L"  - Letters
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  ;    EASDT  - Appointment Date/Time [Optional]
 | 
|---|
| 33 |  ;    EASQT  - Silent flag [Optional], if set will prevent display of alert message
 | 
|---|
| 34 |  ;    EASMSG - Return array for alert message [Optional], if passed in, the alert 
 | 
|---|
| 35 |  ;             message text will be copied to this array
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  ; Output
 | 
|---|
| 38 |  ;    1  - Block action (MT Required)
 | 
|---|
| 39 |  ;    0  - Don't block action (MT Not required)
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  N RSLT,EASMT,EASTXT,EASX,EAMTS,DSPLY,IENS
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  S RSLT=0
 | 
|---|
| 44 |  S EASQT=+$G(EASQT)
 | 
|---|
| 45 |  S EASAPT=+$G(EASAPT)
 | 
|---|
| 46 |  S EASDT=$G(EASDT)
 | 
|---|
| 47 |  S EASACT=$G(EASACT)
 | 
|---|
| 48 |  S:EASACT']"" EASACT="O"
 | 
|---|
| 49 |  ; If Appt type is not defined, action is CI/CO, get appt date
 | 
|---|
| 50 |  I 'EASAPT,EASACT="C",EASDT]"" D
 | 
|---|
| 51 |  .N DGARRAY,SDCNT
 | 
|---|
| 52 |  .S DGARRAY(4)=DFN,DGARRAY("SORT")="P",DGARRAY("FLDS")=10
 | 
|---|
| 53 |  .S SDCNT=$$SDAPI^SDAMA301(.DGARRAY)
 | 
|---|
| 54 |  .S EASAPT=+$P($G(^TMP($J,"SDAMA301",DFN,EASDT)),U,10)
 | 
|---|
| 55 |  .K DGARRAY,SDCNT,^TMP($J,"SDAMA301")
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  Q:$$INP(DFN) RSLT       ; Quit if inpatient
 | 
|---|
| 58 |  S EAMTS=$$MTCHK(DFN,EASACT)    ; Get MT Check flag
 | 
|---|
| 59 |  Q:'EAMTS RSLT
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  ;Build Alert message 
 | 
|---|
| 62 |  D BLDMSG(EASACT,.EASTXT)
 | 
|---|
| 63 |  I $D(EASMSG) M @EASMSG=EASTXT ; If output array defined,copy message test
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  ; Check appointment action and appointment type.  Set blocking action
 | 
|---|
| 66 |  I EASACT="M",EASAPT=9 S (DSPLY,RSLT)=1 ; Make an Appt.
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  I EASACT="C" D  ; Check-in an appt.
 | 
|---|
| 69 |  . I $G(EASAPT)=9 S (DSPLY,RSLT)=1
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  I "W,O"[EASACT D  ; Walk-in/Other appt.
 | 
|---|
| 72 |  . S:$G(EASAPT)=9 DSPLY=1
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  I $G(DSPLY) D
 | 
|---|
| 75 |  . Q:EASQT  ; If silent flag is set, do not display alert
 | 
|---|
| 76 |  . S EASX=0
 | 
|---|
| 77 |  . W !?5,$CHAR(7),"******************************************************"
 | 
|---|
| 78 |  . F  S EASX=$O(EASTXT(EASX)) Q:'EASX  D
 | 
|---|
| 79 |  . . W !?5,EASTXT(EASX)
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  ; Check for override key on making appointments
 | 
|---|
| 82 |  I EASACT="M" D
 | 
|---|
| 83 |  . I $D(^XUSEC("EAS MTOVERRIDE",DUZ)) S RSLT=0
 | 
|---|
| 84 |  Q $G(RSLT)
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 | MTCHK(DFN,EASACT) ; Check Means Test Status
 | 
|---|
| 87 |  ; Input
 | 
|---|
| 88 |  ;     DFN
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  ; Output  
 | 
|---|
| 91 |  ;     0   OK
 | 
|---|
| 92 |  ;     1   MEANS TEST Required
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  N RSLT,EASTAT,EASDT
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 |  S RSLT=0
 | 
|---|
| 97 |  S EASTAT=$$LST^DGMTU(DFN,"",1)
 | 
|---|
| 98 |  I EASTAT]"" D
 | 
|---|
| 99 |  . I $P(EASTAT,U,4)="R" S RSLT=1 Q
 | 
|---|
| 100 |  . ;; Condition Check: MT Stat="P" AND GMT Threshold>Threshold A
 | 
|---|
| 101 |  . ;;  AND MT Date is after 10/5/1999 AND Agrees to pay Deductible
 | 
|---|
| 102 |  . ;;  AND MT Date is older than 365 days, THEN MT is required
 | 
|---|
| 103 |  . I $P(EASTAT,U,4)="P",$$GET1^DIQ(408.31,+EASTAT,.27,"I")>$$GET1^DIQ(408.31,+EASTAT,.12,"I"),$P(EASTAT,U,2)>2991005,$$GET1^DIQ(408.31,+EASTAT,.11,"I"),$$OLD^DGMTU4($P(EASTAT,U,2)) S RSLT=1 Q
 | 
|---|
| 104 |  . ;; Condition Check: Cat C or Pending Adj.
 | 
|---|
| 105 |  . ;;  AND Agrees to pay Deductible AND MT date after 10/5/1999
 | 
|---|
| 106 |  . I "C,P"[$P(EASTAT,U,4),$$GET1^DIQ(408.31,+EASTAT,.11,"I"),$P(EASTAT,U,2)>2991005 Q
 | 
|---|
| 107 |  . I $P(EASTAT,U,4)="P",$$GET1^DIQ(408.31,+EASTAT,.27,"I")>$$GET1^DIQ(408.31,+EASTAT,.12,"I"),$P(EASTAT,U,2)>2991005,$$GET1^DIQ(408.31,+EASTAT,.11,"I"),$$OLD^DGMTU4($P(EASTAT,U,2)) S RSLT=1 Q
 | 
|---|
| 108 |  . ;; Condition Check: Cat C AND Declines to give income information AND Agreed to pay deductible
 | 
|---|
| 109 |  . I $P(EASTAT,U,4)="C",$$GET1^DIQ(408.31,+EASTAT,.14,"I"),$$GET1^DIQ(408.31,+EASTAT,.11,"I") Q
 | 
|---|
| 110 |  . S EASDT=$P(EASTAT,U,2)
 | 
|---|
| 111 |  . I ($$FMDIFF^XLFDT(DT,EASDT)>365) S RSLT=1
 | 
|---|
| 112 |  . I $G(EASACT)="L" D
 | 
|---|
| 113 |  . . ;; For letters, need to check for letters past 60-day threshold
 | 
|---|
| 114 |  . . I ($$FMDIFF^XLFDT(DT,EASDT)>304) S RSLT=1
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  I $P(EASTAT,U,4)="N" S RSLT=0
 | 
|---|
| 117 |  Q $G(RSLT)
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 | BLDMSG(EASACT,EASTXT) ; Build alert message to user
 | 
|---|
| 120 |  N LINE
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 |  S LINE=1
 | 
|---|
| 123 |  S EASTXT(LINE)="Means Test Alert",LINE=LINE+1
 | 
|---|
| 124 |  S EASTXT(LINE)="A Means Test is required or needs to be completed.",LINE=LINE+1
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  I "M,C,W"[EASACT D
 | 
|---|
| 127 |  . S EASTXT(LINE)="Please perform MEANS TEST or instruct patient",LINE=LINE+1
 | 
|---|
| 128 |  . S EASTXT(LINE)="to report for Means Test interview.",LINE=LINE+1
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 |  I EASACT="M" D
 | 
|---|
| 131 |  . S EASTXT(LINE)=">> A future appointment cannot be made at this time."
 | 
|---|
| 132 |  . S:$D(^XUSEC("EAS MTOVERRIDE",DUZ)) EASTXT(LINE)=">> Override Key in Effect."
 | 
|---|
| 133 |  . S LINE=LINE+1
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 |  I EASACT="C" S EASTXT(LINE)=">> This action may not be completed at this time.",LINE=LINE+1
 | 
|---|
| 136 |  I EASACT="W" D
 | 
|---|
| 137 |  . S EASTXT(LINE)=">> Check-Out ONLY.  Do NOT Check-In (CI) a walk-in appointment",LINE=LINE+1
 | 
|---|
| 138 |  . S EASTXT(LINE)="   You will not be able to check-out the appt. if you do so.",LINE=LINE+1
 | 
|---|
| 139 |  Q
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 | INP(DFN) ; Check on Inpatient status
 | 
|---|
| 142 |  ;  Input
 | 
|---|
| 143 |  ;     DFN   - IEN from patient file
 | 
|---|
| 144 |  ;  Output
 | 
|---|
| 145 |  ;     1 - Patient has Inpatient status 
 | 
|---|
| 146 |  ;     0 - Patient does not have Inpatient status
 | 
|---|
| 147 |  ;  Default
 | 
|---|
| 148 |  ;     Inpatient API defaults to TODAY for inpatient status check
 | 
|---|
| 149 |  ;
 | 
|---|
| 150 |  N VAERR,EAIN,VAROOT,VAINDT
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 |  S VAINDT=$$NOW^XLFDT,VAROOT="EAIN"
 | 
|---|
| 153 |  ;; Modified to treat DOM patients as inpatients for the purpose of appointment blocking.
 | 
|---|
| 154 |  ;; EAS*1*12
 | 
|---|
| 155 |  D INP^VADPT
 | 
|---|
| 156 |  Q $S(+$G(EAIN(1)):1,1:0)
 | 
|---|