1 | DGCVRPT ;ALB/PJR - Unsupported CV End Dates Report; ; 6/10/04 12:15pm
|
---|
2 | ;;5.3;Registration;**564,731**; Aug 13,1993;Build 8
|
---|
3 | ;
|
---|
4 | EN ; Called from DG UNSUPPORTED CV END DATES RPT option
|
---|
5 | N DGSRT
|
---|
6 | S DGSRT=$$SRT I DGSRT="" Q
|
---|
7 | D RPTQUE Q
|
---|
8 | SRT() ; Get sort order
|
---|
9 | ; OUPUT: Y - Sort (N=Name; D=DFN)
|
---|
10 | N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
11 | S DIR(0)="SA^N:Name;D:DFN (Internal ID)"
|
---|
12 | S DIR("A")="Sort report by Name or DFN (Internal ID): ",DIR("B")="NAME"
|
---|
13 | S DIR("?",1)="Indicate whether the report should be sorted by the"
|
---|
14 | S DIR("?")="Veteran's Name or the Internal ID (DFN) of the Veteran"
|
---|
15 | D ^DIR I $D(DTOUT)!($D(DUOUT)) Q ""
|
---|
16 | Q Y
|
---|
17 | ;
|
---|
18 | RPTQUE ; Get report device. Queue report if requested.
|
---|
19 | N POP,ZTRTN,ZTDESC,ZTSAVE,DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
20 | K IOP,%ZIS
|
---|
21 | S %ZIS="MQ"
|
---|
22 | W !
|
---|
23 | D ^%ZIS I POP W !!,*7,"Report Cancelled!",! S DIR(0)="E" D ^DIR Q
|
---|
24 | I $D(IO("Q")) D Q
|
---|
25 | .S ZTRTN="RPT^DGCVRPT(DGSRT)"
|
---|
26 | .S ZTDESC="Print Unsupported CV End Dates Report"
|
---|
27 | .S ZTSAVE("DGSRT")=""
|
---|
28 | .D ^%ZTLOAD
|
---|
29 | .W !!,"Report "_$S($D(ZTSK):"Queued!",1:"Cancelled!")
|
---|
30 | .W ! S DIR(0)="E" D ^DIR
|
---|
31 | .D HOME^%ZIS
|
---|
32 | D RPT(DGSRT)
|
---|
33 | D ^%ZISC
|
---|
34 | Q
|
---|
35 | ;
|
---|
36 | RPT(DGSRT) ; Entry point to produce report
|
---|
37 | D EN1,EN2(DGSRT) Q
|
---|
38 | EN1 ; Extract
|
---|
39 | N RNAME,DFN,RECCOUNT,SELCOUNT,DGXTMP,RES,CEN,CALC,EDITED
|
---|
40 | ; Initialize ^XTMP global and set start date
|
---|
41 | K ^XTMP("DGCVRPT")
|
---|
42 | S RNAME="DG UNSUPPORTED CV END DATE REPORT"
|
---|
43 | S ^XTMP("DGCVRPT",0)=$$FMADD^XLFDT(DT,60)_U_DT_U_RNAME
|
---|
44 | S $P(^XTMP("DGCVRPT","DATE"),U,1)=$$FMTE^XLFDT($$NOW^XLFDT(),"5P")
|
---|
45 | S:$G(ZTSK) ZTREQ="@"
|
---|
46 | ; Set variables and initialize array for counts
|
---|
47 | S (DFN,RECCOUNT,SELCOUNT,EDITED)=0
|
---|
48 | S DGXTMP="^XTMP(""DGCVRPT"",""NOSUP"")"
|
---|
49 | ; Loop through cross-reference "E"
|
---|
50 | ; If patient meets report criteria, put on list
|
---|
51 | F S EDITED=$O(^DPT("E",EDITED)) Q:'EDITED S DFN=0 D
|
---|
52 | .F S DFN=$O(^DPT("E",EDITED,DFN)) Q:'DFN D CHK I CEN,CEN'=CALC D PUT
|
---|
53 | S $P(^XTMP("DGCVRPT","DATE"),U,2)=$$FMTE^XLFDT($$NOW^XLFDT(),"5P")
|
---|
54 | K ^XTMP("DGCVRPT","RUNNING"),DGXTMP
|
---|
55 | Q
|
---|
56 | ;
|
---|
57 | CHK ; Calculate CV End Date, check MSE data is supporting it
|
---|
58 | ; INPUT: DFN - Patient file IEN
|
---|
59 | ; OUTPUT: CEN = CV End Date on file
|
---|
60 | ; CALC = Calculated CV End Date
|
---|
61 | N DGARRY
|
---|
62 | S RECCOUNT=RECCOUNT+1 D CNT
|
---|
63 | S CALC="",CEN=$P($G(^DPT(DFN,.52)),U,15) I 'CEN Q
|
---|
64 | S CALC=$$CVDATE(DFN,.DGARRY)
|
---|
65 | ; If OEF/OIF date's "to date" is used for the CV End date, (not the
|
---|
66 | ; last SSD), include it as an inconsistency on this report
|
---|
67 | I $G(DGARRY("OEF/OIF")),DGARRY("OEF/OIF")>$G(DGARRY(2,DFN_",",.327,"I")) S CALC=""
|
---|
68 | Q
|
---|
69 | ;
|
---|
70 | SCH S CALC=$P($$SCH^XLFDT("24M",SSD),".",1) Q
|
---|
71 | ;
|
---|
72 | PUT ; Put record on list
|
---|
73 | N NAM,SSN,NZERO
|
---|
74 | S SELCOUNT=SELCOUNT+1 D CNT
|
---|
75 | S NZERO=$G(^DPT(DFN,0)),NAM=$P(NZERO,U,1),SSN=$P(NZERO,U,9)
|
---|
76 | S @DGXTMP@("DFN",DFN,0)=NAM_U_SSN_U_CEN
|
---|
77 | I NAM'="" S @DGXTMP@("NAM",NAM,DFN)=""
|
---|
78 | Q
|
---|
79 | ;
|
---|
80 | CNT S @DGXTMP@("CNT","VET")=SELCOUNT_U_RECCOUNT Q
|
---|
81 | ;
|
---|
82 | EN2(DGSRT) ; Print
|
---|
83 | ; INPUT DGSRT - Sort order for report (Name or DFN)
|
---|
84 | N PG,LINE,RPTDT,CRT,OUT,DSH,CNT,MXLNE,DGXTMP,DGTOT,LOOP
|
---|
85 | S:$G(ZTSK) ZTREQ="@"
|
---|
86 | D PRTVAR
|
---|
87 | U IO D HDR
|
---|
88 | ;;
|
---|
89 | S LOOP="LOOP"_DGSRT
|
---|
90 | D @LOOP Q:OUT
|
---|
91 | D TOT Q:OUT
|
---|
92 | W ! S OUT=$$PAUSE
|
---|
93 | Q
|
---|
94 | LOOPN ; Sort by name. Loop through ^XTMP("DGCVRPT","NOSUP","NAM", x-ref
|
---|
95 | N NM,DFN
|
---|
96 | S (NM,DFN)=""
|
---|
97 | F S NM=$O(@DGXTMP@("NAM",NM)) Q:NM=""!OUT D
|
---|
98 | .F S DFN=$O(@DGXTMP@("NAM",NM,DFN)) Q:DFN=""!OUT D PRINT
|
---|
99 | Q
|
---|
100 | LOOPD ; Sort by DFN. Loop through ^XTMP("DGCVRPT","NOSUP","DFN", x-ref
|
---|
101 | N DFN S DFN=0
|
---|
102 | F S DFN=$O(@DGXTMP@("DFN",DFN)) Q:'DFN!OUT D PRINT
|
---|
103 | Q
|
---|
104 | PRINT ; Print veteran
|
---|
105 | N VET
|
---|
106 | Q:'$D(@DGXTMP@("DFN",DFN))
|
---|
107 | S VET=$G(@DGXTMP@("DFN",DFN,0))
|
---|
108 | I LINE>MXLNE S OUT=$$PAUSE Q:OUT D HDR
|
---|
109 | W !,DFN,?12,$P(VET,U,2),?24,$E($P(VET,U,1),1,39),?64,$$FMTE^XLFDT($P(VET,U,3))
|
---|
110 | S LINE=LINE+1 Q
|
---|
111 | TOT ; Print total records at the end of the report
|
---|
112 | I LINE+4>MXLNE S OUT=$$PAUSE Q:OUT D HDR
|
---|
113 | W !!,"Total Records Printed: ",$$RJ^XLFSTR($P(DGTOT,U,1),7)
|
---|
114 | W !!,"Total Records with CV End Dates:",$$RJ^XLFSTR($P(DGTOT,U,2),7)
|
---|
115 | Q
|
---|
116 | PRTVAR ; Set up variables needed to print report
|
---|
117 | S CRT=$S($E(IOST,1,2)="C-":1,1:0)
|
---|
118 | S DGXTMP="^XTMP(""DGCVRPT"",""NOSUP"")"
|
---|
119 | S DGTOT=$G(@DGXTMP@("CNT","VET"))
|
---|
120 | S:$G(DGSRT)="" DGSRT="N"
|
---|
121 | S (PG,CNT,OUT)=0,RPTDT=$$FMTE^XLFDT(DT),MXLNE=$S(CRT:15,1:52)
|
---|
122 | S DSH="",$P(DSH,"=",80)=""
|
---|
123 | Q
|
---|
124 | HDR ; Print report header
|
---|
125 | S PG=PG+1,LINE=0
|
---|
126 | W @IOF
|
---|
127 | W ?0,"Report Date: ",RPTDT,?68,"Page: ",$$RJ^XLFSTR(PG,4)
|
---|
128 | W !,"Sorted By: "_$S(DGSRT="N":"Name",1:"DFN")
|
---|
129 | W !!,$$CJ^XLFSTR("CV END DATES WITH NO SUPPORTING MS DATA REPORT",80)
|
---|
130 | W !!,"DFN",?12,"SSN",?24,"Veteran's Name",?64,"CV End Date"
|
---|
131 | W !,DSH
|
---|
132 | Q
|
---|
133 | PAUSE() ; If report is sent to screen, prompt for next page or quit
|
---|
134 | N DIR,DIRUT,DUOUT,DTOUT,X,Y
|
---|
135 | I 'CRT Q 0
|
---|
136 | S DIR(0)="E"
|
---|
137 | D ^DIR I 'Y Q 1
|
---|
138 | Q 0
|
---|
139 | CVDATE(DFN,DGARR,DGERR) ; Returns all values for calculating the CV End date
|
---|
140 | ; in DGARR (passed by reference)
|
---|
141 | ; AND
|
---|
142 | ; any error codes from the DIQ call in DGERR (passed by reference)
|
---|
143 | ; AND
|
---|
144 | ; the calculated CV End Date as the result of the function call
|
---|
145 | ;
|
---|
146 | N N,DATE,SSD,X,Y
|
---|
147 | S DATE=""
|
---|
148 | D GETS^DIQ(2,DFN_",",".327;.322012;.322018;.322021;.5294;.5295","I","DGARR","DGERR")
|
---|
149 | S DGARR("OEF/OIF")=$P($$LAST^DGENOEIF(DFN),U)
|
---|
150 | S SSD=$G(DGARRY(2,DFN_",",.327,"I"))
|
---|
151 | ; If OEF/OIF date later than last serv sep dt, use to date of OEF/OIF
|
---|
152 | I $G(DGARRY("OEF/OIF")),DGARRY("OEF/OIF")>SSD S DATE=DGARRY("OEF/OIF") G CVDATEQ
|
---|
153 | I SSD D
|
---|
154 | . Q:$E(SSD,6,7)="00"!(SSD'>2981111)
|
---|
155 | . ; If conflict dates exist for any of the above listed fields, use SSD
|
---|
156 | . S N=0 F S N=$O(DGARR(2,DFN_",",N)) Q:'N I N'=.327,$G(DGARR(2,DFN_",",N,"I"))>2981111 S DATE=SSD Q
|
---|
157 | ;
|
---|
158 | CVDATEQ Q $S(DATE:$P($$SCH^XLFDT("24M",DATE),".",1),1:"")
|
---|
159 | ;
|
---|