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

DGPFRFA1.m

Go to the documentation of this file.
  1. DGPFRFA1 ;ALB/RBS - PRF FLAG ASSIGNMENT REPORT CONT. ; 1/21/04 5:14pm
  1. ;;5.3;Registration;**425,554,960**;Aug 13, 1993;Build 22
  1. ; Last Edited: SHRPE/sgm - Jul 9, 2018 13:30
  1. ;
  1. ; ICR# TYPE DESCRIPTION
  1. ;----- ---- ---------------------------------
  1. ;10024 Sup WAIT^DICD
  1. ;10026 Sup ^DIR
  1. ;10086 Sup HOME^%ZIS
  1. ;10103 Sup ^XLFDT: $$FMDIFF, $$FMTE, $$NOW
  1. ;10063 Sup $$S^%ZTLOAD
  1. ;
  1. ;This routine will compile and produce the FLAG ASSIGNMENT REPORT.
  1. ;This routine will be used to display or print all of the patient
  1. ; assignments for Category I and Category II Patient Record Flags.
  1. ;
  1. ;All sort input was created in routine DGPFRFA passed by Taskman
  1. ; Input: The following array contains the sort var's:
  1. ;
  1. ; DGSORT(subscript)=value [see routine DGPFRFA for details]
  1. ;
  1. ; Output: A formatted report of Record Flag Assignments to patients.
  1. ;5/1/2018 - DG*5.3*960 - report format substantially changed
  1. ;- no direct entry
  1. QUIT
  1. ;
  1. START ; compile and print report
  1. N DGLIST,HDR,LINE,TRM,ZTSTOP
  1. N DGC,DGF,DGO,DGS,DGBEG,DGEND
  1. S ZTSTOP=0
  1. K ^TMP("DGPFRFA1",$J)
  1. S DGLIST=$NA(^TMP("DGPFRFA1",$J))
  1. S $P(LINE,"-",104)=""
  1. ;
  1. D ; convert some DGSORT() to convenient local variables
  1. . ; DGC, DGF, DGO, DGS
  1. . ; Category, Flag, Ownership, Status
  1. . N X
  1. . S (DGBEG,DGC,DGEND,DGF,DGO,DGS)=""
  1. . ; convert category to 0 or file# of variable pointer
  1. . S X=+DGSORT("DGCAT") S DGC=$S(X=3:0,X=1:26.15,1:26.11)
  1. . ;
  1. . ; convert ownership to 1:Local; 2:Other; 0:Both
  1. . S X=+DGSORT("DGOWN") S DGO=$S(X=3:0,1:X)
  1. . ;
  1. . ; status 0:Inactive 1:Active
  1. . ; reset so coordinated with ^DD(26.13)
  1. . S DGS=(+DGSORT("DGSTAT")=1)
  1. . ;
  1. . ; DGF = A:all or variable pointer syntax for single flag
  1. . S DGF=$P(DGSORT("DGFLAG"),U)
  1. . S DGBEG=(DGSORT("DGBEG")\1)
  1. . S DGEND=(DGSORT("DGEND")\1)
  1. . Q
  1. ;
  1. S TRM=($E(IOST)="C") I TRM D WAIT^DICD
  1. ; START module initialized 6 local variables used by next code
  1. D A1 ; find data to print
  1. D HDR ; build HDR() array
  1. D PRT
  1. ;
  1. EXIT ;
  1. K ^TMP("DGPFRFA1",$J)
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. I TRM D ^%ZISC
  1. Q
  1. ;
  1. ;----------------------- PRIVATE SUBROUTINES -----------------------
  1. A1 ;
  1. ; Find records using sort var's to build list
  1. ; Output:
  1. ; ^TMP("DGPFRFA1",$J) - temp global containing report output
  1. ;
  1. N DGQ,DGSUB
  1. S DGQ=0
  1. ; DGF="A" for all flags or is single variable pointer syntax
  1. ; ^DGPF(26.13,"AFLAG",DGSUB,dfn,ien)
  1. I +DGF,'$D(^DGPF(26.13,"AFLAG",DGF)) Q
  1. ;
  1. S DGSUB=0 I +DGF S DGSUB=$O(^DGPF(26.13,"AFLAG",DGF),-1)
  1. F S DGSUB=$O(^DGPF(26.13,"AFLAG",DGSUB)) Q:DGSUB="" D Q:DGQ
  1. . I +DGF,DGSUB'=DGF S DGQ=1 Q ; single flag
  1. . I +DGC,DGSUB'[DGC Q ; single flag category
  1. . ;
  1. . N DGCNT,DGDFN,DGDFNLST
  1. . ; now get all patients with DGSUB flag assignment
  1. . ; dgdfnlst(dfn)=ien_file_26.13
  1. . Q:'$$ASGNCNT^DGPFLF6(DGSUB,.DGDFNLST)
  1. . S DGDFN=0 F S DGDFN=$O(DGDFNLST(DGDFN)) Q:DGDFN="" D
  1. . . N X,Y,DGIEN,DGPFA,OWN,STAT
  1. . . S DGIEN=DGDFNLST(DGDFN) Q:DGIEN=""
  1. . . Q:'$$GETASGN^DGPFAA(DGIEN,.DGPFA)
  1. . . ; filter, get history, save computed value in DGPFA()
  1. . . I $$A11 D A12
  1. . . Q
  1. . Q
  1. Q
  1. ;
  1. A11() ; apply filters
  1. ; 1. Get all History records of certain ACTION types:
  1. ; 2: Action types: New, Inactivate, Reactivate, Enter in Error
  1. ; 3. Action DATE must be within date range
  1. ;
  1. N X,Y,ACT,DATE,DEACT,DGHST,IEN,LAST,NUM
  1. ; check STATUS
  1. S X=+$G(DGPFA("STATUS")) I X'=DGS Q 0
  1. ; check type of owner
  1. S X=+$G(DGPFA("OWNER")),Y=0 I X>0 S Y=$$ISDIV^DGPFUT(X)
  1. I DGO>0 I '$S(DGO=2:Y<1,1:Y>0) Q 0
  1. ; get all History records of the desired ACTION
  1. I '$$ACTFILT^DGPFAAH2("DGHST",DGIEN,"1;3;4;5",,"D") Q 0
  1. ; filter records by date range and action
  1. ; LAST(1) = last activation action date
  1. ; LAST(3) = last inactivation action date
  1. ; LAST(2) = first inactivation action after last activation action
  1. ; count total number of activation events within time range
  1. S (LAST(1),LAST(2),LAST(3),NUM)=""
  1. S DATE=0 F S DATE=$O(DGHST(DATE)) Q:'DATE D
  1. . S Y=DATE\1
  1. . I Y<DGBEG K DGHST(DATE) S DGHST=DGHST-1 Q
  1. . I Y>DGEND K DGHST(DATE) S DGHST=DGHST-1 Q
  1. . S IEN=0 F S IEN=$O(DGHST(DATE,IEN)) Q:'IEN D
  1. . . S X=+$G(DGHST(DATE,IEN,"ACTION"))
  1. . . I "^1^3^4^5^"'[(U_X_U) Q
  1. . . S Y=DATE\1
  1. . . I (X=1)!(X=4) D
  1. . . . S NUM=NUM+1 ; number of activations
  1. . . . S LAST(1)=Y,LAST(2)=0 ; last activation action
  1. . . . Q
  1. . . I (X=3)!(X=5) D
  1. . . . S LAST(3)=Y ; last inactivation action
  1. . . . ; first inactivation action after last activation action
  1. . . . I +LAST(1),'LAST(2),Y'<LAST(1) S LAST(2)=Y
  1. . . . Q
  1. . . Q
  1. . Q
  1. I 'DGHST Q 0 ; no history records within date range
  1. I 'NUM Q 0 ; no activations within date range
  1. S DGPFA("ztimesactive")=NUM
  1. S DGPFA("zlastdate")=LAST(1)
  1. S Y="" I LAST(1) D
  1. . S:'LAST(2) LAST(2)=DT
  1. . S Y=$$FMDIFF^XLFDT(LAST(2),LAST(1),1)+1
  1. . Q
  1. S DGPFA("zdaysactive")=Y
  1. S DGPFA("zlastinact")=LAST(3)
  1. Q 1
  1. ;
  1. A12 ; build the list global
  1. ; Output:
  1. ; ^TMP("DGPFRFA1",$J) - temp global containing report output
  1. ;
  1. N I,X,Y,DATE,DGNAME,DGTMP,VAL
  1. Q:'$$GETPAT^DGPFUT2(DGDFN,.DGTMP)
  1. S DGNAME=DGTMP("NAME")
  1. ; set VAL = 9 '^'-pieces to save in global
  1. ; p1 = patient name
  1. ; p2 = 1U4N
  1. ; p3 = New Assignment date
  1. ; p4 = last activation date
  1. ; p5 = number of days last activation active
  1. ; p6 = next review date (may be null)
  1. ; p7 = review overdue?
  1. ; p8 = number of times assignment was activated in date range
  1. ; p9 = current owner of the assignment
  1. ; p10 = last date of inactivation
  1. ;
  1. S VAL=DGNAME_U_$E(DGTMP("NAME"))_$E(DGTMP("SSN"),6,10)
  1. K DGTMP
  1. ; retrieve initial history assign record
  1. Q:'$$GETHIST^DGPFAAH($$GETFIRST^DGPFAAH(DGIEN),.DGTMP)
  1. ;-- get 'initial assignment' date
  1. S DATE=$P($P($G(DGTMP("ASSIGNDT")),U),".")
  1. S:DATE DATE=$$FMTE^XLFDT(DATE,"2Z")
  1. S $P(VAL,U,3)=DATE
  1. ;
  1. S DATE=$G(DGPFA("zlastdate"))
  1. S:DATE DATE=$$FMTE^XLFDT(DATE,"2Z")
  1. S $P(VAL,U,4)=DATE
  1. ;
  1. ; days active, if assign inactive , put days active in ()
  1. S X=$G(DGPFA("zdaysactive")) I X,DGS=0 S X="("_X_")"
  1. S $P(VAL,U,5)=X
  1. ;
  1. S DATE="",Y=$P($G(DGPFA("REVIEWDT")),U)
  1. S:Y DATE=$$FMTE^XLFDT(Y,"2Z")
  1. S $P(VAL,U,6)=DATE
  1. ;
  1. S $P(VAL,U,7)=$S('Y:"N/A",Y<DT:"Yes",1:"No")
  1. ;
  1. S $P(VAL,U,8)=$G(DGPFA("ztimesactive"))
  1. ;
  1. S X=$P($G(DGPFA("OWNER")),U,2) S:$L(X) $P(VAL,U,9)=X
  1. ;
  1. S Y=$G(DGPFA("zlastinact")) S:Y $P(VAL,U,10)=$$FMTE^XLFDT(Y,"2Z")
  1. ;
  1. ; construct nodes to sort return global
  1. N CAT,FLAG
  1. S FLAG=$G(DGPFA("FLAG")) Q:FLAG=""
  1. S CAT=$S(FLAG[26.15:1,1:2)
  1. S FLAG=$P(FLAG,U,2)
  1. S @DGLIST@(CAT,FLAG,DGNAME,DGDFN)=VAL
  1. Q
  1. ;
  1. FORMAT(VAL) ; format one row of data for display
  1. N I,L,P,COL,DAT,STR
  1. F I=1:1:10 S DAT(I)=$P(VAL,U,I)
  1. S COL=1,STR=DAT(1) ; patient name
  1. S COL=33,$E(STR,COL)=$E(DAT(2),1,6) ; 1U4N
  1. S COL=40,$E(STR,COL)=$E(DAT(3),1,8) ; init assign date
  1. S COL=50,$E(STR,COL)=$E(DAT(4),1,8) ; last active date
  1. S COL=60,$E(STR,COL)=$J($E(DAT(5),1,6),6) ; # days active
  1. I +DGS S COL=68,$E(STR,COL)=$E(DAT(6),1,8) ; review date
  1. I +DGS S COL=81,$E(STR,COL)=$E(DAT(7),1,5) ; overdue?
  1. I 'DGS S COL=68,$E(STR,COL)=$E(DAT(10),1,8) ; inactivation date
  1. S COL=$S(DGS:88,1:80),$E(STR,COL)=$J($E(DAT(8),1,7),7) ;#times activat
  1. S COL=$S(DGS:100,1:92),$E(STR,COL)=$E(DAT(9),1,30) ; current own site
  1. S:$L(STR)<132 $E(STR,132)=" "
  1. S:$L(STR)>132 STR=$E(STR,1,132)
  1. Q STR
  1. ;
  1. HDR ; build header array
  1. ; see sample header at end of routine
  1. ; S $E(X,start_pos)=value
  1. ; Active header: 1,33,40,50,60,68,79,89,100
  1. ; Inactive header: 1,33,40,50,60,58,80,92
  1. N I,L,X,Y,COL,ROW
  1. K HDR
  1. S ROW=1 S HDR(ROW)="Flag Assignment Report",$E(HDR(ROW),123)="Page: "
  1. S ROW=2 S $P(HDR(ROW),"=",133)=""
  1. S ROW=3 D
  1. . S X="CATEGORY: " D
  1. . . S Y="I & II (National/Local)"
  1. . . I +DGC S Y=$S(DGC=26.15:"I (National)",1:"II (Local)")
  1. . . S HDR(ROW)=X_Y
  1. . . Q
  1. . S COL=39,$E(HDR(ROW),COL)="STATUS: "_$P(DGSORT("DGSTAT"),U,2)
  1. . S COL=69,X="OWNERSHIP: " D
  1. . . S Y=$P("All^Local^Other",U,DGO+1)_" Facilit"_$S(+DGO:"y",1:"ies")
  1. . . S $E(HDR(ROW),COL)=X_Y
  1. . . Q
  1. . S COL=99,X="DATE RANGE: " D
  1. . . S Y=$$FMTE^XLFDT(DGBEG,"2Z")_" to "_$$FMTE^XLFDT(DGEND,"2Z")
  1. . . S $E(HDR(ROW),COL)=X_Y
  1. . . Q
  1. . Q
  1. S ROW=4 D
  1. . I +DGF S HDR(ROW)=" FLAG: "_$P(DGSORT("DGFLAG"),U,2)
  1. . S COL=102,$E(HDR(ROW),COL)="PRINTED: "_$$FMTE^XLFDT(DT,"Z")
  1. . Q
  1. S ROW=5,HDR(ROW)=HDR(2)
  1. S ROW=6 D
  1. . ; inactive only report has different column headers
  1. . S X=""
  1. . S COL=40,$E(X,COL)="Orig"
  1. . S COL=50,$E(X,COL)="Last"
  1. . S COL=60,$E(X,COL)="# Days"
  1. . I +DGS S COL=89,$E(X,COL)="# Times"
  1. . I 'DGS D ; inactive report
  1. . . S COL=68,$E(X,COL)="Inactivate"
  1. . . S COL=80,$E(X,COL)="# Times"
  1. . . Q
  1. . S $E(X,132)=" "
  1. . S HDR(ROW)=X
  1. S ROW=7 D
  1. . S X="Patient Name"
  1. . S COL=33,$E(X,COL)="SSN"
  1. . S COL=40,$E(X,COL)="AssignDT"
  1. . S COL=50,$E(X,COL)="AssignDT"
  1. . S COL=60,$E(X,COL)="Active"
  1. . I +DGS D ; active only report
  1. . . S COL=68,$E(X,COL)="Review On"
  1. . . S COL=79,$E(X,COL)="Overdue?"
  1. . . S COL=89,$E(X,COL)="Activated"
  1. . . S COL=100,$E(X,COL)="Current Owning Site"
  1. . . Q
  1. . I 'DGS D ; inactive only report
  1. . . S COL=68,$E(X,COL)="Date"
  1. . . S COL=80,$E(X,COL)="Activated"
  1. . . S COL=92,$E(X,COL)="Current Owning Site"
  1. . . Q
  1. . S $E(X,132)=" "
  1. . S HDR(ROW)=X
  1. . Q
  1. S ROW=8,HDR(ROW)=$TR(HDR(2),"=","-")
  1. Q
  1. ;
  1. PRT ;
  1. ; DGLIST = ^TMP("DGPFRFA1",$J,CAT,FLAG,DGNAME,DGDFN)
  1. N I,X,Y,DGQ,GR,PAGE,STOP,SUBHD,TOTAL
  1. N CAT,CAT0,FLAG,FLAG0
  1. S (DGQ,PAGE)=0
  1. S SUBHD=(DGSORT("DGFLAG")<1)
  1. D WRHDR
  1. I $O(@DGLIST@(""))="" D G PRTOUT
  1. . S X="No Record Flag Assignments found using the report criteria."
  1. . W !!," >>> "_X,!
  1. . Q
  1. ;
  1. S GR=DGLIST,STOP=$TR(GR,")",",")
  1. S (CAT0,FLAG0)=""
  1. ;
  1. F S GR=$Q(@GR) Q:(GR'[STOP) D Q:DGQ
  1. . N X,DATA,DFN,FLAG,PNAM
  1. . S CAT=$QS(GR,3)
  1. . S FLAG=$QS(GR,4)
  1. . S PNAM=$QS(GR,5)
  1. . S DFN=$QS(GR,6)
  1. . S DATA=@GR
  1. . ; need to write subheader for next flag?
  1. . ; no subheader for single flag report
  1. . I SUBHD,CAT'=CAT0!(FLAG'=FLAG0) D WRSUBHDR Q:DGQ
  1. . ; update totals
  1. . S TOTAL(CAT)=1+$G(TOTAL(CAT))
  1. . S TOTAL(CAT,FLAG)=1+$G(TOTAL(CAT,FLAG))
  1. . S CAT0=CAT,FLAG0=FLAG
  1. . S X=$$FORMAT(DATA) D WR(X)
  1. . Q
  1. I 'DGQ D WRTOT
  1. ;
  1. PRTOUT ;
  1. I TRM,'DGQ W ! S X=$$E^DGPFUT7
  1. Q
  1. ;
  1. WR(X) ; write out one line
  1. ; check for bottom of page
  1. ; write new header if necessary
  1. W !,X D WRCK() I 'DGQ,(IOSL-$Y)<4 D WRHDR
  1. Q
  1. ;
  1. WRCK(MIN) ; check to see if we should quit printing (set DGQ=1)
  1. ; Input Parameters:
  1. ; MIN - optional - minimal number of lines needed before end of page
  1. ; default to 4
  1. I 'TRM Q
  1. S MIN=$G(MIN) S:'MIN MIN=4 S MIN=MIN+1
  1. I MIN>0,(IOSL-$Y)'<MIN Q
  1. N Z S Z=$$E^DGPFUT7 I Z<1 S DGQ=1
  1. Q
  1. ;
  1. WRHDR ; write page header, increment page count
  1. I $D(ZTQUEUED),$$S^%ZTLOAD S (ZTSTOP,DGQ)=1
  1. Q:DGQ
  1. N I
  1. S PAGE=1+PAGE
  1. I PAGE=1,TRM W @IOF
  1. I PAGE>1 W @IOF
  1. W !,HDR(1)_PAGE
  1. I PAGE=1 F I=2:1:8 W !,HDR(I)
  1. I PAGE>1 F I=2,6,7,8 W !,HDR(I)
  1. Q
  1. ;
  1. WRSUBHDR ; write subheader of category or flag name
  1. D WRCK Q:DGQ
  1. N X,Y
  1. S Y=$S(CAT=1:"I (National)",1:"II (Local)")
  1. S X=" Flag: "_FLAG_" [Category "_Y_"]"
  1. W !!,X
  1. Q
  1. ;
  1. WRTOT ; write out totals
  1. N I,L,X,Y,FL,SUM
  1. S SUM(1)=" -----------------------------------------------"
  1. S SUM(2)=" SUMMARY OF TOTAL ASSIGNMENTS"
  1. S SUM(3)=SUM(1)
  1. S L=3
  1. F I=1,2 I $G(TOTAL(I))>0 D
  1. . S X=" Category "_$P("I (National)^II (Local)",U,I)
  1. . S $E(X,39)=":"_$J(TOTAL(I),7)
  1. . S L=L+1,SUM(L)=X
  1. . S FL="" F S FL=$O(TOTAL(I,FL)) Q:FL="" D
  1. . . S X=" "_FL
  1. . . S $E(X,39)=":"_$J(TOTAL(I,FL),7)
  1. . . S L=L+1,SUM(L)=X
  1. . . Q
  1. . I I=1,$D(TOTAL(2)) S L=L+1,SUM(L)=SUM(1)
  1. . Q
  1. ;
  1. ; print summary on one page if possible
  1. I (IOSL-$Y-L)<0 D WRHDR Q:DGQ
  1. W ! F I=1:1:L D:(IOSL-$Y-(L-I))<0 WRHDR Q:DGQ W !,SUM(I)
  1. Q
  1. ;
  1. WRX ; press [ENTER] to continue
  1. Q:'TRM
  1. N L,X,Y,DIR,DIROUT,DIRUT,DTOUT,DUOUT
  1. W ! S DIR(0)="E" D ^DIR S:$D(DTOUT)!$D(DUOUT) DGQ=1
  1. Q
  1. ;
  1. WR2 ; write subtotals for flag
  1. Q
  1. I DGQ Q
  1. N X,Y
  1. S X=" Total Assignments for flag "_FLAG0_" [Category "
  1. S Y=$S(CAT0=1:"I (National)",1:"II (Local)")
  1. S X=X_Y_"]: "_(+$G(TOTAL(CAT0,FLAG0)))
  1. S Y=" "_$TR($E(LINE,1,$L(X)-5),"-","=")
  1. ; do not allow subtotals to print on 2 pages
  1. I (IOSL-$Y)<4 D WR()
  1. I 'DGQ W !!,X,!,Y,!
  1. Q
  1. ;
  1. ; Sample Header
  1. ; 1 2 3 4 5 6 7 8 9 0 1 2 3
  1. ;123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
  1. ;Flag Assignment Report Page: 1
  1. ;====================================================================================================================================
  1. ;CATEGORY: I & II (National/Local) STATUS: Inactive OWNERSHIP: All Facilities DATE RANGE: 07/07/15 to 06/26/18
  1. ; PRINTED: Jun 26, 2018
  1. ;====================================================================================================================================
  1. ; Orig Activated Days # Times
  1. ;Patient Name SSN AssignDT On Active Review On Overdue? Activated Current Owning Site
  1. ;------------------------------------------------------------------------------------------------------------------------------------
  1. ;
  1. ; Flag: HIGH RISK FOR SUICIDE [Category I (National)]