use of org.hl7.fhir.r4.model.ExplanationOfBenefit.CareTeamComponent in project beneficiary-fhir-data by CMSgov.
the class DMEClaimTransformerV2 method handleClaimLines.
private static void handleClaimLines(DMEClaim claimGroup, ExplanationOfBenefit eob, Optional<Boolean> includeTaxNumbers) {
for (DMEClaimLine line : claimGroup.getLines()) {
ItemComponent item = TransformerUtilsV2.addItem(eob);
// Override the default sequence
// CLM_LINE_NUM => item.sequence
item.setSequence(line.getLineNumber().intValue());
// add an extension for the provider billing number as there is not a good place
// to map this in the existing FHIR specification
// PRVDR_NUM => ExplanationOfBenefit.provider.value
line.getProviderBillingNumber().ifPresent(c -> item.addExtension(TransformerUtilsV2.createExtensionIdentifier(CcwCodebookVariable.SUPLRNUM, line.getProviderBillingNumber())));
// PRVDR_NPI => ExplanationOfBenefit.careTeam.provider
Optional<CareTeamComponent> performing = TransformerUtilsV2.addCareTeamMember(eob, item, C4BBPractitionerIdentifierType.NPI, C4BBClaimProfessionalAndNonClinicianCareTeamRole.PERFORMING, line.getProviderNPI());
// Update the responsible flag
performing.ifPresent(p -> {
p.setResponsible(true);
// PRVDR_SPCLTY => ExplanationOfBenefit.careTeam.qualification
p.setQualification(TransformerUtilsV2.createCodeableConcept(eob, CcwCodebookVariable.PRVDR_SPCLTY, line.getProviderSpecialityCode()));
// PRTCPTNG_IND_CD => ExplanationOfBenefit.careTeam.extension
p.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.PRTCPTNG_IND_CD, line.getProviderParticipatingIndCode()));
});
// PRVDR_STATE_CD => ExplanationOfBenefit.item.location.extension
if (item.getLocation() != null) {
item.getLocation().addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.PRVDR_STATE_CD, line.getProviderStateCode()));
}
// HCPCS_CD => ExplanationOfBenefit.item.productOrService
// HCPCS_1ST_MDFR_CD => ExplanationOfBenefit.item.modifier
// HCPCS_2ND_MDFR_CD => ExplanationOfBenefit.item.modifier
// HCPCS_3RD_MDFR_CD => ExplanationOfBenefit.item.modifier
// HCPCS_4Th_MDFR_CD => ExplanationOfBenefit.item.modifier
TransformerUtilsV2.mapHcpcs(eob, item, line.getHcpcsCode(), claimGroup.getHcpcsYearCode(), Arrays.asList(line.getHcpcsInitialModifierCode(), line.getHcpcsSecondModifierCode(), line.getHcpcsThirdModifierCode(), line.getHcpcsFourthModifierCode()));
if (includeTaxNumbers.orElse(false)) {
item.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.TAX_NUM, line.getProviderTaxNumber()));
}
// REV_CNTR_PRVDR_PMT_AMT => ExplanationOfBenefit.item.adjudication
TransformerUtilsV2.addAdjudication(item, TransformerUtilsV2.createAdjudicationAmtSlice(CcwCodebookVariable.REV_CNTR_PRVDR_PMT_AMT, C4BBAdjudication.PAID_TO_PROVIDER, line.getProviderPaymentAmount()));
// TODO - check w/jack if this is right ELIGIBLE
// LINE_PRMRY_ALOWD_CHRG_AMT => ExplanationOfBenefit.item.adjudication.value
TransformerUtilsV2.addAdjudication(item, TransformerUtilsV2.createAdjudicationAmtSlice(CcwCodebookVariable.LINE_PRMRY_ALOWD_CHRG_AMT, C4BBAdjudication.ELIGIBLE, line.getPrimaryPayerAllowedChargeAmount()));
// LINE_DME_PRCHS_PRICE_AMT => ExplanationOfBenefit.item.adjudication.value
TransformerUtilsV2.addAdjudication(item, TransformerUtilsV2.createAdjudicationAmtSlice(CcwCodebookVariable.LINE_DME_PRCHS_PRICE_AMT, C4BBAdjudication.SUBMITTED, line.getPurchasePriceAmount()));
// DMERC_LINE_SCRN_SVGS_AMT => ExplanationOfBenefit.item.extension
line.getScreenSavingsAmount().ifPresent(c -> item.addExtension(// TODO should this be an adjudication?
TransformerUtilsV2.createExtensionQuantity(CcwCodebookVariable.DMERC_LINE_SCRN_SVGS_AMT, line.getScreenSavingsAmount())));
// DMERC_LINE_MTUS_CNT => ExplanationOfBenefit.item.extension
Extension mtusQuantityExtension = TransformerUtilsV2.createExtensionQuantity(CcwCodebookVariable.DMERC_LINE_MTUS_CNT, line.getMtusCount());
item.addExtension(mtusQuantityExtension);
// DMERC_LINE_MTUS_CD => ExplanationOfBenefit.item.extension
if (line.getMtusCode().isPresent()) {
Quantity mtusQuantity = (Quantity) mtusQuantityExtension.getValue();
TransformerUtilsV2.setQuantityUnitInfo(CcwCodebookVariable.DMERC_LINE_MTUS_CD, line.getMtusCode(), eob, mtusQuantity);
}
// DMERC_LINE_PRCNG_STATE_CD => ExplanationOfBenefit.item.extension
line.getPricingStateCode().ifPresent(c -> item.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.DMERC_LINE_PRCNG_STATE_CD, line.getPricingStateCode())));
// DMERC_LINE_SUPPLR_TYPE_CD => ExplanationOfBenefit.item.extension
line.getSupplierTypeCode().ifPresent(c -> item.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.DMERC_LINE_SUPPLR_TYPE_CD, line.getSupplierTypeCode())));
// Common item level fields between Carrier and DME
// LINE_NUM => ExplanationOfBenefit.item.sequence
// LINE_SRVC_CNT => ExplanationOfBenefit.item.quantity
// LINE_CMS_TYPE_SRVC_CD => ExplanationOfBenefit.item.category
// LINE_PLACE_OF_SRVC_CD => ExplanationOfBenefit.item.location
// LINE_1ST_EXPNS_DT => ExplanationOfBenefit.item.servicedPeriod
// LINE_LAST_EXPNS_DT => ExplanationOfBenefit.item.servicedPeriod
// LINE_NCH_PMT_AMT => ExplanationOfBenefit.item.adjudication
// LINE_PMT_80_100_CD => ExplanationOfBenefit.item.adjudication.extension
// PAID_TO_PATIENT => ExplanationOfBenefit.item.adjudication
// LINE_PRVDR_PMT_AMT => ExplanationOfBenefit.item.adjudication
// LINE_BENE_PTB_DDCTBL_AMT => ExplanationOfBenefit.item.adjudication
// LINE_BENE_PRMRY_PYR_CD => ExplanationOfBenefit.item.extension
// LINE_BENE_PRMRY_PYR_PD_AMT => ExplanationOfBenefit.item.adjudication
// BETOS_CD => ExplanationOfBenefit.item.extension
// LINE_COINSRNC_AMT => ExplanationOfBenefit.item.adjudication
// LINE_SBMTD_CHRG_AMT => ExplanationOfBenefit.item.adjudication
// LINE_ALOWD_CHRG_AMT => ExplanationOfBenefit.item.adjudication
// LINE_BENE_PRMRY_PYR_CD => ExplanationOfBenefit.item.extension
// LINE_SERVICE_DEDUCTIBLE => ExplanationOfBenefit.item.extension
// LINE_HCT_HGB_TYPE_CD => Observation.code
// LINE_HCT_HGB_RSLT_NUM => Observation.value
// LINE_NDC_CD => ExplanationOfBenefit.item.productOrService
// LINE_BENE_PMT_AMT => ExplanationOfBenefit.item.adjudication.value
// LINE_PRCSG_IND_CD => ExplanationOfBenefit.item.extension
// LINE_DME_PRCHS_PRICE_AMT => ExplanationOfBenefit.item.adjudication.value
TransformerUtilsV2.mapEobCommonItemCarrierDME(item, eob, claimGroup.getClaimId(), item.getSequence(), line.getServiceCount(), line.getPlaceOfServiceCode(), line.getFirstExpenseDate(), line.getLastExpenseDate(), line.getBeneficiaryPaymentAmount(), line.getProviderPaymentAmount(), line.getBeneficiaryPartBDeductAmount(), line.getPrimaryPayerCode(), line.getPrimaryPayerPaidAmount(), line.getBetosCode(), line.getPaymentAmount(), line.getPaymentCode(), line.getCoinsuranceAmount(), line.getSubmittedChargeAmount(), line.getAllowedChargeAmount(), line.getProcessingIndicatorCode(), line.getServiceDeductibleCode(), line.getHctHgbTestTypeCode(), line.getHctHgbTestResult(), line.getCmsServiceTypeCode(), line.getNationalDrugCode());
// LINE_ICD_DGNS_CD => ExplanationOfBenefit.item.diagnosisSequence
// LINE_ICD_DGNS_VRSN_CD => ExplanationOfBenefit.item.diagnosisSequence
DiagnosisUtilV2.addDiagnosisLink(eob, item, Diagnosis.from(line.getDiagnosisCode(), line.getDiagnosisCodeVersion(), DiagnosisLabel.OTHER), ClaimTypeV2.CARRIER);
// PRVDR_STATE_CD => ExplanationOfBenefit.item.location.extension
if (line.getProviderStateCode() != null) {
item.getLocation().addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.PRVDR_STATE_CD, line.getProviderStateCode()));
}
// LINE_BENE_PRMRY_PYR_CD
// claimLine.getPrimaryPayerCode()) => ExplanationOfBenefit.item.extension
line.getPrimaryPayerCode().ifPresent(c -> item.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.LINE_BENE_PRMRY_PYR_CD, line.getPrimaryPayerCode())));
// LINE_BENE_PMT_AMT
// claimLine.getBeneficiaryPaymentAmount() => ExplanationOfBenefit.item.adjudication.value
TransformerUtilsV2.addAdjudication(item, TransformerUtilsV2.createAdjudicationAmtSlice(CcwCodebookVariable.LINE_BENE_PMT_AMT, C4BBAdjudication.PAID_TO_PROVIDER, line.getPurchasePriceAmount()));
// LINE_DME_PRCHS_PRICE_AMT
// claimLine.getPurchasePriceAmount() => ExplanationOfBenefit.item.adjudication.value
TransformerUtilsV2.addAdjudication(item, TransformerUtilsV2.createAdjudicationAmtSlice(CcwCodebookVariable.LINE_DME_PRCHS_PRICE_AMT, C4BBAdjudication.SUBMITTED, line.getPurchasePriceAmount()));
}
}
use of org.hl7.fhir.r4.model.ExplanationOfBenefit.CareTeamComponent in project beneficiary-fhir-data by CMSgov.
the class CarrierClaimTransformerV2 method transformClaim.
/**
* @param claimGroup the CCW {@link CarrierClaim} to transform
* @return a FHIR {@link ExplanationOfBenefit} resource that represents the specified {@link
* CarrierClaim}
*/
private static ExplanationOfBenefit transformClaim(CarrierClaim claimGroup, Optional<Boolean> includeTaxNumbers) {
ExplanationOfBenefit eob = new ExplanationOfBenefit();
// Required values not directly mapped
eob.getMeta().addProfile(ProfileConstants.C4BB_EOB_NONCLINICIAN_PROFILE_URL);
// TODO: ExplanationOfBenefit.outcome is a required field. Needs to be mapped.
// eob.setOutcome(?)
// Common group level fields between all claim types
// Claim Type + Claim ID => ExplanationOfBenefit.id
// CLM_ID => ExplanationOfBenefit.identifier
// CLM_GRP_ID => ExplanationOfBenefit.identifier
// BENE_ID + Coverage Type => ExplanationOfBenefit.insurance.coverage
// (reference)
// BENE_ID => ExplanationOfBenefit.patient (reference)
// FINAL_ACTION => ExplanationOfBenefit.status
// CLM_FROM_DT => ExplanationOfBenefit.billablePeriod.start
// CLM_THRU_DT => ExplanationOfBenefit.billablePeriod.end
// CLM_PMT_AMT => ExplanationOfBenefit.payment.amount
TransformerUtilsV2.mapEobCommonClaimHeaderData(eob, claimGroup.getClaimId(), claimGroup.getBeneficiaryId(), ClaimTypeV2.CARRIER, claimGroup.getClaimGroupId().toPlainString(), MedicareSegment.PART_B, Optional.of(claimGroup.getDateFrom()), Optional.of(claimGroup.getDateThrough()), Optional.of(claimGroup.getPaymentAmount()), claimGroup.getFinalAction());
// NCH_WKLY_PROC_DT => ExplanationOfBenefit.supportinginfo.timingDate
TransformerUtilsV2.addInformation(eob, TransformerUtilsV2.createInformationRecievedDateSlice(eob, CcwCodebookVariable.NCH_WKLY_PROC_DT, Optional.of(claimGroup.getWeeklyProcessDate())));
// map eob type codes into FHIR
// NCH_CLM_TYPE_CD => ExplanationOfBenefit.type.coding
// EOB Type => ExplanationOfBenefit.type.coding
// Claim Type (Professional) => ExplanationOfBenefit.type.coding
// NCH_NEAR_LINE_REC_IDENT_CD => ExplanationOfBenefit.extension
TransformerUtilsV2.mapEobType(eob, ClaimTypeV2.CARRIER, Optional.of(claimGroup.getNearLineRecordIdCode()), Optional.of(claimGroup.getClaimTypeCode()));
// CARR_CLM_PRMRY_PYR_PD_AMT => ExplanationOfBenefit.total.amount
TransformerUtilsV2.addTotal(eob, TransformerUtilsV2.createTotalAdjudicationAmountSlice(eob, CcwCodebookVariable.CLM_TOT_CHRG_AMT, C4BBAdjudication.PRIOR_PAYER_PAID, claimGroup.getPrimaryPayerPaidAmount()));
// Common group level fields between Carrier and DME
// BENE_ID =>
// CARR_NUM => ExplanationOfBenefit.extension
// CLM_CLNCL_TRIL_NUM => ExplanationOfBenefit.extension
// CARR_CLM_CASH_DDCTBL_APLD_AMT => ExplanationOfBenefit.benefitBalance.financial
// CARR_CLM_PMT_DNL_CD => ExplanationOfBenefit.extension
// RFR_PHYSN_NPI => ExplanationOfBenefit.referral.identifier
// => ExplanationOfBenefit.careteam.provider
// RFR_PHYSN_UPIN => ExplanationOfBenefit.referral.identifier
// => ExplanationOfBenefit.careteam.provider
// CARR_CLM_PRVDR_ASGNMT_IND_SW => ExplanationOfBenefit.extension
// NCH_CLM_PRVDR_PMT_AMT => ExplanationOfBenefit.benefitBalance.financial
// NCH_CLM_BENE_PMT_AMT => ExplanationOfBenefit.benefitBalance.financial
// NCH_CARR_CLM_SBMTD_CHRG_AMT => ExplanationOfBenefit.benefitBalance.financial
// NCH_CARR_CLM_ALOWD_AMT => ExplanationOfBenefit.benefitBalance.financial
// CLM_DISP_CD => ExplanationOfBenefit.disposition
// CARR_CLM_CNTL_NUM => ExplanationOfBenefit.extension
TransformerUtilsV2.mapEobCommonGroupCarrierDME(eob, claimGroup.getBeneficiaryId(), claimGroup.getCarrierNumber(), claimGroup.getClinicalTrialNumber(), claimGroup.getBeneficiaryPartBDeductAmount(), claimGroup.getPaymentDenialCode(), claimGroup.getReferringPhysicianNpi(), claimGroup.getReferringPhysicianUpin(), claimGroup.getProviderAssignmentIndicator(), claimGroup.getProviderPaymentAmount(), claimGroup.getBeneficiaryPaymentAmount(), claimGroup.getSubmittedChargeAmount(), claimGroup.getAllowedChargeAmount(), claimGroup.getClaimDispositionCode(), claimGroup.getClaimCarrierControlNumber());
// ICD_DGNS_VRSN_CD(1-12) => diagnosis.diagnosisCodeableConcept
for (Diagnosis diagnosis : DiagnosisUtilV2.extractDiagnoses(claimGroup)) {
DiagnosisUtilV2.addDiagnosisCode(eob, diagnosis, ClaimTypeV2.CARRIER);
}
// CARR_CLM_RFRNG_PIN_NUM => ExplanationOfBenefit.careteam.provider
TransformerUtilsV2.addCareTeamMember(eob, C4BBPractitionerIdentifierType.NPI, C4BBClaimProfessionalAndNonClinicianCareTeamRole.REFERRING, Optional.ofNullable(claimGroup.getReferringProviderIdNumber()));
// CARR_CLM_ENTRY_CD => ExplanationOfBenefit.extension
eob.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.CARR_CLM_ENTRY_CD, claimGroup.getClaimEntryCode()));
// Process line items
for (CarrierClaimLine line : claimGroup.getLines()) {
ItemComponent item = eob.addItem();
// LINE_NUM => ExplanationOfBenefit.item.sequence
item.setSequence(line.getLineNumber().intValue());
// PRF_PHYSN_NPI => ExplanationOfBenefit.careTeam.provider
Optional<CareTeamComponent> performing = TransformerUtilsV2.addCareTeamMember(eob, item, C4BBPractitionerIdentifierType.NPI, C4BBClaimProfessionalAndNonClinicianCareTeamRole.PERFORMING, line.getPerformingPhysicianNpi());
// Fall back to UPIN if NPI not present
if (!line.getPerformingPhysicianNpi().isPresent()) {
performing = TransformerUtilsV2.addCareTeamMember(eob, item, C4BBPractitionerIdentifierType.UPIN, C4BBClaimProfessionalAndNonClinicianCareTeamRole.PERFORMING, line.getPerformingPhysicianUpin());
}
// Update the responsible flag
performing.ifPresent(p -> {
p.setResponsible(true);
// PRVDR_SPCLTY => ExplanationOfBenefit.careTeam.qualification
p.setQualification(TransformerUtilsV2.createCodeableConcept(eob, CcwCodebookVariable.PRVDR_SPCLTY, line.getProviderSpecialityCode()));
// CARR_LINE_PRVDR_TYPE_CD => ExplanationOfBenefit.careTeam.extension
p.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.CARR_LINE_PRVDR_TYPE_CD, line.getProviderTypeCode()));
// PRTCPTNG_IND_CD => ExplanationOfBenefit.careTeam.extension
p.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.PRTCPTNG_IND_CD, line.getProviderParticipatingIndCode()));
});
// ORG_NPI_NUM => ExplanationOfBenefit.careTeam.provider
TransformerUtilsV2.addCareTeamMember(eob, item, C4BBPractitionerIdentifierType.NPI, C4BBClaimProfessionalAndNonClinicianCareTeamRole.PRIMARY, line.getOrganizationNpi());
// CARR_LINE_RDCD_PMT_PHYS_ASTN_C => ExplanationOfBenefit.item.adjudication
TransformerUtilsV2.addAdjudication(item, TransformerUtilsV2.createAdjudicationDenialReasonSlice(eob, CcwCodebookVariable.CARR_LINE_RDCD_PMT_PHYS_ASTN_C, String.valueOf(line.getReducedPaymentPhysicianAsstCode())));
// HCPCS_CD => ExplanationOfBenefit.item.productOrService
// HCPCS_1ST_MDFR_CD => ExplanationOfBenefit.item.modifier
// HCPCS_2ND_MDFR_CD => ExplanationOfBenefit.item.modifier
// CARR_CLM_HCPCS_YR_CD => ExplanationOfBenefit.item.modifier.version
TransformerUtilsV2.mapHcpcs(eob, item, line.getHcpcsCode(), claimGroup.getHcpcsYearCode(), Arrays.asList(line.getHcpcsInitialModifierCode(), line.getHcpcsSecondModifierCode()));
// tax num should be as a extension
if (includeTaxNumbers.orElse(false)) {
item.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.TAX_NUM, line.getProviderTaxNumber()));
}
// CARR_LINE_ANSTHSA_UNIT_CNT => ExplanationOfBenefit.item.extension
if (line.getAnesthesiaUnitCount().compareTo(BigDecimal.ZERO) > 0) {
item.addExtension(TransformerUtilsV2.createExtensionQuantity(CcwCodebookVariable.CARR_LINE_ANSTHSA_UNIT_CNT, line.getAnesthesiaUnitCount()));
}
// CARR_LINE_MTUS_CNT => ExplanationOfBenefit.item.extension
if (!line.getMtusCount().equals(BigDecimal.ZERO)) {
item.addExtension(TransformerUtilsV2.createExtensionQuantity(CcwCodebookVariable.CARR_LINE_MTUS_CNT, line.getMtusCount()));
}
// CARR_LINE_MTUS_CD => ExplanationOfBenefit.item.extension
line.getMtusCode().ifPresent(code -> item.addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.CARR_LINE_MTUS_CNT, code)));
// Common item level fields between Carrier and DME
// LINE_SRVC_CNT => ExplanationOfBenefit.item.quantity
// LINE_CMS_TYPE_SRVC_CD => ExplanationOfBenefit.item.category
// LINE_PLACE_OF_SRVC_CD => ExplanationOfBenefit.item.location
// BETOS_CD => ExplanationOfBenefit.item.extension
// LINE_1ST_EXPNS_DT => ExplanationOfBenefit.item.servicedPeriod
// LINE_LAST_EXPNS_DT => ExplanationOfBenefit.item.servicedPeriod
// LINE_NCH_PMT_AMT => ExplanationOfBenefit.item.adjudication
// LINE_PMT_80_100_CD => ExplanationOfBenefit.item.adjudication.extension
// PAID_TO_PATIENT => ExplanationOfBenefit.item.adjudication
// LINE_PRVDR_PMT_AMT => ExplanationOfBenefit.item.adjudication
// LINE_BENE_PTB_DDCTBL_AMT => ExplanationOfBenefit.item.adjudication
// LINE_BENE_PRMRY_PYR_CD => ExplanationOfBenefit.item.extension
// LINE_BENE_PRMRY_PYR_PD_AMT => ExplanationOfBenefit.item.adjudication
// LINE_COINSRNC_AMT => ExplanationOfBenefit.item.adjudication
// LINE_SBMTD_CHRG_AMT => ExplanationOfBenefit.item.adjudication
// LINE_ALOWD_CHRG_AMT => ExplanationOfBenefit.item.adjudication
// LINE_BENE_PRMRY_PYR_CD => ExplanationOfBenefit.item.extension
// LINE_SERVICE_DEDUCTIBLE => ExplanationOfBenefit.item.extension
// LINE_HCT_HGB_TYPE_CD => Observation.code
// LINE_HCT_HGB_RSLT_NUM => Observation.value
// LINE_NDC_CD => ExplanationOfBenefit.item.productOrService
TransformerUtilsV2.mapEobCommonItemCarrierDME(item, eob, claimGroup.getClaimId(), item.getSequence(), line.getServiceCount(), line.getPlaceOfServiceCode(), line.getFirstExpenseDate(), line.getLastExpenseDate(), line.getBeneficiaryPaymentAmount(), line.getProviderPaymentAmount(), line.getBeneficiaryPartBDeductAmount(), line.getPrimaryPayerCode(), line.getPrimaryPayerPaidAmount(), line.getBetosCode(), line.getPaymentAmount(), line.getPaymentCode(), line.getCoinsuranceAmount(), line.getSubmittedChargeAmount(), line.getAllowedChargeAmount(), line.getProcessingIndicatorCode(), line.getServiceDeductibleCode(), line.getHctHgbTestTypeCode(), line.getHctHgbTestResult(), line.getCmsServiceTypeCode(), line.getNationalDrugCode());
// LINE_ICD_DGNS_CD => ExplanationOfBenefit.item.diagnosisSequence
// LINE_ICD_DGNS_VRSN_CD => ExplanationOfBenefit.item.diagnosisSequence
DiagnosisUtilV2.addDiagnosisLink(eob, item, Diagnosis.from(line.getDiagnosisCode(), line.getDiagnosisCodeVersion(), DiagnosisLabel.OTHER), ClaimTypeV2.CARRIER);
// PRVDR_STATE_CD => ExplanationOfBenefit.item.location.extension
line.getProviderStateCode().ifPresent(code -> item.getLocation().addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.PRVDR_STATE_CD, code)));
// PRVDR_ZIP => ExplanationOfBenefit.item.location.extension
line.getProviderZipCode().ifPresent(code -> item.getLocation().addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.PRVDR_ZIP, code)));
// CARR_LINE_PRCNG_LCLTY_CD => ExplanationOfBenefit.item.location.extension
item.getLocation().addExtension(TransformerUtilsV2.createExtensionCoding(eob, CcwCodebookVariable.CARR_LINE_PRCNG_LCLTY_CD, line.getLinePricingLocalityCode()));
// CARR_LINE_CLIA_LAB_NUM => ExplanationOfBenefit.item.location.extension
line.getCliaLabNumber().ifPresent(num -> item.getLocation().addExtension(TransformerUtilsV2.createExtensionIdentifier(CcwCodebookVariable.CARR_LINE_CLIA_LAB_NUM, num)));
}
TransformerUtilsV2.setLastUpdated(eob, claimGroup.getLastUpdated());
return eob;
}
use of org.hl7.fhir.r4.model.ExplanationOfBenefit.CareTeamComponent in project beneficiary-fhir-data by CMSgov.
the class TransformerTestUtils method assertCareTeamEquals.
/**
* @param expectedPractitioner {@link CareTeamComponent#getProviderIdentifier)} to find and verify
* @param expectedCareTeamRole the {@link ClaimCareteamrole} for {@link
* CareTeamComponent#getRole)} to find and verify
* @param eob the actual {@link ExplanationOfBenefit}s to verify
*/
static void assertCareTeamEquals(String expectedPractitioner, ClaimCareteamrole expectedCareTeamRole, ExplanationOfBenefit eob) {
CareTeamComponent careTeamEntry = findCareTeamEntryForProviderIdentifier(TransformerConstants.CODING_NPI_US, expectedPractitioner, expectedCareTeamRole, eob.getCareTeam());
assertNotNull(careTeamEntry);
assertCodingEquals(expectedCareTeamRole.getSystem(), expectedCareTeamRole.toCode(), careTeamEntry.getRole().getCodingFirstRep());
}
use of org.hl7.fhir.r4.model.ExplanationOfBenefit.CareTeamComponent in project beneficiary-fhir-data by CMSgov.
the class CarrierClaimTransformerTest method assertMatches.
/**
* Verifies that the {@link ExplanationOfBenefit} "looks like" it should, if it were produced from
* the specified {@link CarrierClaim}.
*
* @param claim the {@link CarrierClaim} that the {@link ExplanationOfBenefit} was generated from
* @param eob the {@link ExplanationOfBenefit} that was generated from the specified {@link
* CarrierClaim}
* @param includedTaxNumbers whether or not to include tax numbers are expected to be included in
* the result (see {@link
* ExplanationOfBenefitResourceProvider#HEADER_NAME_INCLUDE_TAX_NUMBERS}, defaults to <code>
* false</code>)
* @throws FHIRException (indicates test failure)
*/
static void assertMatches(CarrierClaim claim, ExplanationOfBenefit eob, Optional<Boolean> includedTaxNumbers) throws FHIRException {
// Test to ensure group level fields between all claim types match
TransformerTestUtils.assertEobCommonClaimHeaderData(eob, claim.getClaimId(), claim.getBeneficiaryId(), ClaimType.CARRIER, claim.getClaimGroupId().toPlainString(), MedicareSegment.PART_B, Optional.of(claim.getDateFrom()), Optional.of(claim.getDateThrough()), Optional.of(claim.getPaymentAmount()), claim.getFinalAction());
// Test to ensure common group fields between Carrier and DME match
TransformerTestUtils.assertEobCommonGroupCarrierDMEEquals(eob, claim.getBeneficiaryId(), claim.getCarrierNumber(), claim.getClinicalTrialNumber(), claim.getBeneficiaryPartBDeductAmount(), claim.getPaymentDenialCode(), claim.getReferringPhysicianNpi(), claim.getProviderAssignmentIndicator(), claim.getProviderPaymentAmount(), claim.getBeneficiaryPaymentAmount(), claim.getSubmittedChargeAmount(), claim.getAllowedChargeAmount());
assertEquals(5, eob.getDiagnosis().size());
assertEquals(1, eob.getItem().size());
TransformerTestUtils.assertAdjudicationTotalAmountEquals(CcwCodebookVariable.PRPAYAMT, claim.getPrimaryPayerPaidAmount(), eob);
CarrierClaimLine claimLine1 = claim.getLines().get(0);
ItemComponent eobItem0 = eob.getItem().get(0);
assertEquals(claimLine1.getLineNumber(), new BigDecimal(eobItem0.getSequence()));
TransformerTestUtils.assertCareTeamEquals(claimLine1.getPerformingPhysicianNpi().get(), ClaimCareteamrole.PRIMARY, eob);
CareTeamComponent performingCareTeamEntry = TransformerTestUtils.findCareTeamEntryForProviderNpi(claimLine1.getPerformingPhysicianNpi().get(), eob.getCareTeam());
TransformerTestUtils.assertHasCoding(CcwCodebookVariable.PRVDR_SPCLTY, claimLine1.getProviderSpecialityCode(), performingCareTeamEntry.getQualification());
TransformerTestUtils.assertExtensionCodingEquals(CcwCodebookVariable.CARR_LINE_PRVDR_TYPE_CD, claimLine1.getProviderTypeCode(), performingCareTeamEntry);
TransformerTestUtils.assertExtensionCodingEquals(CcwCodebookVariable.PRTCPTNG_IND_CD, claimLine1.getProviderParticipatingIndCode(), performingCareTeamEntry);
TransformerTestUtils.assertExtensionCodingEquals(performingCareTeamEntry, TransformerConstants.CODING_NPI_US, TransformerConstants.CODING_NPI_US, "" + claimLine1.getOrganizationNpi().get());
CareTeamComponent taxNumberCareTeamEntry = TransformerTestUtils.findCareTeamEntryForProviderTaxNumber(claimLine1.getProviderTaxNumber(), eob.getCareTeam());
if (includedTaxNumbers.orElse(false)) {
assertNotNull(taxNumberCareTeamEntry);
} else {
assertNull(taxNumberCareTeamEntry);
}
TransformerTestUtils.assertExtensionCodingEquals(CcwCodebookVariable.PRVDR_STATE_CD, claimLine1.getProviderStateCode(), eobItem0.getLocation());
TransformerTestUtils.assertExtensionCodingEquals(CcwCodebookVariable.PRVDR_STATE_CD, claimLine1.getProviderStateCode(), eobItem0.getLocation());
TransformerTestUtils.assertExtensionCodingEquals(CcwCodebookVariable.CARR_LINE_PRCNG_LCLTY_CD, claimLine1.getLinePricingLocalityCode(), eobItem0.getLocation());
TransformerTestUtils.assertHasCoding(TransformerConstants.CODING_SYSTEM_HCPCS, "" + claim.getHcpcsYearCode().get(), null, claimLine1.getHcpcsCode().get(), eobItem0.getService().getCoding());
assertEquals(1, eobItem0.getModifier().size());
TransformerTestUtils.assertHcpcsCodes(eobItem0, claimLine1.getHcpcsCode(), claimLine1.getHcpcsInitialModifierCode(), claimLine1.getHcpcsSecondModifierCode(), claim.getHcpcsYearCode(), 0);
if (claimLine1.getAnesthesiaUnitCount().compareTo(BigDecimal.ZERO) > 0) {
TransformerTestUtils.assertExtensionQuantityEquals(CcwCodebookVariable.CARR_LINE_ANSTHSA_UNIT_CNT, claimLine1.getAnesthesiaUnitCount(), eobItem0.getService());
}
TransformerTestUtils.assertExtensionCodingEquals(CcwCodebookVariable.CARR_LINE_MTUS_CD, claimLine1.getMtusCode(), eobItem0);
TransformerTestUtils.assertExtensionQuantityEquals(CcwCodebookVariable.CARR_LINE_MTUS_CNT, claimLine1.getMtusCount(), eobItem0);
TransformerTestUtils.assertAdjudicationReasonEquals(CcwCodebookVariable.CARR_LINE_RDCD_PMT_PHYS_ASTN_C, claimLine1.getReducedPaymentPhysicianAsstCode(), eobItem0.getAdjudication());
TransformerTestUtils.assertExtensionIdentifierEquals(CcwCodebookVariable.CARR_LINE_CLIA_LAB_NUM, claimLine1.getCliaLabNumber(), eobItem0.getLocation());
// verify {@link
// TransformerUtils#mapEobType(CodeableConcept,ClaimType,Optional,Optional)}
// method worked as expected for this claim type
TransformerTestUtils.assertMapEobType(eob.getType(), ClaimType.CARRIER, Optional.of(org.hl7.fhir.dstu3.model.codesystems.ClaimType.PROFESSIONAL), Optional.of(claim.getNearLineRecordIdCode()), Optional.of(claim.getClaimTypeCode()));
// Test to ensure common item fields between Carrier and DME match
TransformerTestUtils.assertEobCommonItemCarrierDMEEquals(eobItem0, eob, claimLine1.getServiceCount(), claimLine1.getPlaceOfServiceCode(), claimLine1.getFirstExpenseDate(), claimLine1.getLastExpenseDate(), claimLine1.getBeneficiaryPaymentAmount(), claimLine1.getProviderPaymentAmount(), claimLine1.getBeneficiaryPartBDeductAmount(), claimLine1.getPrimaryPayerCode(), claimLine1.getPrimaryPayerPaidAmount(), claimLine1.getBetosCode(), claimLine1.getPaymentAmount(), claimLine1.getPaymentCode(), claimLine1.getCoinsuranceAmount(), claimLine1.getSubmittedChargeAmount(), claimLine1.getAllowedChargeAmount(), claimLine1.getProcessingIndicatorCode(), claimLine1.getServiceDeductibleCode(), claimLine1.getDiagnosisCode(), claimLine1.getDiagnosisCodeVersion(), claimLine1.getHctHgbTestTypeCode(), claimLine1.getHctHgbTestResult(), claimLine1.getCmsServiceTypeCode(), claimLine1.getNationalDrugCode());
// Test lastUpdated
TransformerTestUtils.assertLastUpdatedEquals(claim.getLastUpdated(), eob);
}
use of org.hl7.fhir.r4.model.ExplanationOfBenefit.CareTeamComponent in project beneficiary-fhir-data by CMSgov.
the class PartDEventTransformerV2Test method shouldHaveCareTeamMembers.
@Test
public void shouldHaveCareTeamMembers() {
// Single member
CareTeamComponent member = TransformerTestUtilsV2.findCareTeamBySequence(1, eob.getCareTeam());
assertEquals("1750384806", member.getProvider().getIdentifier().getValue());
}
Aggregations