Friday, 6 May 2016

Create seperate Person if termination Date and coverage are different

rule "Create seperate Person if termination Date and coverage are different"
    ruleflow-group "PostTransform"
    salience -1
    no-loop
    when
        $latestRequestedData:LatestRequestedData()
        $person : BFEnrollmentPerson(benefits != null, benefits.benefitRecord != null,ediTransaction != EdiTransactionConstants.SKIP)
        $count_skip : List() from collect(BenefitRecord(EdiTransactionConstants.SKIP == ediTransaction) from $person.benefits.benefitRecord)
        $event_date : Metadata(name == "EVENT_DATE") from $person.dxMetaData  
    then
        String event_date=$event_date.getValue();
         HashMap filterBenefits = new HashMap();
         String coverageLostDate="";
for (BenefitRecord benefitRecord : $person.getBenefits().getBenefitRecord()){

if(EdiTransactionConstants.SKIP!=benefitRecord.getEdiTransaction()){
             
    Metadata  coverageLostEvent=EDIUtil.findMetadataInMetadataList(benefitRecord.getDxMetaData(), "LOST_EVENT_DATE" );
    coverageLostDate=coverageLostEvent.getValue();

if(coverageLostDate!=null && !"".equals(coverageLostDate.trim())){

if($person.getBenefits().getBenefitRecord().size()==$count_skip.size()+1){
      Metadata evenDate= EDIUtil.findMetadataInMetadataList($person.getDxMetaData(), "EVENT_DATE" );
          if(evenDate!=null){                    
          evenDate.setValue(coverageLostDate);
            }

}else if(filterBenefits.containsKey(coverageLostDate)){
ArrayList benefitObject= (ArrayList)filterBenefits.get(coverageLostDate);
benefitObject.add(benefitRecord);
filterBenefits.put(coverageLostDate, benefitObject);  
}
else{
  ArrayList benefitObject = new ArrayList();
benefitObject.add(benefitRecord);
  filterBenefits.put(coverageLostDate, benefitObject);
}
}
}
}
        if(!filterBenefits.isEmpty()){
        for(Object entrySetObj :filterBenefits.entrySet()) {
        Map.Entry entry = (Map.Entry) entrySetObj;
           ArrayList benefitList = (ArrayList) entry.getValue();
           String coverageEndDate=(String)entry.getKey();  
          BFEnrollmentPerson person=  TransactionHistoryCloneUtil.copy(BFEnrollmentPerson.class, $person);            
          Metadata evenDate= EDIUtil.findMetadataInMetadataList(person.getDxMetaData(), "EVENT_DATE" );
          if(evenDate!=null){
          evenDate.setValue(formatDateToUse(coverageEndDate));
           }
           person.getBenefits().getBenefitRecord().clear();
          person.getBenefits().getBenefitRecord().addAll(benefitList);        
          $person.getBenefits().getBenefitRecord().removeAll(benefitList);          
          $latestRequestedData.getPerson().add(person);
        }    
         }
       
         if($person.getBenefits().getBenefitRecord().size()==$count_skip.size()){
             $latestRequestedData.getPerson().remove($person);          
    }      
         filterBenefits.clear();
         filterBenefits=null;
       
    end

No comments:

Post a Comment