Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: DGOTHINQ

DGOTHINQ.m

Go to the documentation of this file.
  1. DGOTHINQ ;SLC/RM,RED - OTHD (OTHER THAN HONORABLE DISCHARGE) APIs ; August 03,2018@13:16
  1. ;;5.3;Registration;**952,1016**;Aug 13, 1993;Build 6
  1. ;
  1. ;
  1. ; Last Edited: SHRPE/RED - May 2,2019
  1. ;
  1. ; ICR# TYPE DESCRIPTION
  1. ;----- ---- -------------------------------
  1. ; 2056 Sup GETS^DIQ,GET1^DIQ
  1. ; 10103 Sup ^XLFDT: $$FMTE, $$NOW, $$FMADD, $$FMDIFF
  1. ; 10061 Sup DEM^VADPT
  1. ; 10026 Sup ^DIR
  1. ;
  1. Q ;No direct access
  1. ;
  1. ;This option will display the Other Than Honorable Patient countdown clock demographics
  1. ;Entry point DG OTH PATIENT INQ option
  1. ;
  1. EN ;
  1. N DGLOOP,POP,OTH90,DGRET,DGOTHIST
  1. S (POP,DGLOOP)=0
  1. F D Q:DGLOOP=1!(POP=1)
  1. . N DGIEN33,DFN,DGPTNM
  1. . W !
  1. . S DGPTNM=$$SELPAT(.DGARR),DGIEN33=DGARR
  1. . I DGIEN33<0 S DGLOOP=1 Q
  1. . D PATDISP Q
  1. Q
  1. ;
  1. PATDISP ;Entry point from DG OTH MANAGEMENT Option
  1. N DGARR,DG90A,DGFLG,DGSTAT,DGRES,DGRQAUT,DGLS365D,DGLS365I,DGIEN332,DGPTTYP,DGRET,DGNOT,DGOTHIST,HISFLAG
  1. S (DGFLG,DGSTAT,DGNOT,HISFLAG)=0,(DGPTTYP,DGRQAUT)=""
  1. S OTH90=$$CROSS(DGIEN33,.DGOTHIST)
  1. S DFN=$$GETPAT^DGOTHD2(DGIEN33)
  1. W @IOF
  1. D GETS^DIQ(33,DGIEN33_",",".01;.02;.05;1*","EI","DGARR","DGERR")
  1. D CLOCK(DGIEN33)
  1. S DGSTAT=$$STATUS(.DGARR) ;Get status if they have a 90 day clock
  1. I ('$D(DG90A))!('$D(DG90A(1))) D HEADER(DFN,DGSTAT),HIST Q
  1. S DGRES=$$RESULT(.DGARR,.DG90A,DGIEN33)
  1. I DGRES<0 W !!,"Error"_$S($L($P(DGRES,U,2))>0:": "_$P(DGRES,U,2),1:""),!,"Please select another patient.",! Q
  1. I $D(DG90A(1)),'$D(DG90A(2)),$P(OTH90,U,2)="OTH-90" D Q
  1. . D HEADER(DFN,DGSTAT)
  1. . I DGSTAT=3 D HIST Q ;No longer an OTH patient, display history and quit
  1. . W !
  1. . I DGLS365D<1 S DGIEN332=+$O(^DGOTH(33,DGIEN33,2,999999999),-1),DGPTTYP=$P($G(^DGOTH(33,DGIEN33,2,DGIEN332,0)),U,3) I DGPTTYP'="" W !!,"OTH patient type: ",$$GET1^DIQ(33.02,DGIEN332_","_DGIEN33_",",".03")
  1. . D DSPLY4(1),DSPLY5(DGRES,1),HIST
  1. . I 23[DGSTAT D MSG(DGSTAT,.DGARR,DGIEN33) Q
  1. I $D(DG90A(1)),$D(DG90A(2)),$P(OTH90,U,2)="OTH-90" D
  1. . Q:$G(DGRQAUT)=""
  1. . I $P(DGRES,U,$L(DGRES,U))="" D Q ;last period not defined completely
  1. . . D HEADER(DFN,DGSTAT) W !!
  1. . . D PRNTD(DGRES),HIST
  1. . . S DGFLG=1
  1. . . W ?30,"Date request submitted: ",$S($G(DGRQAUT)'="":$$FMTE^XLFDT(DGRQAUT,"5Z"),1:"N/A"),!!
  1. . . I 23[DGSTAT D MSG(DGSTAT,.DGARR,DGIEN33) Q
  1. Q:DGFLG
  1. D HEADER(DFN,DGSTAT) I DGSTAT=3 D HIST W !!
  1. I $P(OTH90,U,2)="OTH-90" D PRNTD(DGRES),HIST
  1. I 'HISFLAG D HIST
  1. Q
  1. ;
  1. PRNTD(DGRES) ;print OTH patient countdown clock demographics
  1. N I,DGCLCK
  1. S DGCLCK=+$O(DG90A(9),-1)
  1. F I=1:1:DGCLCK D
  1. . D DSPLY4(I),DSPLY5(DGRES,I)
  1. Q
  1. ;
  1. MSG(DGSTAT,DGARR,DGIEN33) ;display inactivation/adjudication message
  1. N DGRSN,DGLSDT,DGRSNIN
  1. W !
  1. S DGLSDT=$O(^DGOTH(33,DGIEN33,2,"B","A"),-1) Q:DGLSDT<1
  1. S DGRSNIN=$O(^DGOTH(33,DGIEN33,2,"B",DGLSDT,999),-1)
  1. S DGRSN=$$GET1^DIQ(33.02,DGRSNIN_","_DGIEN33_",",".04")
  1. I DGRSN="" S DGRSN=$$GET1^DIQ(33,DGIEN33_",",".04")
  1. I 3[DGSTAT W !?10,"** INACTIVE **"
  1. Q
  1. ;
  1. N DDASH,DGNAME,DGDOB,VADM,DGSSN,DGIEN332 S DGIEN332=0
  1. D DEM^VADPT ;get patient demographics
  1. S DGNAME=VADM(1),DGDOB=$P(VADM(3),U),DGSSN=$P($P(VADM(2),U,2),"-",3)
  1. W ?19,"OTHER THAN HONORABLE PATIENT INQUIRY"
  1. W !,"Patient Name: ",DGNAME," (",DGSSN,") ",?57,"DOB: ",$$FMTE^XLFDT(DGDOB)
  1. S $P(DDASH,"=",81)="" W !,DDASH ;write dash lines
  1. W !?12,"OTHER THAN HONORABLE STATUS: ",$S(DGSTAT=1:"ACTIVE",DGSTAT=2:"**PENDING**",DGSTAT=3:" **INACTIVE**",1:"")," "
  1. W !?20,"CURRENT ELIGIBILITY: ",$S($$OTHTYP($P(OTH90,U,2)):"Expanded MH/"_$P(OTH90,U,2),1:$P(OTH90,U,2)),!
  1. Q
  1. ;
  1. RESULT(DGARR,DG90A,DGIEN33) ;get the result for OTH patient
  1. N DGIENS,DGDATE,I,II,DGAUTH
  1. S DGRES=""
  1. S DGDATE=$S($G(DGDATE)>0:DGDATE,1:DT)
  1. S I=DGLS365D D
  1. . S DGRET(I)="",DGRQAUT=""
  1. . F II=1:1:DGCLCK(I) D
  1. . . N DGSDT,DGENDT,DGDIFF,DATASTR
  1. . . S DGIENS=DGCLCK(I,II)_","_I_","_+DGIEN33_","
  1. . . S DATASTR=$$GET90DT^DGOTHUT1(+DGIEN33,I,II)
  1. . . S DGSDT=$P(DATASTR,U) ;start date
  1. . . S DGENDT=$P(DATASTR,U,2) ;end date
  1. . . S DGDIFF=$P(DATASTR,U,3) ;days remaining
  1. . . S DGAUTH=DGARR(33.11,DGIENS,.04,"I")
  1. . . S DGRES=DGRES_DGSDT_U_DGENDT_U_DGDIFF_U
  1. . . S DGRET(I,II)=DGSDT_U_DGENDT_U_DGDIFF_U_DGAUTH
  1. . . I $P(DGRET(I,II),U)="",$P(DGRET(I,II),U,2)="" S DGRQAUT=$G(DGARR(33.11,DGIENS,.1,"I"))
  1. . . ;determine which clock is considered "active" within the current 365-Day period
  1. . . S DGRET(I)=II
  1. . . I DGDIFF>0,DGDIFF<90,DGSDT<=DT,DGAUTH S DGRET(I)=II
  1. Q DGRES
  1. ;
  1. DSPLY4(CLCKNO) ;
  1. I CLCKNO=1 W " 365 Day Period: ",$S(DGLS365D=1:DGLS365D,1:DGLS365D_" *"),!!," 90 Day Period: ",CLCKNO Q
  1. W !!," 90 Day Period: ",CLCKNO
  1. Q
  1. ;
  1. DSPLY5(DGRES,CLCKNO) ;
  1. N OTHSMRY,SEQ
  1. I CLCKNO=1 D
  1. . S OTHSMRY(CLCKNO,1)=$S($P(DGRES,U,1)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,1),"5Z")) ;start date
  1. . S OTHSMRY(CLCKNO,2)=$S($P(DGRES,U,2)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,2),"5Z")) ;end date
  1. . S OTHSMRY(CLCKNO,3)=$S($P(DGRES,U,3)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,3))) ;days remaining
  1. I CLCKNO=2 D
  1. . S OTHSMRY(CLCKNO,1)=$S($P(DGRES,U,4)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,4),"5Z")) ;start date
  1. . S OTHSMRY(CLCKNO,2)=$S($P(DGRES,U,5)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,5),"5Z")) ;end date
  1. . S OTHSMRY(CLCKNO,3)=$S($P(DGRES,U,6)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,6))) ;days remaining
  1. I CLCKNO=3 D
  1. . S OTHSMRY(CLCKNO,1)=$S($P(DGRES,U,7)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,7),"5Z")) ;start date
  1. . S OTHSMRY(CLCKNO,2)=$S($P(DGRES,U,8)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,8),"5Z")) ;end date
  1. . S OTHSMRY(CLCKNO,3)=$S($P(DGRES,U,9)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,9))) ;days remaining
  1. I CLCKNO=4 D
  1. . S OTHSMRY(CLCKNO,1)=$S($P(DGRES,U,10)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,10),"5Z")) ;start date
  1. . S OTHSMRY(CLCKNO,2)=$S($P(DGRES,U,11)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,11),"5Z")) ;end date
  1. . S OTHSMRY(CLCKNO,3)=$S($P(DGRES,U,12)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,12))) ;days remaining
  1. I CLCKNO=5 D
  1. . S OTHSMRY(CLCKNO,1)=$S($P(DGRES,U,13)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,13),"5Z")) ;start date
  1. . S OTHSMRY(CLCKNO,2)=$S($P(DGRES,U,14)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,14),"5Z")) ;end date
  1. . S OTHSMRY(CLCKNO,3)=$S($P(DGRES,U,15)="":" ",1:$$FMTE^XLFDT($P(DGRES,U,15))) ;days remaining
  1. ;
  1. S SEQ="" F S SEQ=$O(OTHSMRY(CLCKNO,SEQ)) Q:SEQ=""!(SEQ>5) D
  1. . I SEQ=1,OTHSMRY(CLCKNO,SEQ)=" " W " (*Pending*)" S SEQ=99 Q
  1. . I SEQ=1 W !?5,"Start Date: ",OTHSMRY(CLCKNO,SEQ)
  1. . I SEQ=2 W ?30,"End Date: ",OTHSMRY(CLCKNO,SEQ)
  1. . I SEQ=3 W ?55,"Days Remaining: ",$S(OTHSMRY(CLCKNO,SEQ)'="":OTHSMRY(CLCKNO,SEQ),1:"0")
  1. . Q
  1. I '$D(DG90A(CLCKNO+1)),$G(DGARR(33,DGIEN33_",",.05,"I"))'="" W !!?8,"Pending Auth request submitted: ",$P($$FMTE^XLFDT($G(DGARR(33,DGIEN33_",",.05,"I")),"5Z"),"@") Q
  1. K OTHSMRY
  1. Q
  1. ;
  1. HIST ; display the history of the PE/EXP changes
  1. N DGLINE S $P(DDASH,"-",81)=""
  1. W !!?15,"Primary Eligibility/Expanded Care Type History",!
  1. I $D(DGOTHIST)=0 W DDASH,!,"None on file" Q
  1. W DDASH,"Primary Eligibility",?35,"Expanded Care",?50,"Date of",?65,"Division",!,?35,"Type",?50,"Change",!,DDASH
  1. N J S J="" F S J=$O(DGOTHIST(DGIEN33,J)) Q:J="" D
  1. . S DGLINE=DGOTHIST(DGIEN33,J)
  1. . Q:$P(DGLINE,U)="" ;!($P(DGLINE,U)["EXPANDED")
  1. . W !,$S($P(DGLINE,U)="":"N/A",$$OTHTYP($P(DGLINE,U)):"EXPANDED MH CARE NON-ENROLLEE",1:$P(DGLINE,U))
  1. . W ?35,$S(($P(DGLINE,U)=""!('$$OTHTYP($P(DGLINE,U)))):"N/A",1:$P(DGLINE,U))
  1. . W ?50,$$FMTE^XLFDT($P(DGLINE,U,2),"5Z"),?65,$$STA^XUAF4($P(DGLINE,U,3))
  1. S HISFLAG=1 ;History has been displayed
  1. Q
  1. STATUS(DGARR) ; return OTH patient status DG*5.3*1016
  1. N DGPSTAT
  1. S DGPSTAT=0
  1. D
  1. .;ACTIVE
  1. .I $G(DGARR(33,DGIEN33_",",.02,"I"))=1 D
  1. ..I $G(DGARR(33,DGIEN33_",",.05,"I"))=""!($P(OTH90,U,2)="OTH-EXT") S DGPSTAT=1 Q
  1. ..;PENDING AUTHORIZATION
  1. ..I $G(DGARR(33,DGIEN33_",",.05,"I"))'="" S DGPSTAT=2
  1. ..Q
  1. .;INACTIVE
  1. .I '$G(DGARR(33,DGIEN33_",",.02,"I")) S DGPSTAT=3
  1. .Q
  1. Q DGPSTAT
  1. ;
  1. CLOCK(DGIEN33) ;
  1. N DGN
  1. S DGLS365D=+$O(^DGOTH(33,DGIEN33,1,"B",999),-1)
  1. S DGLS365I=+$O(^DGOTH(33,DGIEN33,1,"B",DGLS365D,0))
  1. F I=DGLS365I:1:DGLS365D D
  1. . S DGN=0 F S DGN=+$O(^DGOTH(33,DGIEN33,1,I,1,"B",DGN)) Q:DGN=0 D
  1. . . S DG90A(DGN)=+$O(^DGOTH(33,DGIEN33,1,I,1,"B",DGN,0))
  1. . . S DGCLCK(I)=DGN,DGCLCK(I,DGN)=+$O(^DGOTH(33,DGIEN33,1,I,1,"B",DGN,0))
  1. Q
  1. ;
  1. SELPAT(DGPAT) ;
  1. ;- input vars for ^DIC call
  1. N DIC,DTOUT,DUOUT,X,Y
  1. S DIC="^DGOTH(33,",DIC(0)="AEMQZV"
  1. S DIC("?PARAM",33,"INDEX")=.01
  1. ;- lookup patient
  1. D ^DIC K DIC
  1. ;- result of lookup
  1. S DGPAT=Y
  1. ;- if success, setup return array using output vars from ^DIC call
  1. I (+DGPAT>0) D Q Y(0,0) ;patient name
  1. . S DGPAT=+Y ;patient ien
  1. . S DGPAT(0)=$G(Y(0)) ;zero node of patient in (#33) file
  1. Q -1
  1. ;
  1. CROSS(DGIEN33,DGOTHIST) ;
  1. ;Input IEN of file #33
  1. ; Returns a count if a history of changes to OTH status are on file for the patient, in reverse order, newest first
  1. ; latest entry ^ current OTH type ^ date of change ^ 1
  1. ; or if they are no longer an OTH-90 patient - Last entry ^ New Primary Eligibility code ^ Date of change ^ 0
  1. ; and an array DGOTHIST(ien,-sequence) = OTH patient type, the last entry is the current value
  1. ; or returns 0
  1. N DGTYP,DGCNT,DGNEW,DGNEWN,DGVAL,DGCHDT,DGHIST,LAST,ACTIVE,SUBTYP,DGFAC S DGCNT=0 K DGOTHIST
  1. I '$D(^DGOTH(33,DGIEN33,0))="" Q 0_U_"Invalid Patient"
  1. I $D(^DGOTH(33,DGIEN33,2))=0 Q 0 ;No eligibility data changes in file 33
  1. S LAST=$P(^DGOTH(33,DGIEN33,2,0),U,4) I '$G(LAST) Q 0_$$GET1^DIQ(33,DGIEN33_",",".02","I")
  1. F DGCNT=LAST:-1:1 D
  1. . S DGCHDT=$P($$GET1^DIQ(33.02,DGCNT_","_DGIEN33_",",".01","I"),"."),DGNEWN=$$GET1^DIQ(33.02,DGCNT_","_DGIEN33_",",".02")
  1. . S SUBTYP=$$GET1^DIQ(33.02,DGCNT_","_DGIEN33_",",".03","I"),ACTIVE=$$GET1^DIQ(33,DGIEN33_",",".02","I"),DGFAC=$$GET1^DIQ(33.02,DGCNT_","_DGIEN33_",",".05","I")
  1. . I $G(SUBTYP)'="" S DGNEWN=SUBTYP
  1. . I DGNEWN="" S DGNEWN="*NONE*"
  1. . I DGCNT=LAST S DGVAL=DGCNT_U_DGNEWN_U_DGCHDT_U_ACTIVE ;(Set main return value)
  1. . S DGOTHIST(DGIEN33,-DGCNT)=DGNEWN_U_DGCHDT_U_DGFAC ;Set history return array)
  1. . Q
  1. I $D(DGVAL) Q DGVAL
  1. Q 0
  1. ;
  1. OTHTYP(OTHCTYP) ;Extract OTHER THAN HONORABLE set of codes
  1. ;
  1. ; Input : None
  1. ; Output: The internal set of code value
  1. ;
  1. N DGERR,I,DGOTHSOC,YY,TRUE
  1. S TRUE=0
  1. S DGOTHSOC=$$GET1^DID(2,.5501,,"SET OF CODES",,"DGERR")
  1. Q:$D(DGERR)
  1. F I=1:1:$L(DGOTHSOC,";") S YY=$P($P(DGOTHSOC,";",I),":") Q:YY="" I YY=OTHCTYP S TRUE=1
  1. Q TRUE
  1. ;end of routine DGOTHINQ