64. EPMO Open Source Coordination Office Redaction File Detail Report

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.

64.1 Files compared

# 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

64.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 2 1158
Changed 1 2
Inserted 0 0
Removed 0 0

64.3 Comparison options

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

64.4 Active regular expressions

No regular expressions were active.

64.5 Comparison detail

  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   }