| 1 | EASUER ;ALB/CKN - GEOGRAPHIC MEANS TEST PHASE II ; 03-MAR-2003
 | 
|---|
| 2 |  ;;1.0;ENROLLMENT APPLICATION SYSTEM;**25,37,50,55**;Mar 15, 2001
 | 
|---|
| 3 |  ;This routine contains several APIs that will be called from
 | 
|---|
| 4 |  ;different packages like Scheduling, PCE and Fee basis to notify
 | 
|---|
| 5 |  ;Enrollment package whenever any inpatient/outpatient encounter occurs,
 | 
|---|
| 6 |  ;or any appointment made or any changes made to fee basis authorization.
 | 
|---|
| 7 |  Q
 | 
|---|
| 8 | SCHED ;This API will be called from SDAM APPOINTMENT EVENTS via EAS UE SCHED 
 | 
|---|
| 9 |  ;EVENT protocol whenever any changes made to veteran's appointment.
 | 
|---|
| 10 |  ;Input variables used in this api:
 | 
|---|
| 11 |  ;             SDATA     -  piece 1 - ien of multiple entry of the 
 | 
|---|
| 12 |  ;                                    APPOINTMENTS multiple of the
 | 
|---|
| 13 |  ;                                    HOSPITAL LOCATION file.
 | 
|---|
| 14 |  ;                          piece 2 - ien of PATIENT file (DFN)
 | 
|---|
| 15 |  ;                          piece 3 - internal Date/time of appt.
 | 
|---|
| 16 |  ;                          piece 4 - ien of clinic in the HOSPITAL
 | 
|---|
| 17 |  ;                                    LOCATION file.
 | 
|---|
| 18 |  ;             SDAMEVT   -  ien pointing to an entry in the APPOINTMENT
 | 
