1 | RCXFMSSV ;WISC/RFJ-fms standard voucher (sv) code sheet generator ;1 Nov 97
|
---|
2 | ;;4.5;Accounts Receivable;**96,101,135,139,98,156,170,191,203,220,138,184,239**;Mar 20, 1995
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | Q
|
---|
5 | ;
|
---|
6 | ;
|
---|
7 | STARTSV(RCDATEND) ; top entry point to generate a sv code sheet
|
---|
8 | ;
|
---|
9 | ; rcdatend is the ending date of the period.
|
---|
10 | ; This date is the 3rd work day from the end of the month.
|
---|
11 | ; The utility $$LDATE^RCRJR is used to figure it out. It will
|
---|
12 | ; change from month to month and figures in holidays also.
|
---|
13 | ; For example, if running the ARDC for the month of June 2003
|
---|
14 | ; the EOAM will calculate out to be June 25, 2003.
|
---|
15 | ; This is called by the background monthly data collector
|
---|
16 | ;
|
---|
17 | ; data stored in tmp($j,rcrjrcolsv,type,fund,revsourcecode)
|
---|
18 | ; this is called by the background monthly data collector
|
---|
19 | ;
|
---|
20 | N GECSDATA,RCTRANID,RESULT
|
---|
21 | ; lookup fms document number to see if the monthly sv has been sent
|
---|
22 | ; example rcdatend=3010531, lookup on 3010500
|
---|
23 | D KEYLOOK^GECSSGET("SV-"_$E(RCDATEND,1,5)_"00",1)
|
---|
24 | ;
|
---|
25 | ; get the transacion id for the fms document
|
---|
26 | ; if it is not sent, get the next number available
|
---|
27 | I $G(GECSDATA) S RCTRANID=$E($P(GECSDATA("2100.1",GECSDATA,".01","E"),"-",2),1,11)
|
---|
28 | I $G(RCTRANID)="" S RCTRANID=$$ENUM^RCMSNUM
|
---|
29 | I RCTRANID<0 Q ;unable to retrieve the next number
|
---|
30 | ; remove dash (example 460-K1A05HY)
|
---|
31 | S RCTRANID=$TR(RCTRANID,"-")
|
---|
32 | ;
|
---|
33 | ; build and send the sv document to fms
|
---|
34 | S RESULT=$$BUILDSV(RCDATEND,+$G(GECSDATA),RCTRANID,"00")
|
---|
35 | ; error in building code sheet
|
---|
36 | I 'RESULT Q
|
---|
37 | ;
|
---|
38 | ; add/update entry in file 347 for reports
|
---|
39 | N %DT,%X,D,D0,DA347,DI,DQ,DIC,ERROR
|
---|
40 | S DA347=$O(^RC(347,"C",$P(RESULT,"^",2),0))
|
---|
41 | ; if not in the file, addit fmsdocid sv id
|
---|
42 | I 'DA347 D OPEN^RCFMDRV1($P(RESULT,"^",2),4,"SV-"_$E(RCDATEND,1,5)_"00",.DA347,.ERROR)
|
---|
43 | I DA347 D SSTAT^RCFMFN02($P(RESULT,"^",2),1)
|
---|
44 | Q
|
---|
45 | ;
|
---|
46 | ;
|
---|
47 | BUILDSV(RCDATEND,RCGECSDA,RCTRANID,RCKS) ; generate a wr code sheet for monthly data
|
---|
48 | ; rcgecsda is the ien for the gcs stack file 2100.1 for rebuilds
|
---|
49 | ; data stored in tmp($j,rcrjrcolsv)
|
---|
50 | ; rcks is the "key suffix" to distinguish the gecs lookup key
|
---|
51 | ; for the SRB SV from the lookup key for the BDR SV
|
---|
52 | ;
|
---|
53 | N AMOUNT,COUNT,DESCRIP,DOCTOTAL,FISCALYR,FMSLINE,FUND,FY,GECSFMS,MONTH,REVDATE,REVFY,REVMONTH,RSC,SV2,TYPE,FMAMOUNT
|
---|
54 | ;
|
---|
55 | S FISCALYR=$$FY^RCFN01(RCDATEND)
|
---|
56 | ;
|
---|
57 | S COUNT=0,DOCTOTAL=0
|
---|
58 | S TYPE="" F S TYPE=$O(^TMP($J,"RCRJRCOLSV",TYPE)) Q:TYPE="" D
|
---|
59 | . S FUND="" F S FUND=$O(^TMP($J,"RCRJRCOLSV",TYPE,FUND)) Q:FUND="" D
|
---|
60 | . . S RSC="" F S RSC=$O(^TMP($J,"RCRJRCOLSV",TYPE,FUND,RSC)) Q:RSC="" D
|
---|
61 | . . . S AMOUNT=^TMP($J,"RCRJRCOLSV",TYPE,FUND,RSC),DOCTOTAL=DOCTOTAL+AMOUNT
|
---|
62 | . . . I +AMOUNT=0 Q
|
---|
63 | . . . S COUNT=COUNT+1
|
---|
64 | . . . S FMSLINE(COUNT)="LIN^~SVA^"_$S($L(COUNT)=1:"00",$L(COUNT)=2:"0",1:"")_COUNT
|
---|
65 | . . . S $P(FMSLINE(COUNT),"^",4)=TYPE
|
---|
66 | . . . S $P(FMSLINE(COUNT),"^",5)=FISCALYR ;begin fy
|
---|
67 | . . . I $E(FUND,1,4)=5287 S $P(FMSLINE(COUNT),"^",5)="05"
|
---|
68 | . . . S $P(FMSLINE(COUNT),"^",7)=FUND
|
---|
69 | . . . S $P(FMSLINE(COUNT),"^",9)=$E(RCTRANID,1,3) ;site number
|
---|
70 | . . . ; for transaction types 23,27,2B the RSC is 0, send null
|
---|
71 | . . . S $P(FMSLINE(COUNT),"^",14)=$S(RSC=0:"",1:RSC)
|
---|
72 | . . . ;
|
---|
73 | . . . ; vendor id
|
---|
74 | . . . S $P(FMSLINE(COUNT),"^",18)="MCCFVALUE"
|
---|
75 | . . . ; for transaction type P2, send vendorid of PERSONOTH
|
---|
76 | . . . I TYPE="P2" S $P(FMSLINE(COUNT),"^",18)="PERSONOTH"
|
---|
77 | . . . ; if it is hsif fund 5358.1, send vendorid of HSIFVALUE
|
---|
78 | . . . I FUND=5358.1 S $P(FMSLINE(COUNT),"^",18)="HSIFVALUE"
|
---|
79 | . . . ; if it is ltc fund 4032 or 528709, send vendorid of EXCFVALUE
|
---|
80 | . . . I FUND=4032!(FUND=528709) D
|
---|
81 | . . . . S $P(FMSLINE(COUNT),"^",18)="EXCFVALUE"
|
---|
82 | . . . . S:FUND=4032 $P(FMSLINE(COUNT),"^",5)="03" ; FY
|
---|
83 | . . . . S:$E(FUND,1,4)=5287 $P(FMSLINE(COUNT),"^",5)="05" ; FY
|
---|
84 | . . . ;
|
---|
85 | . . . ; send pos figure to FMS; neg amt requires a "D"
|
---|
86 | . . . S FMAMOUNT=$S(AMOUNT<0:-AMOUNT,1:AMOUNT)
|
---|
87 | . . . S $P(FMSLINE(COUNT),"^",19)="~SVB"
|
---|
88 | . . . S $P(FMSLINE(COUNT),"^",20)=$J(FMAMOUNT,0,2)
|
---|
89 | . . . S $P(FMSLINE(COUNT),"^",21)=$S(AMOUNT<0:"D",1:"I")
|
---|
90 | . . . ; for transaction types 23,27,2B the RSC is 0, send G
|
---|
91 | . . . S $P(FMSLINE(COUNT),"^",23)=$S(RSC=0:"G",1:"R")
|
---|
92 | . . . S $P(FMSLINE(COUNT),"^",25)=$E(RCDATEND,2,3)
|
---|
93 | . . . S $P(FMSLINE(COUNT),"^",26)=$E(RCDATEND,4,5)
|
---|
94 | . . . S $P(FMSLINE(COUNT),"^",27)=$E(RCDATEND,6,7)
|
---|
95 | . . . S $P(FMSLINE(COUNT),"^",28)="~"
|
---|
96 | ;
|
---|
97 | ; no code sheets to send
|
---|
98 | I COUNT=0 Q "0^No sv code sheets to send for this month"
|
---|
99 | ;
|
---|
100 | ; calculate the accounting month and fy
|
---|
101 | S FY=$E(RCDATEND,2,3) I $E(RCDATEND,4,5)>9 S FY=FY+1 I FY=100 S FY="00"
|
---|
102 | I $L(FY)=1 S FY="0"_FY
|
---|
103 | S MONTH=$P("04^05^06^07^08^09^10^11^12^01^02^03","^",$E(RCDATEND,4,5))
|
---|
104 | ; calculate the reversal month and fy (next month, add 1 day)
|
---|
105 | S REVDATE=$$FMADD^XLFDT(RCDATEND,9)
|
---|
106 | S REVFY=$E(REVDATE,2,3) I $E(REVDATE,4,5)>9 S REVFY=REVFY+1 I REVFY=100 S REVFY="00"
|
---|
107 | I $L(REVFY)=1 S REVFY="0"_REVFY
|
---|
108 | S REVMONTH=$P("04^05^06^07^08^09^10^11^12^01^02^03","^",$E(REVDATE,4,5))
|
---|
109 | ;
|
---|
110 | S SV2="SV2^"_$E(RCDATEND,2,3)_"^"_$E(RCDATEND,4,5)_"^"_$E(RCDATEND,6,7)
|
---|
111 | S $P(SV2,"^",5)=MONTH ;accounting period month
|
---|
112 | S $P(SV2,"^",6)=FY ;accounting period year
|
---|
113 | S $P(SV2,"^",7)="E"
|
---|
114 | S $P(SV2,"^",12)=REVFY ;reversal period year
|
---|
115 | S $P(SV2,"^",13)=REVMONTH ;reversal period month
|
---|
116 | S:DOCTOTAL<0 DOCTOTAL=-DOCTOTAL ; document total must be positive
|
---|
117 | S $P(SV2,"^",16)=$J(DOCTOTAL,0,2)_"^~"
|
---|
118 | ;
|
---|
119 | ; put together document in gcs
|
---|
120 | N %DT,D0,DA,DI,DIC,DIE,DQ,DR,X,Y
|
---|
121 | S Y=$E(RCDATEND,1,5)_"00" D DD^%DT
|
---|
122 | S DESCRIP="Monthly Standard Voucher for "_Y
|
---|
123 | I 'RCGECSDA D CONTROL^GECSUFMS("A",$E(RCTRANID,1,3),RCTRANID,"SV",10,0,"",DESCRIP)
|
---|
124 | I RCGECSDA D REBUILD^GECSUFM1(RCGECSDA,"A",10,"","Rebuild "_DESCRIP) S GECSFMS("DA")=RCGECSDA
|
---|
125 | ;
|
---|
126 | ; store document in gcs
|
---|
127 | D SETCS^GECSSTAA(GECSFMS("DA"),SV2)
|
---|
128 | F COUNT=1:1 Q:'$D(FMSLINE(COUNT)) D SETCS^GECSSTAA(GECSFMS("DA"),FMSLINE(COUNT))
|
---|
129 | D SETCODE^GECSSDCT(GECSFMS("DA"),"D RETN^RCFMFN02")
|
---|
130 | D SETSTAT^GECSSTAA(GECSFMS("DA"),"Q")
|
---|
131 | ; set the key for lookup
|
---|
132 | D SETKEY^GECSSTAA(GECSFMS("DA"),"SV-"_$E(RCDATEND,1,5)_RCKS)
|
---|
133 | ;
|
---|
134 | ; return 1 for success ^ fms document transaction number
|
---|
135 | Q "1^SV-"_$P(GECSFMS("CTL"),"^",9)
|
---|
136 | ;
|
---|
137 | ;
|
---|
138 | BADDEBT(RCRJDATE) ; top entry point to generate a sv code sheet
|
---|
139 | ; for the bad debt report, transaction types 23, 27, 2B and 2J.
|
---|
140 | ; The fms document number in file 347 is SV-$e(dateend,1,5)_"01"
|
---|
141 | ;
|
---|
142 | ; Input: RCRJDATE -- last day of accounting month
|
---|
143 | ;
|
---|
144 | N DATA1319,DATA1338,DATA1339,DATA4032,DATAHSIF,GECSDATA,RESULT,RCRJFMM,RCRJFXSV,RCTRANID,X,RCNOHSIF,LTCFUND,DATA133M,DATA133T
|
---|
145 | N DATA133N
|
---|
146 | ;
|
---|
147 | S RCNOHSIF=$$NOHSIF^RCRJRCO() ; disabled HSIF
|
---|
148 | ;
|
---|
149 | ; lock cannot fail
|
---|
150 | L +^RC(348.1)
|
---|
151 | ;
|
---|
152 | ; get the data from the bad debt allowance file 348.1
|
---|
153 | K ^TMP($J,"RCRJRCOLSV")
|
---|
154 | S DATA1319=$G(^RC(348.1,+$O(^RC(348.1,"B",1319,0)),0))
|
---|
155 | S DATA1338=$G(^RC(348.1,+$O(^RC(348.1,"B",1338,0)),0))
|
---|
156 | S DATA1339=$G(^RC(348.1,+$O(^RC(348.1,"B",1339,0)),0))
|
---|
157 | S DATA133N=$G(^RC(348.1,+$O(^RC(348.1,"B","133N",0)),0))
|
---|
158 | I 'RCNOHSIF S DATAHSIF=$G(^RC(348.1,+$O(^RC(348.1,"B",1319.1,0)),0))
|
---|
159 | S DATA4032=$G(^RC(348.1,+$O(^RC(348.1,"B",1319.2,0)),0))
|
---|
160 | S DATA133M=$G(^RC(348.1,+$O(^RC(348.1,"B",1319.3,0)),0))
|
---|
161 | S DATA133T=$G(^RC(348.1,+$O(^RC(348.1,"B",1319.4,0)),0))
|
---|
162 | ;
|
---|
163 | ; the revenue source code here is a 0
|
---|
164 | S ^TMP($J,"RCRJRCOLSV","23",$$ADJFUND^RCRJRCO($S(DT<$$ADDPTEDT^PRCAACC():5287.3,1:528703)),0)=$P(DATA1319,"^",8)
|
---|
165 | I 'RCNOHSIF S ^TMP($J,"RCRJRCOLSV","23",5358.1,0)=$P(DATAHSIF,"^",8)
|
---|
166 | ;patch 220 replaces 4032 fund with 528709
|
---|
167 | S LTCFUND=$S(DT'<$$ADDPTEDT^PRCAACC():528709,1:4032)
|
---|
168 | S ^TMP($J,"RCRJRCOLSV","23",LTCFUND,0)=$P(DATA4032,"^",8)
|
---|
169 | S ^TMP($J,"RCRJRCOLSV","23",528701,0)=$P(DATA133M,"^",8)
|
---|
170 | S ^TMP($J,"RCRJRCOLSV","23",528704,0)=$P(DATA133T,"^",8)
|
---|
171 | ;
|
---|
172 | S ^TMP($J,"RCRJRCOLSV","2B",$$ADJFUND^RCRJRCO($S(DT<$$ADDPTEDT^PRCAACC():5287.4,1:528704)),0)=$P(DATA1338,"^",8)
|
---|
173 | S ^TMP($J,"RCRJRCOLSV","27",$$ADJFUND^RCRJRCO($S(DT<$$ADDPTEDT^PRCAACC():5287.4,1:528704)),0)=$P(DATA1339,"^",8)
|
---|
174 | ; post-MRA non-Medicare bills
|
---|
175 | S ^TMP($J,"RCRJRCOLSV","2J",$$ADJFUND^RCRJRCO($S(DT<$$ADDPTEDT^PRCAACC():5287.4,1:528704)),0)=$P(DATA133N,"^",8)
|
---|
176 | ;
|
---|
177 | ; the date is for previous month
|
---|
178 | ;S RCRJDATE=$$PREVMONT^RCRJRBD(DT)
|
---|
179 | ;I $E(DT,6,7)<$E($$LDATE^RCRJR(DT),6,7) S RCRJDATE=$$PREVMONT^RCRJRBD(DT)
|
---|
180 | ;I $E(DT,6,7)>$E($$LDATE^RCRJR(DT),6,7) S RCRJDATE=$E($$LDATE^RCRJR(DT),1,5)_"00"
|
---|
181 | ;I $E(DT,6,7)>$E($$LDATE^RCRJR(DT),6,7) S RCRJDATE=$$LDATE^RCRJR(DT)
|
---|
182 | ; find the last day of the month for the end date
|
---|
183 | ;S RCRJDATE=$E(RCRJDATE,1,5)_$P("31^28^31^30^31^30^31^31^30^31^30^31","^",+$E(RCRJDATE,4,5))
|
---|
184 | ;I $E(RCRJDATE,6,7)=28,$E(RCRJDATE,2,3)#4=0 S RCRJDATE=$E(RCRJDATE,1,5)_"29"
|
---|
185 | ;
|
---|
186 | ; lookup fms document number to see if the monthly sv has been sent
|
---|
187 | ; example rcdatend=3010531, lookup on 3010501
|
---|
188 | D KEYLOOK^GECSSGET("SV-"_$E(RCRJDATE,1,5)_"01",1)
|
---|
189 | ;
|
---|
190 | ; get the transacion id for the fms document
|
---|
191 | ; if it is not sent, get the next number available
|
---|
192 | I $G(GECSDATA) S RCTRANID=$E($P(GECSDATA("2100.1",GECSDATA,".01","E"),"-",2),1,11)
|
---|
193 | I $G(RCTRANID)="" S RCTRANID=$$ENUM^RCMSNUM
|
---|
194 | I RCTRANID<0 Q ;unable to retrieve the next number
|
---|
195 | ; remove dash (example 460-K1A05HY)
|
---|
196 | S RCTRANID=$TR(RCTRANID,"-")
|
---|
197 | ;
|
---|
198 | ; build and send the sv document to fms
|
---|
199 | S RESULT=$$BUILDSV(RCRJDATE,+$G(GECSDATA),RCTRANID,"01")
|
---|
200 | K ^TMP($J,"RCRJRCOLSV")
|
---|
201 | ; error in building code sheet
|
---|
202 | I 'RESULT D Q Q
|
---|
203 | ;
|
---|
204 | ; add/update entry in file 347 for reports
|
---|
205 | N %DT,%X,D,D0,DA347,DI,DQ,DIC,ERROR
|
---|
206 | S DA347=$O(^RC(347,"D","SV-"_$E(RCRJDATE,1,5)_"01",0))
|
---|
207 | ; if not in the file, addit fmsdocid sv id
|
---|
208 | I 'DA347 D OPEN^RCFMDRV1($P(RESULT,"^",2),4,"SV-"_$E(RCRJDATE,1,5)_"01",.DA347,.ERROR)
|
---|
209 | I DA347 D SSTAT^RCFMFN02($P(RESULT,"^",2),1)
|
---|
210 | ;
|
---|
211 | Q ; jump here to finish
|
---|
212 | ; generate bad debt report
|
---|
213 | S RCRJFXSV=$P(RESULT,"^",2),RCRJFMM=1 D DQ^RCRJRBDR
|
---|
214 | L -^RC(348.1)
|
---|
215 | Q
|
---|