Produced by Araxis Merge on 4/2/2019 1:06:55 PM Central Daylight Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.
# | Location | File | Last Modified |
---|---|---|---|
1 | C:\AraxisMergeCompare\Pri_un\ARS_Backend\ars_app\src\main\java\gov\va\med\ars\service\impl | CstatGeneratorServiceImpl.java | Wed Mar 27 19:22:44 2019 UTC |
2 | C:\AraxisMergeCompare\Pri_re\ARS_Backend\ars_app\src\main\java\gov\va\med\ars\service\impl | CstatGeneratorServiceImpl.java | Fri Mar 29 17:29:36 2019 UTC |
Description | Between Files 1 and 2 |
|
---|---|---|
Text Blocks | Lines | |
Unchanged | 2 | 1158 |
Changed | 1 | 2 |
Inserted | 0 | 0 |
Removed | 0 | 0 |
Whitespace | |
---|---|
Character case | Differences in character case are significant |
Line endings | Differences in line endings (CR and LF characters) are ignored |
CR/LF characters | Not shown in the comparison detail |
No regular expressions were active.
1 | package go v.va.med.a rs.service .impl; | |
2 | ||
3 | import jav a.io.File; | |
4 | import jav a.io.FileI nputStream ; | |
5 | import jav a.io.FileO utputStrea m; | |
6 | import jav a.io.IOExc eption; | |
7 | import jav a.nio.char set.Charse t; | |
8 | import jav a.nio.file .Files; | |
9 | import jav a.nio.file .Paths; | |
10 | import jav a.text.Sim pleDateFor mat; | |
11 | import jav a.time.Loc alDate; | |
12 | import jav a.util.Arr ayList; | |
13 | import jav a.util.Cal endar; | |
14 | import jav a.util.Dat e; | |
15 | import jav a.util.Has hSet; | |
16 | import jav a.util.Lis t; | |
17 | import jav a.util.Set ; | |
18 | import jav a.util.Str ingJoiner; | |
19 | import jav a.util.str eam.Collec tors; | |
20 | ||
21 | import org .apache.lo gging.log4 j.LogManag er; | |
22 | import org .apache.lo gging.log4 j.Logger; | |
23 | import org .springfra mework.bea ns.factory .annotatio n.Autowire d; | |
24 | import org .springfra mework.bea ns.factory .annotatio n.Value; | |
25 | import org .springfra mework.ste reotype.Se rvice; | |
26 | ||
27 | import gov .va.med.ar s.dao.ars. ClaimLevel 277CARepos itory; | |
28 | import gov .va.med.ar s.dao.ars. IHeaderRec ord277CARe pository; | |
29 | import gov .va.med.ar s.dao.ars. ITrailerRe c277CARepo sitory; | |
30 | import gov .va.med.ar s.dao.ars. LineLevel2 77CAReposi tory; | |
31 | import gov .va.med.ar s.model.re sponse.CST ATResponse ; | |
32 | import gov .va.med.ar s.service. ICstatGene ratorServi ce; | |
33 | import gov .va.med.do main.ars.C laimLevelR ecordsDeta il; | |
34 | import gov .va.med.do main.ars.C laimStatus RecordDeta il; | |
35 | import gov .va.med.do main.ars.H eaderRecor dDetail; | |
36 | import gov .va.med.do main.ars.L ineLevelRe cordsDetai l; | |
37 | import gov .va.med.do main.ars.T railerReco rdDetail; | |
38 | ||
39 | @Service | |
40 | public cla ss CstatGe neratorSer viceImpl i mplements ICstatGene ratorServi ce { | |
41 | pr ivate stat ic final L ogger logg er = LogMa nager.getL ogger(Csta tGenerator ServiceImp l.class); | |
42 | ||
43 | pr ivate stat ic final S tring deli miter = "| "; | |
44 | pr ivate stat ic final S impleDateF ormat date Format = n ew SimpleD ateFormat( "yyyyMMdd" ); | |
45 | pr ivate int recordNumb er = 2; | |
46 | // private in t trailerR ecCount; | |
47 | ||
48 | @A utowired | |
49 | Cl aimLevel27 7CAReposit ory clrdRe po; | |
50 | ||
51 | @A utowired | |
52 | Li neLevel277 CAReposito ry llrdRep o; | |
53 | ||
54 | @A utowired | |
55 | IH eaderRecor d277CARepo sitory hea derRecRepo ; | |
56 | ||
57 | @A utowired | |
58 | IT railerRec2 77CAReposi tory trail erRecRepo; | |
59 | ||
60 | @V alue("${ou tput_folde r}") | |
61 | St ring outpu tFolder; | |
62 | ||
63 | @O verride | |
64 | pu blic CSTAT Response b uildCSTAT( Long batch Id) { | |
65 | logg er.info("* ********** ********** ********** ********** ********** ********** ***"); | |
66 | logg er.info("C STAT gener ated will be located in " + ba tchId); | |
67 | logg er.info("* ********** ********** ********** ********** ********** ********** ***"); | |
68 | CSTA TResponse cstatRespo nse = new CSTATRespo nse(); | |
69 | List <String> r esultList = buildAll Segments(b atchId); | |
70 | if ( resultList != null) { | |
71 | try { | |
72 | LocalDat e today = LocalDate. now(); | |
73 | final St ring dataF ormatNow = "yyyy-MM- dd-HH-mm-s s-SSS"; | |
74 | Calendar cal = Cal endar.getI nstance(); | |
75 | SimpleDa teFormat s df = new S impleDateF ormat(data FormatNow) ; | |
76 | String t imeName = sdf.format (cal.getTi me()).trim (); | |
77 | timeName = timeNam e.replaceA ll("\\s+", ""); | |
78 | timeName = timeNam e.replaceA ll(":", "- "); | |
79 | ||
80 | String pat hName = ou tputFolder ;// "C:\\U sers\\ D NS S hivaD\\Des ktop\\CSTA T\\"; | |
81 | Files.cr eateDirect ories(Path s.get(path Name)); | |
82 | String f ileName = "CSTAT-" + timeName + ".txt"; | |
83 | pathName = pathNam e + fileNa me; | |
84 | ||
85 | Files.wr ite(Paths. get(pathNa me), resul tList, Cha rset.defau ltCharset( )); | |
86 | File fil e = new Fi le(pathNam e); | |
87 | FileInpu tStream fi leIo = new FileInput Stream(fil e); | |
88 | ||
89 | byte[] d ata = new byte[(int) file.leng th()]; | |
90 | fileIo.r ead(data); | |
91 | ||
92 | FileOutp utStream f os = new F ileOutputS tream(path Name); | |
93 | fos.writ e(data); | |
94 | fos.clos e(); | |
95 | fileIo.c lose(); | |
96 | ||
97 | setSucce ssfulCstat Response(c statRespon se, result List, toda y, fileNam e); | |
98 | } catc h (IOExcep tion e) { | |
99 | e.printS tackTrace( ); | |
100 | cstatRes ponse.setI sGenerated (false); | |
101 | return c statRespon se; | |
102 | } catc h (Excepti on e) { | |
103 | e.printS tackTrace( ); | |
104 | cstatRes ponse.setI sGenerated (false); | |
105 | return c statRespon se; | |
106 | } | |
107 | } el se { | |
108 | cstatR esponse.se tDateCreat ed(null); | |
109 | cstatR esponse.se tCstatFile Name(null) ; | |
110 | cstatR esponse.se tLineCount (0); | |
111 | cstatR esponse.se tIsGenerat ed(false); | |
112 | } | |
113 | ||
114 | retu rn cstatRe sponse; | |
115 | ||
116 | } | |
117 | ||
118 | pr ivate void setSucces sfulCstatR esponse(CS TATRespons e cstatRes ponse, Lis t<String> resultList , LocalDat e today, | |
119 | String fileName) { | |
120 | csta tResponse. setDateCre ated(today ); | |
121 | csta tResponse. setCstatFi leName(fil eName); | |
122 | csta tResponse. setLineCou nt(resultL ist.size() ); | |
123 | csta tResponse. setIsGener ated(true) ; | |
124 | } | |
125 | ||
126 | @O verride | |
127 | pu blic List< String> bu ildAllSegm ents(Long batchId) { | |
128 | logg er.info("= ========== ========== ========== "); | |
129 | logg er.info("s tart of bu ildCLMSegm ent method "); | |
130 | List <Long> clR ecIdList = new Array List<>(); | |
131 | List <String> r esultList = new Arra yList<>(); | |
132 | ||
133 | // b uild heade r string u sing the h eader id c reated in parser | |
134 | List <HeaderRec ordDetail> headerRec ordList = headerRecR epo.findBy batchId(St ring.value Of(batchId )); | |
135 | logg er.info("H eader Repo : " + head erRecordLi st.get(hea derRecordL ist.size() -1).getHl2 1Nm10946Tp id()); | |
136 | if ( !buildHdrS tring(head erRecordLi st.get(hea derRecordL ist.size() -1), resul tList)) { | |
137 | return null; | |
138 | } | |
139 | ||
140 | for( HeaderReco rdDetail h eaderRecor d : header RecordList ) { | |
141 | List<C laimLevelR ecordsDeta il> clrdWi thLines = clrdRepo.f indPending CLMWithLin es(headerR ecord.getH recid()); | |
142 | List<C laimLevelR ecordsDeta il> clrdWi thoutLines = clrdRep o.findPend ingCLMWith outLines(h eaderRecor d.getHreci d()); | |
143 | ||
144 | clrdWi thLines.ad dAll(clrdW ithoutLine s); | |
145 | HashSe t<Object> seen = new HashSet<> (); | |
146 | clrdWi thLines.re moveIf(e - > !seen.ad d(e.getClr ecid())); | |
147 | ||
148 | for (C laimLevelR ecordsDeta il clrd : clrdWithLi nes) { | |
149 | ||
150 | logger.i nfo("build ing CLM fo r Claim Re cord ID of " + clrd. getClrecid ().toStrin g()); | |
151 | buildClm String(clr d, resultL ist); | |
152 | ||
153 | buildCla imLevelSTC Strings(cl rd, result List); | |
154 | ||
155 | List<Lin eLevelReco rdsDetail> lineRecor ds = clrd. getLineLev elRecordsD etails(); | |
156 | ||
157 | if (!lin eRecords.i sEmpty()) { | |
158 | buildDTLSt ring(lineR ecords, re sultList); | |
159 | } | |
160 | ||
161 | clRecIdL ist.add(cl rd.getClre cid()); | |
162 | // recor dNumber++; | |
163 | } | |
164 | ||
165 | if (!c lRecIdList .isEmpty() ) { | |
166 | clrdRepo .updateSta tus(clRecI dList, "CO MPLETE"); | |
167 | } | |
168 | } | |
169 | ||
170 | ||
171 | // b uild trail er string using the header id created in parser | |
172 | buil dTrlrStrin g(headerRe cordList.g et(headerR ecordList. size()-1), resultLis t); | |
173 | ||
174 | logg er.info("e nd of buil dCLMSegmen t method") ; | |
175 | logg er.info("n umber of l ines is " + resultLi st.size()) ; | |
176 | logg er.info("= ========== ========== ========== "); | |
177 | ||
178 | retu rn resultL ist; | |
179 | } | |
180 | ||
181 | // build Hea der String | |
182 | pr ivate bool ean buildH drString(H eaderRecor dDetail he aderRecord , List<Str ing> resul tList) { | |
183 | Stri ngJoiner r esult = ne w StringJo iner(delim iter); | |
184 | ||
185 | if ( ValidateHe aderRecord (headerRec ord)) { | |
186 | addHea derToResul t(result, headerReco rd); | |
187 | result List.add(r esult.toSt ring()); | |
188 | return true; | |
189 | } | |
190 | retu rn false; | |
191 | ||
192 | } | |
193 | ||
194 | pr ivate void buildClmS tring(Clai mLevelReco rdsDetail clrd, List <String> r esultList) { | |
195 | Stri ngJoiner r esult = ne w StringJo iner(delim iter); | |
196 | ||
197 | // a dd field n umber 1 - 4, the 'he ader' info in CLM | |
198 | addR ecordInfoT oString(re sult, clrd , recordNu mber); | |
199 | ||
200 | // a dd field n umber 5 - 11, the bi lling prov ider info | |
201 | addB illingProv iderInfo(r esult, clr d); | |
202 | ||
203 | // a dd field n umber 12 - 18, the s ervice pro vider info | |
204 | addS erviceProv iderInfo(r esult, clr d); | |
205 | ||
206 | // a dd field n umber 19 - 20, emplo yer info | |
207 | addE mployerInf o(result, clrd); | |
208 | ||
209 | // a dd field n umber 20 - 25, subsc riber info | |
210 | addS ubscriberI nfo(result , clrd); | |
211 | ||
212 | // a dd field n umber 26 - 32, patie nt info | |
213 | addP atientInfo (result, c lrd); | |
214 | ||
215 | // a dd field n umber 33 - 39, payme nt info | |
216 | addP aymentInfo (result, c lrd); | |
217 | ||
218 | // a dd field n umber 40 - 47, ident ificationA ndClaim in fo | |
219 | addI dentificat ionAndClai mInfo(resu lt, clrd); | |
220 | ||
221 | resu ltList.add (result.to String()); | |
222 | reco rdNumber++ ; | |
223 | ||
224 | } | |
225 | ||
226 | pr ivate void buildDTLS tring(List <LineLevel RecordsDet ail> lineD etail, Lis t<String> resultList ) { | |
227 | ||
228 | for (LineLevel RecordsDet ail llrd : lineDetai l) { | |
229 | String Joiner res ult = new StringJoin er(delimit er); | |
230 | llrd.s etRecnum(L ong.valueO f(recordNu mber)); | |
231 | /* | |
232 | * add field num ber 1 - 7 - Record I D, Record Number, Pa yer ID, | |
233 | * Pay er Claim I dentificat ion Number , Line Ite m Control Number, | |
234 | * Ser vice Quali fier ID, S ervice Ide ntificatio n Code | |
235 | */ | |
236 | addRec ordFields( llrd, resu lt); | |
237 | ||
238 | // add field num ber 8 - 11 - optiona l field - Procedure Modifier 1 - | |
239 | // 4 | |
240 | addPro cedureModi fier(llrd, result); | |
241 | ||
242 | // add field num ber 12 - 1 3 - requir ed field - Line Item Charge | |
243 | // Amo unt, Line | |
244 | // Ite m Provider Payment A mount | |
245 | addLin eItemCharg eAndProvid erPaymentA mt(llrd, r esult); | |
246 | ||
247 | // add field num ber 14 - 1 6 - option al field - Revenue C ode Quanti ty | |
248 | // EMD EON | |
249 | // Cla im Number | |
250 | addRev enueCodeQu antityEmde onClmNumbe r(llrd, re sult); | |
251 | ||
252 | // add field num ber 17 - 1 8 - requir ed field - Date of S ervice Sta rt | |
253 | // Dat e of | |
254 | // Ser vice End | |
255 | addSer viceStartA ndEndDate( llrd, resu lt); | |
256 | ||
257 | result List.add(r esult.toSt ring()); | |
258 | record Number++; | |
259 | ||
260 | buildL ineLevelST C(llrd, re sultList); | |
261 | } | |
262 | ||
263 | } | |
264 | ||
265 | pr ivate void buildClai mLevelSTCS trings(Cla imLevelRec ordsDetail clrd, Lis t<String> resultList ) { | |
266 | ||
267 | Set< ClaimStatu sRecordDet ail> stcAt ClaimLevel = clrd.ge tClaimStat usRecordDe tails().st ream() | |
268 | .filter( c -> c.get LineLevelR ecordsDeta il() == nu ll).collec t(Collecto rs.toSet() ); | |
269 | ||
270 | buil dSTC(resul tList, stc AtClaimLev el); | |
271 | ||
272 | } | |
273 | ||
274 | pr ivate void buildLine LevelSTC(L ineLevelRe cordsDetai l llrd, Li st<String> resultLis t) { | |
275 | ||
276 | Set< ClaimStatu sRecordDet ail> stcAt LineLevel = llrd.get ClaimStatu sRecordDet ails().str eam() | |
277 | .filter( c -> c.get LineLevelR ecordsDeta il().getLl recid().eq uals(llrd. getLlrecid ())) | |
278 | .collect (Collector s.toSet()) ; | |
279 | ||
280 | buil dSTC(resul tList, stc AtLineLeve l); | |
281 | } | |
282 | ||
283 | pr ivate void buildSTC( List<Strin g> resultL ist, Set<C laimStatus RecordDeta il> status RecordDeta ils) { | |
284 | ||
285 | for (ClaimStat usRecordDe tail csrd : statusRe cordDetail s) { | |
286 | ||
287 | String Joiner res ult = new StringJoin er(delimit er); | |
288 | ||
289 | csrd.s etRecnum(L ong.valueO f(recordNu mber)); | |
290 | result .add(elimi nateNull(c srd.getRec id())).add (eliminate Null(csrd. getRecnum( ))) | |
291 | .add(elimi nateNull(c srd.getHl3 20Nm109210 0aFiPayeri d())) | |
292 | .add(elimi nateNull(c srd.getHl3 ptRef02220 0d1kPcidnu m())) | |
293 | .add(elimi nateNull(c srd.getHlp tRef02FjLn itmctrlnum ())) | |
294 | .add(elimi nateNull(c srd.getHlp tStc02Stci edate() != null | |
295 | ? da teFormat.f ormat(csrd .getHlptSt c02Stcieda te()) : "" )) | |
296 | .add(elimi nateNull(c srd.getHlp tStc011Csc c())).add( eliminateN ull(csrd.g etHlptStc0 12Csc())) | |
297 | .add(elimi nateNull(c srd.getHlp tStc013Ec( ))).add(el iminateNul l(csrd.get DataInErro r())) | |
298 | .add(elimi nateNull(c srd.getHl2 1Stc1012Es c())); | |
299 | ||
300 | result List.add(r esult.toSt ring()); | |
301 | record Number++; | |
302 | } | |
303 | ||
304 | } | |
305 | ||
306 | pr ivate void buildTrlr String(Hea derRecordD etail head erRecord, List<Strin g> resultL ist) { | |
307 | Stri ngJoiner r esult = ne w StringJo iner(delim iter); | |
308 | Trai lerRecordD etail trai lerRecord = trailerR ecRepo.fin dByheaderR ecordDetai l(headerRe cord); | |
309 | trai lerRecRepo .updateRec Count(resu ltList.siz e() - 1, t railerReco rd.getTrec id()); | |
310 | resu lt.add(eli minateNull (trailerRe cord.getRe cid())).ad d(eliminat eNull(Stri ng.valueOf ((resultLi st.size() - 1)))); | |
311 | resu ltList.add (result.to String()); | |
312 | logg er.info("t railerReco rd :::::-- " + (resu ltList.siz e() - 1)); | |
313 | } | |
314 | ||
315 | pr ivate void addHeader ToResult(S tringJoine r result, HeaderReco rdDetail h eaderRecor d) { | |
316 | Simp leDateForm at dateFor mat = new SimpleDate Format("yy yyMMdd"); | |
317 | Simp leDateForm at timeFor mat = new SimpleDate Format("HH mmss"); | |
318 | Date date = ne w Date(); | |
319 | Stri ng dateStr ing = date Format.for mat(date); | |
320 | Stri ng timeStr ing = time Format.for mat(date); | |
321 | /*if (timeStri ng.length( ) == 4) { | |
322 | timeSt ring += "0 0"; | |
323 | } el se { | |
324 | timeSt ring = tim eString.su bstring(0, 6); | |
325 | }*/ | |
326 | resu lt.add(eli minateNull (headerRec ord.getRec id())).add (eliminate Null(heade rRecord.ge tBatchId() )) | |
327 | .add(eli minateNull (1)).add(e liminateNu ll(1)) | |
328 | .add(eli minateNull (dateStrin g)).add(ti meString). add(elimin ateNull("V AFNH")) | |
329 | .add(eli minateNull ("VA Fee B asis Progr am")) | |
330 | .add(eli minateNull (headerRec ord.getPay ercontactn ame())) | |
331 | .add(eli minateNull (headerRec ord.getPay ersuptelnu m())) | |
332 | .add(eli minateNull (headerRec ord.getPay ersupemail ())).add(S tring.valu eOf(header Record.get Loadtype() )) | |
333 | .add(eli minateNull (headerRec ord.getPud id())).add (eliminate Null(heade rRecord.ge tFiletype( ))) | |
334 | .add(eli minateNull (headerRec ord.getVer sioncode() )).add(eli minateNull (headerRec ord.getRel easecode() )); | |
335 | } | |
336 | ||
337 | pr ivate void addProced ureModifie r(LineLeve lRecordsDe tail llrd, StringJoi ner result ) { | |
338 | resu lt.add(eli minateNull (llrd.getH lptSvc013P rcmd1())). add(elimin ateNull(ll rd.getHlpt Svc014Prcm d2())) | |
339 | .add(eli minateNull (llrd.getH lptSvc015P rcmd3())). add(elimin ateNull(ll rd.getHlpt Svc016Prcm d4())); | |
340 | } | |
341 | ||
342 | pr ivate void addLineIt emChargeAn dProviderP aymentAmt( LineLevelR ecordsDeta il llrd, S tringJoine r result) { | |
343 | ||
344 | if ( lineItemCh argeAndPro viderPayme ntAmtAreEm pty(llrd)) { | |
345 | logger .info("mis sing requi red Line p ayment inf o"); | |
346 | } | |
347 | ||
348 | resu lt.add(eli minateNull (llrd.getH lptSvc02Ln itmchrgamt ())) | |
349 | .add(eli minateNull (llrd.getH lptSvc03Ln itmprvpyma mt())); | |
350 | } | |
351 | ||
352 | pr ivate void addRecord Fields(Lin eLevelReco rdsDetail llrd, Stri ngJoiner r esult) { | |
353 | if ( requiredRe cordFields AreEmpty(l lrd)) { | |
354 | logger .info("mis sing requi red Line R ecord info "); | |
355 | } | |
356 | ||
357 | resu lt.add(eli minateNull (llrd.getR ecid())).a dd(String. valueOf(ll rd.getRecn um())) | |
358 | .add(eli minateNull (llrd.getH l20Nm10921 00aFiPayer id())) | |
359 | .add(eli minateNull (llrd.getH lptRef021k Pyrclmiden tnum())) | |
360 | .add(eli minateNull (llrd.getH lptRef02Fj Lnitmctrln um())).add (eliminate Null(llrd. getHlptSvc 011Svcqual id())) | |
361 | .add(eli minateNull (llrd.getH lptSvc012S vcidntcd() )); | |
362 | } | |
363 | ||
364 | pr ivate void addRevenu eCodeQuant ityEmdeonC lmNumber(L ineLevelRe cordsDetai l llrd, St ringJoiner result) { | |
365 | resu lt.add(eli minateNull (llrd.getH lptSvc04Re vcd())).ad d(eliminat eNull(llrd .getHlptSv c07Qnty()) ) | |
366 | .add(eli minateNull (llrd.getH lptRef02D9 Emdclmnum( ))); | |
367 | } | |
368 | ||
369 | pr ivate void addServic eStartAndE ndDate(Lin eLevelReco rdsDetail llrd, Stri ngJoiner r esult) { | |
370 | if ( serviceSta rtAndEndDa teAreEmpty (llrd)) { | |
371 | logger .info("mis sing requi red Line s ervice dat e info"); | |
372 | } | |
373 | ||
374 | resu lt.add(llr d.getHlptD tp03Dtsvcs tart() != null ? dat eFormat.fo rmat(llrd. getHlptDtp 03Dtsvcsta rt()) : "" ) | |
375 | .add(llr d.getHlptD tp03Dtsvce nd() != nu ll ? dateF ormat.form at(llrd.ge tHlptDtp03 Dtsvcend() ) : ""); | |
376 | ||
377 | } | |
378 | ||
379 | pr ivate void addRecord InfoToStri ng(StringJ oiner resu lt, ClaimL evelRecord sDetail cl rd, int re cordNumber ) { | |
380 | ||
381 | clrd .setRecnum (Long.valu eOf(record Number)); | |
382 | ||
383 | // a ll 4 field s are requ ired | |
384 | if ( allRecordI nfoAreEmpt y(clrd)) { | |
385 | logger .info("mis sing requi red record info"); | |
386 | } | |
387 | ||
388 | resu lt.add(eli minateNull (clrd.getR ecid())).a dd(String. valueOf(cl rd.getRecn um())) | |
389 | .add(eli minateNull (clrd.getH l320Nm1092 100aFiPaye rid())) | |
390 | .add(eli minateNull (clrd.getM aintenance typecode() )); | |
391 | ||
392 | } | |
393 | ||
394 | pr ivate void addBillin gProviderI nfo(String Joiner res ult, Claim LevelRecor dsDetail c lrd) { | |
395 | // i f all of t he 3 billi ng provide r ids are empty | |
396 | // t hen i need to throw an error. | |
397 | if ( allBilling ProviderId sAreEmpty( clrd)) { | |
398 | logger .info("mis sing at le ast 1 requ ired billi ng provide r info"); | |
399 | } | |
400 | ||
401 | resu lt.add(eli minateNull (clrd.getH l319Nm1092 100cFiBpft axid())).a dd(elimina teNull(clr d.getBppas signnum()) ) | |
402 | .add(eli minateNull (clrd.getH l319Nm1092 100cXxBpnp id())) | |
403 | .add(eli minateNull (clrd.getH l319Nm1032 100cBplast name())) | |
404 | .add(eli minateNull (clrd.getH l319Nm1042 100cBpfirs tname())) | |
405 | .add(eli minateNull (clrd.getH l319Nm1052 100cBpmidd lename())) | |
406 | .add(eli minateNull (clrd.getH l319Nm1072 100cBpsfx( ))); | |
407 | ||
408 | } | |
409 | ||
410 | pr ivate void addServic eProviderI nfo(String Joiner res ult, Claim LevelRecor dsDetail c lrd) { | |
411 | resu lt.add(eli minateNull (clrd.getS pftid())). add(elimin ateNull(cl rd.getSpft id())) // here | |
412 | .add(eli minateNull (clrd.getS pnpid())). add(elimin ateNull(cl rd.getSpla stname())) | |
413 | .add(eli minateNull (clrd.getS pfirstname ())).add(e liminateNu ll(clrd.ge tSpmiddlen ame())) | |
414 | .add(eli minateNull (clrd.getS psfx())); | |
415 | } | |
416 | ||
417 | pr ivate void addEmploy erInfo(Str ingJoiner result, Cl aimLevelRe cordsDetai l clrd) { | |
418 | resu lt.add(eli minateNull (clrd.getE mployerid( ))).add(el iminateNul l(clrd.get Empname()) ); | |
419 | } | |
420 | ||
421 | pr ivate void addSubscr iberInfo(S tringJoine r result, ClaimLevel RecordsDet ail clrd) { | |
422 | resu lt.add(eli minateNull (clrd.getS ubid())).a dd(elimina teNull(clr d.getSubla stname())) | |
423 | .add(eli minateNull (clrd.getS ubfrstname ())).add(e liminateNu ll(clrd.ge tSubmidnam e())) | |
424 | .add(eli minateNull (clrd.getS ubsfx())); | |
425 | ||
426 | } | |
427 | ||
428 | pr ivate void addPatien tInfo(Stri ngJoiner r esult, Cla imLevelRec ordsDetail clrd) { | |
429 | ||
430 | // p atient las t name, fi rst name, DOB is req uired | |
431 | if ( requiredPa tientInfoA reEmpty(cl rd)) { | |
432 | logger .info("mis sing requi red patien t info"); | |
433 | } | |
434 | ||
435 | resu lt.add(eli minateNull (clrd.getH l3ptNm1092 100d1Patid ())) | |
436 | .add(eli minateNull (clrd.getH l3ptNm1032 100d1Patla stname())) | |
437 | .add(eli minateNull (clrd.getH l3ptNm1042 100d1Patfr stname())) | |
438 | .add(eli minateNull (clrd.getH l3ptNm1052 100d1Patmi dname())) | |
439 | .add(eli minateNull (clrd.getH l3ptNm1072 100d1Patna mesfx())) | |
440 | .add(clr d.getPatdo b() != nul l ? dateFo rmat.forma t(clrd.get Patdob()) : "") | |
441 | .add(eli minateNull (clrd.getP atgen())); | |
442 | ||
443 | } | |
444 | ||
445 | pr ivate void addPaymen tInfo(Stri ngJoiner r esult, Cla imLevelRec ordsDetail clrd) { | |
446 | if ( !isEmpty(c lrd.getHl3 ptStc04220 0dCca())) { | |
447 | logger .info("mis sing requi red paymen t info"); | |
448 | } | |
449 | ||
450 | resu lt.add(eli minateNull (clrd.getH l3ptRef022 200dD9Emde oncn())).a dd(elimina teNull(clr d.getHl3pt Stc042200d Cca())) | |
451 | .add(eli minateNull (clrd.getH l3ptStc052 200dCpa()) ).add(elim inateNull( clrd.getHl 3ptStc0622 00dCapd()) ) | |
452 | .add(eli minateNull (clrd.getH l3ptStc082 200dCeftd( ))).add(el iminateNul l(clrd.get Hl3ptStc09 2200dCeftn um())) | |
453 | .add(eli minateNull (clrd.getH l3ptRef022 200dBltBil ltype())); | |
454 | ||
455 | } | |
456 | ||
457 | pr ivate void addIdenti ficationAn dClaimInfo (StringJoi ner result , ClaimLev elRecordsD etail clrd ) { | |
458 | ||
459 | if ( requiredId AndClaimIn foAreEmpty (clrd)) { | |
460 | logger .info("mis sing requi red identi fication a nd claim i nfo"); | |
461 | } | |
462 | ||
463 | resu lt.add(eli minateNull (clrd.getH l3ptRef022 200d1kPcid num())).ad d(eliminat eNull(clrd .getPan()) ) | |
464 | .add(eli minateNull (clrd.getP pn())).add (eliminate Null(clrd. getVoucher ())) | |
465 | .add(eli minateNull (clrd.getA lsi())).ad d(eliminat eNull(clrd .getGrpnum ())) | |
466 | .add(clr d.getHl3pt Dtp032200d 472D8Csds( ) != null ? dateForm at.format( clrd.getHl 3ptDtp0322 00d472D8Cs ds()) | |
467 | : "") | |
468 | .add(clr d.getHl3pt Dtp032200d 472D8Csde( ) != null ? dateForm at.format( clrd.getHl 3ptDtp0322 00d472D8Cs de()) | |
469 | : ""); | |
470 | ||
471 | } | |
472 | ||
473 | pr ivate bool ean lineIt emChargeAn dProviderP aymentAmtA reEmpty(Li neLevelRec ordsDetail llrd) { | |
474 | ||
475 | if ( isEmpty(ll rd.getHlpt Svc02Lnitm chrgamt()) || isEmpt y(llrd.get HlptSvc03L nitmprvpym amt())) { | |
476 | return true; | |
477 | } el se { | |
478 | return false; | |
479 | } | |
480 | } | |
481 | ||
482 | pr ivate bool ean servic eStartAndE ndDateAreE mpty(LineL evelRecord sDetail ll rd) { | |
483 | ||
484 | if ( llrd.getHl ptDtp03Dts vcstart() == null || llrd.getH lptDtp03Dt svcend() = = null) { | |
485 | return true; | |
486 | } el se { | |
487 | return false; | |
488 | } | |
489 | } | |
490 | ||
491 | pr ivate bool ean requir edRecordFi eldsAreEmp ty(LineLev elRecordsD etail llrd ) { | |
492 | if ( isEmpty(ll rd.getReci d()) && is Empty(llrd .getRecnum ()) && isE mpty(llrd. getHl20Nm1 092100aFiP ayerid()) | |
493 | && isEmp ty(llrd.ge tHlptRef02 1kPyrclmid entnum()) && isEmpty (llrd.getH lptRef02Fj Lnitmctrln um()) | |
494 | && isEmp ty(llrd.ge tHlptSvc01 1Svcqualid ()) && isE mpty(llrd. getHlptSvc 012Svcidnt cd())) { | |
495 | return true; | |
496 | } el se { | |
497 | return false; | |
498 | } | |
499 | } | |
500 | ||
501 | pr ivate bool ean requir edIdAndCla imInfoAreE mpty(Claim LevelRecor dsDetail c lrd) { | |
502 | if ( isEmpty(cl rd.getHl3p tRef022200 d1kPcidnum ()) && clr d.getHl3pt Dtp032200d 472D8Csds( ) == null | |
503 | && clrd. getHl3ptDt p032200d47 2D8Csde() == null) { | |
504 | return true; | |
505 | } el se { | |
506 | return false; | |
507 | } | |
508 | } | |
509 | ||
510 | pr ivate bool ean allRec ordInfoAre Empty(Clai mLevelReco rdsDetail clrd) { | |
511 | ||
512 | if ( isEmpty(cl rd.getReci d()) && is Empty(clrd .getRecnum ()) && isE mpty(clrd. getHl320Nm 1092100aFi Payerid()) | |
513 | && isEmp ty(clrd.ge tMaintenan cetypecode ())) { | |
514 | return true; | |
515 | } el se { | |
516 | return false; | |
517 | } | |
518 | } | |
519 | ||
520 | pr ivate bool ean allBil lingProvid erIdsAreEm pty(ClaimL evelRecord sDetail cl rd) { | |
521 | ||
522 | if ( isEmpty(cl rd.getHl31 9Nm1092100 cFiBpftaxi d()) && is Empty(clrd .getBppass ignnum()) | |
523 | && isEmp ty(clrd.ge tHl319Nm10 92100cXxBp npid())) { | |
524 | return true; | |
525 | } el se { | |
526 | return false; | |
527 | } | |
528 | } | |
529 | ||
530 | pr ivate bool ean requir edPatientI nfoAreEmpt y(ClaimLev elRecordsD etail clrd ) { | |
531 | ||
532 | if ( (isEmpty(c lrd.getHl3 ptNm103210 0d1Patlast name())) | | (isEmpty (clrd.getH l3ptNm1042 100d1Patfr stname())) | |
533 | || clrd. getPatdob( ) == null) { | |
534 | return true; | |
535 | } el se { | |
536 | return false; | |
537 | } | |
538 | } | |
539 | ||
540 | pr ivate Stri ng elimina teNull(Obj ect obj) { | |
541 | Stri ng result = ""; | |
542 | ||
543 | if ( obj != nul l) { | |
544 | if (ob j.getClass ().equals( Integer.cl ass) || ob j.getClass ().equals( Long.class ) | |
545 | || obj.get Class().eq uals(Doubl e.class) | | obj.getC lass().equ als(Short. class)) { | |
546 | result = String.va lueOf(obj) ; | |
547 | } else if (obj.g etClass(). equals(Str ing.class) ) { | |
548 | String s tr = Strin g.valueOf( obj); | |
549 | if (str != null && !str.trim ().isEmpty ()) { | |
550 | result = s tr.trim(); | |
551 | } | |
552 | } | |
553 | ||
554 | } | |
555 | ||
556 | retu rn result; | |
557 | } | |
558 | ||
559 | pr ivate bool ean isEmpt y(Object o bj) { | |
560 | retu rn elimina teNull(obj ).isEmpty( ) || elimi nateNull(o bj).equals (""); | |
561 | } | |
562 | ||
563 | pr ivate bool ean Valida teHeaderRe cord(Heade rRecordDet ail header Record) { | |
564 | if ( isEmpty(he aderRecord .getRecid( )) || isEm pty(header Record.get BatchId()) | |
565 | || isEmp ty(headerR ecord.getF ileGrpSeqn um()) || i sEmpty(hea derRecord. getFileGrp Count()) | |
566 | || heade rRecord.ge tBht04Crea tionDate() == null | | isEmpty( headerReco rd.getBht0 5CreationT ime()) | |
567 | || isEmp ty("VAFNH" ) || isEmp ty("VA Fee Basis Pro gram") | |
568 | || heade rRecord.ge tLoadtype( ) == ' ' | | isEmpty( headerReco rd.getPudi d()) | |
569 | || isEmp ty(headerR ecord.getF iletype()) || isEmpt y(headerRe cord.getVe rsioncode( )) | |
570 | || isEmp ty(headerR ecord.getR eleasecode ())) { | |
571 | logger .info("One of the re quired fie ld in head er is empt y, cannot produce CS TAT"); | |
572 | return false; | |
573 | } | |
574 | if ( headerReco rd.getBht0 4CreationD ate().comp areTo(new Date()) > 0) { | |
575 | logger .info("Cre ation date cannot be greater t han curren t date"); | |
576 | return false; | |
577 | } | |
578 | retu rn true; | |
579 | } | |
580 | } |
Araxis Merge (but not the data content of this report) is Copyright © 1993-2016 Araxis Ltd (www.araxis.com). All rights reserved.