|---|
| 19 |  ;                          TRANSACTION file (#409.66).
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  N DFN,APT,APTDT
 | 
|---|
| 22 |  S DFN=$P($G(SDATA),"^",2) Q:DFN=""  ;Veteran's IEN
 | 
|---|
| 23 |  I $G(SDAMEVT)=1 D  ;if new appointment is made
 | 
|---|
| 24 |  . S APTDT=$P($G(SDATA),"^",3),APTDT=$$FY(APTDT)
 | 
|---|
| 25 |  . ;check current User Enrollee data and update it if necessary.
 | 
|---|
| 26 |  . I $$UPDCHK(DFN,APTDT) D FILE(DFN,APTDT)
 | 
|---|
| 27 |  Q
 | 
|---|
| 28 | ENC ;This API will be called from PXK VISIT DATA EVENT via EAS UE PCE EVENT
 | 
|---|
| 29 |  ;whenever any inpatient/outpatient encounter occurs.
 | 
|---|
| 30 |  ;Input:
 | 
|---|
| 31 |  ;^TMP("PXKCO",$J,VISIT,"V FILE STRING",V FILE RECORD,DDSUBSCRIPT,"AFTER/BEFORE")=DATA
 | 
|---|
| 32 |  ;where: subscript piece 1 - string notation representing package "PXKCO"
 | 
|---|
| 33 |  ;       subscript piece 2 - Job number ($J)
 | 
|---|
| 34 |  ;       subscript piece 3 - ien of VISIT file
 | 
|---|
| 35 |  ;       subscript piece 4 - string representing the VISIT or V file
 | 
|---|
| 36 |  ;                           data category
 | 
|---|
| 37 |  ;       subscript piece 5 - ien of the entry in the file represented in
 | 
|---|
| 38 |  ;                           subscript #4
 | 
|---|
| 39 |  ;       subscript piece 6 - subscript or DD node on which the data is stored.
 | 
|---|
| 40 |  ;       subscript piece 7 - string designating whether or not the data
 | 
|---|
| 41 |  ;                           is an "after" or "before" reflection of data.
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  N VSIT,NODE,DFN,VDT
 | 
|---|
| 44 |  I '$D(^TMP("PXKCO",$J)) Q
 | 
|---|
| 45 |  S VSIT=$O(^TMP("PXKCO",$J,"")) Q:VSIT=""  ;ien of VISIT file
 | 
|---|
| 46 |  S NODE=$G(^AUPNVSIT(VSIT,0))
 | 
|---|
| 47 |  ;get Veteran's IEN and encounter date
 | 
|---|
| 48 |  S DFN=$P($G(NODE),"^",5),VDT=$P($G(NODE),"^",1)
 | 
|---|
| 49 |  S VDT=$$FY(VDT)
 | 
|---|
| 50 |  ;check current User Enrollee data and update if necessary
 | 
|---|
| 51 |  I $$UPDCHK(DFN,VDT) D FILE(DFN,VDT)
 | 
|---|
| 52 |  Q
 | 
|---|
| 53 | FBAUTH(FBDFN,FBTODT) ;This Enrollment api will be called from Fee basis
 | 
|---|
| 54 |  ;applications at the time of any fee basis authorization changes.
 | 
|---|
| 55 |  ;Input:         FBDFN  -  Veteran's ien
 | 
|---|
| 56 |  ;              FBTODT  -  Latest date of authorization.
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  N XDT
 | 
|---|
| 59 |  S XDT=$$FY(FBTODT)
 | 
|---|
| 60 |  I $$UPDCHK(FBDFN,XDT) D FILE(FBDFN,XDT)
 | 
|---|
| 61 |  Q
 | 
|---|
| 62 | INP ;This Enrollment api will be called from DGPM MOVEMENT EVENT via 
 | 
|---|
| 63 |  ;EAS UE INP EVENT protocol whenever inpatient veteran is admitted,
 | 
|---|
| 64 |  ;transfered,discharged or any movement.
 | 
|---|
| 65 |  ;supported variables of this event:
 | 
|---|
| 66 |  ;       DFN  - Pointer to patient in PATIENT file (#2)
 | 
|---|
| 67 |  ;    DGPMDA  - Pointer to primary movement in PATIENT MOVEMENT file.
 | 
|---|
| 68 |  ;     DGPMP  - Zero node of primary movement prior to add/edit/del
 | 
|---|
| 69 |  ;     DGPMA  - Zero node of primary movement after add/edit/delete
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  N XDT
 | 
|---|
| 72 |  I '$G(DFN)!'$G(DGPMDA) Q
 | 
|---|
| 73 |  S XDT=$P($G(^DGPM(DGPMDA,0)),"^")  ;Date of movement
 | 
|---|
| 74 |  S XDT=$$FY(XDT) I $$UPDCHK(DFN,XDT) D FILE(DFN,XDT)
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 | UESTAT(DFN) ;This api will be called at the time of Annual MT renewal
 | 
|---|
| 77 |  ;process to check if veteran has UE status for current FY.
 | 
|---|
| 78 |  N UESTAT,UESITE,UESTN,CURSTN,PRNT,CHILD,CIEN
 | 
|---|
| 79 |  I '$G(DFN) Q 0  ;No DFN
 | 
|---|
| 80 |  S UESTAT=$P($G(^DPT(DFN,.361)),"^",7)
 | 
|---|
| 81 |  I UESTAT="" Q 0  ;Not User Enrollee
 | 
|---|
| 82 |  I UESTAT<$$FY(DT) Q 0  ;Not User Enrollee for current FY
 | 
|---|
| 83 |  S UESITE=$P($G(^DPT(DFN,.361)),"^",8) Q:+UESITE=0 0
 | 
|---|
| 84 |  ; *** Modifications for patch 55 to handle VISN or HCS UE Sites
 | 
|---|
| 85 |  S UESTN=$$STA^XUAF4(UESITE)
 | 
|---|
| 86 |  S CURSTN=$P($$SITE^VASITE,"^",3)
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  I UESTN']"" D
 | 
|---|
| 89 |  . D CHILDREN^XUAF4("CHILD","`"_UESITE,"PARENT FACILITY")
 | 
|---|
| 90 |  . S CIEN=0 F  S CIEN=$O(CHILD("C",CIEN)) Q:'CIEN  I CIEN=CURSTN S UESTN=$$STA^XUAF4(CIEN) Q
 | 
|---|
| 91 |  . I UESTN']"" D
 | 
|---|
| 92 |  . . D CHILDREN^XUAF4("CHILD","`"_UESITE,"VISN")
 | 
|---|
| 93 |  . . S CIEN=0 F  S CIEN=$O(CHILD("C",CIEN)) Q:'CIEN  I CIEN=CURSTN S UESTN=$$STA^XUAF4(CIEN) Q
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  S PRNT=$$PSITE(CURSTN),CURSTN=$$STA^XUAF4(PRNT)
 | 
|---|
| 96 |  I UESTN'=CURSTN Q 2  ;Not same site
 | 
|---|
| 97 |  Q 1
 | 
|---|
| 98 | UPDCHK(DFN,APTDT) ;This api will determine whether to update User Enrollee data.
 | 
|---|
| 99 |  I '$G(DFN) Q 0  ;No DFN
 | 
|---|
| 100 |  I $P($G(^DPT(DFN,"VET")),"^")="N" Q 0  ;Quit if Non veteran
 | 
|---|
| 101 |  I APTDT<3030000 Q 0  ;Quit if APTDT is less than FY 2003
 | 
|---|
| 102 |  N CURSTAT
 | 
|---|
| 103 |  S CURSTAT=$P($G(^DPT(DFN,.361)),"^",7)
 | 
|---|
| 104 |  I APTDT>CURSTAT Q 1
 | 
|---|
| 105 |  Q 0
 | 
|---|
| 106 | FY(XDATE) ;Returns a fiscal year for the date
 | 
|---|
| 107 |  N ENFY S ENFY=""
 | 
|---|
| 108 |  I $G(XDATE)?7N.E S ENFY=$S($E(XDATE,4,5)<10:$E(XDATE,1,3),1:$E(XDATE,1,3)+1)
 | 
|---|
| 109 |  Q ENFY_"0000"
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 | PSITE(STA) ;Get parent site IEN
 | 
|---|
| 112 |  N PRNT,PRNTYP
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  S PRNT=0
 | 
|---|
| 115 |  ; First pass, get the parent facility, then get the facility type for the parent
 | 
|---|
| 116 |  ; If the parent is a VAMC, then quit returning parent
 | 
|---|
| 117 |  ; If the parent is either a VISN or HCS type, then return the current station, not the parent
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  S PRNT=+$$PRNT^XUAF4(STA)
 | 
|---|
| 120 |  I PRNT>0 D
 | 
|---|
| 121 |  . S PRNTYP=$$GET1^DIQ(4,PRNT,13)
 | 
|---|
| 122 |  . I PRNTYP="VAMC" Q
 | 
|---|
| 123 |  . I "HCS,VISN"[PRNTYP S PRNT=STA Q
 | 
|---|
| 124 |  E  D
 | 
|---|
| 125 |  . I $$GET1^DIQ(4,STA,13)="VAMC" S PRNT=STA Q
 | 
|---|
| 126 |  . E  S REVSTA=$E(STA,1,3),PRNT=+$$PRNT^XUAF4(REVSTA) D
 | 
|---|
| 127 |  . . I $$GET1^DIQ(4,PRNT,13)="VAMC" Q
 | 
|---|
| 128 |  . . S PRNT=+$O(^DIC(4,"D",REVSTA,""))
 | 
|---|
| 129 |  Q PRNT
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | CHKPRNT(PRNT) ; Check if parent is a VISN entity, removed with Patch 50
 | 
|---|
| 132 |  Q 0
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 | FILE(XIEN,XDT) ;Update User Enrollee fields and queue Z07
 | 
|---|
| 135 |  N DATA,FILEUPD,SITE,PRNT,EVENT,IYR
 | 
|---|
| 136 |  S SITE=$$SITE^VASITE,SITE=$P($G(SITE),"^",3)
 | 
|---|
| 137 |  S PRNT=$$PSITE(SITE) Q:'+$G(PRNT)
 | 
|---|
| 138 |  S DATA(.3617)=XDT,DATA(.3618)=PRNT
 | 
|---|
| 139 |  I '$$UPD^DGENDBS(2,.XIEN,.DATA) Q
 | 
|---|
| 140 |  S IYR=$$INCYR(XIEN)
 | 
|---|
| 141 |  S EVENT("ENROLL")=1 I $$LOG^IVMPLOG(XIEN,IYR,.EVENT)
 | 
|---|
| 142 |  Q
 | 
|---|
| 143 | INCYR(XIEN) ;Get valid income year
 | 
|---|
| 144 |  ;N INCYR,LMT,R3015,I,TEMP
 | 
|---|
| 145 |  I $D(^IVM(301.5,"APT",XIEN)) D  Q INCYR
 | 
|---|
| 146 |  . S INCYR=$O(^IVM(301.5,"APT",XIEN,""),-1)
 | 
|---|
| 147 |  F I=1,2,4 D
 | 
|---|
| 148 |  . S LMT=$$LST^DGMTU(XIEN,,I)
 | 
|---|
| 149 |  . I +$G(LMT) S TEMP($P(LMT,"^",2))=""
 | 
|---|
| 150 |  I $D(TEMP) S LMT=$O(TEMP(""),-1),INCYR=($E(LMT,1,3)-1)_"0000" Q INCYR
 | 
|---|
| 151 |  S INCYR=($E(DT,1,3)-1)_"0000"
 | 
|---|
| 152 |  Q INCYR
 | 
|---|