Skip to content

Commit 1ebfcb3

Browse files
BFD-4474: add clm rndrg prvdr tax num Changes to add IncludeTaxHeader and use boolean to display the header accordingly in the FHIR output for clm_rndrg_prvdr_tax_num (#3161)
1 parent 8465b05 commit 1ebfcb3

23 files changed

Lines changed: 410 additions & 104 deletions
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package gov.cms.bfd.server.ng;
2+
3+
import lombok.Builder;
4+
import lombok.Value;
5+
6+
/** Claim Filter options. */
7+
@Value
8+
@Builder
9+
public class ClaimFilterOptions {
10+
11+
@Builder.Default SamhsaFilterMode samhsaFilterMode = SamhsaFilterMode.EXCLUDE;
12+
13+
@Builder.Default boolean includeTaxNumber = false;
14+
}

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/claim/model/ClaimBase.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package gov.cms.bfd.server.ng.claim.model;
22

3-
import gov.cms.bfd.server.ng.ClaimSecurityStatus;
3+
import gov.cms.bfd.server.ng.ClaimFilterOptions;
44
import gov.cms.bfd.server.ng.beneficiary.model.BeneficiarySimple;
55
import gov.cms.bfd.server.ng.converter.DefaultFalseBooleanConverter;
66
import gov.cms.bfd.server.ng.util.DateUtil;
@@ -64,10 +64,11 @@ public abstract class ClaimBase {
6464
/**
6565
* Convert the claim info to a FHIR ExplanationOfBenefit.
6666
*
67-
* @param securityStatus securityStatus
67+
* @param options claim filter options
68+
* @param claimState computed claim state
6869
* @return ExplanationOfBenefit
6970
*/
70-
public ExplanationOfBenefit toFhir(ClaimSecurityStatus securityStatus) {
71+
public ExplanationOfBenefit toFhir(ClaimFilterOptions options, ClaimState claimState) {
7172
var eob = new ExplanationOfBenefit();
7273
eob.setId(String.valueOf(claimUniqueId));
7374
eob.setPatient(PatientReferenceFactory.toFhir(beneficiary.getXrefSk()));
@@ -77,7 +78,8 @@ public ExplanationOfBenefit toFhir(ClaimSecurityStatus securityStatus) {
7778
claimTypeCode.toFhirSubtype().ifPresent(eob::setSubType);
7879
claimTypeCode.toFhirAdjudication().ifPresent(eob::addAdjudication);
7980

80-
eob.setMeta(meta.toFhir(claimTypeCode, securityStatus, finalAction, getMetaSourceSk()));
81+
eob.setMeta(
82+
meta.toFhir(claimTypeCode, claimState.getSecurityStatus(), finalAction, getMetaSourceSk()));
8183
identifiers.toFhir(claimTypeCode).forEach(eob::addIdentifier);
8284
identifiers.toFhirRelatedClaim(claimTypeCode).ifPresent(eob::addRelated);
8385
eob.setBillablePeriod(billablePeriod.toFhir());

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/claim/model/ClaimInstitutionalBase.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import static gov.cms.bfd.server.ng.claim.model.ClaimDiagnosisType.*;
44

5-
import gov.cms.bfd.server.ng.ClaimSecurityStatus;
5+
import gov.cms.bfd.server.ng.ClaimFilterOptions;
66
import gov.cms.bfd.server.ng.util.SequenceGenerator;
77
import jakarta.persistence.Column;
88
import jakarta.persistence.Embedded;
@@ -17,6 +17,7 @@
1717
/** Shared base for institutional claim types (NCH and Shared Systems variants). */
1818
@MappedSuperclass
1919
@Getter
20+
@SuppressWarnings("java:S6539")
2021
public abstract class ClaimInstitutionalBase extends ClaimBase {
2122

2223
@Column(name = "clm_cntrctr_num")
@@ -83,10 +84,10 @@ public abstract class ClaimInstitutionalBase extends ClaimBase {
8384
protected void applyOutcomeOverride(ExplanationOfBenefit eob) {}
8485

8586
@Override
86-
public ExplanationOfBenefit toFhir(ClaimSecurityStatus securityStatus) {
87-
var eob = super.toFhir(securityStatus);
87+
public ExplanationOfBenefit toFhir(ClaimFilterOptions options, ClaimState claimState) {
88+
var eob = super.toFhir(options, claimState);
8889

89-
addClaimItems(eob);
90+
addClaimItems(eob, options);
9091
addDiagnoses(eob);
9192
addProviders(eob);
9293
applyOutcomeOverride(eob);
@@ -113,11 +114,12 @@ private void addInsurance(ExplanationOfBenefit eob) {
113114
.toList();
114115
}
115116

116-
private void addClaimItems(ExplanationOfBenefit eob) {
117+
private void addClaimItems(ExplanationOfBenefit eob, ClaimFilterOptions options) {
118+
117119
getItems()
118120
.forEach(
119121
item -> {
120-
var claimLine = item.getClaimLine().toFhirItemComponent();
122+
var claimLine = item.getClaimLine().toFhirItemComponent(options);
121123
var claimContext = getClaimTypeCode().toContext();
122124

123125
claimLine.ifPresent(eob::addItem);

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/claim/model/ClaimLineBase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gov.cms.bfd.server.ng.claim.model;
22

3+
import gov.cms.bfd.server.ng.ClaimFilterOptions;
34
import java.util.List;
45
import java.util.Optional;
56
import org.hl7.fhir.r4.model.ExplanationOfBenefit;
@@ -9,7 +10,7 @@ interface ClaimLineBase {
910

1011
Optional<Observation> toFhirObservation(int bfdRowId);
1112

12-
Optional<ExplanationOfBenefit.ItemComponent> toFhirItemComponent();
13+
Optional<ExplanationOfBenefit.ItemComponent> toFhirItemComponent(ClaimFilterOptions options);
1314

1415
List<ExplanationOfBenefit.SupportingInformationComponent> toFhirSupportingInfo(
1516
SupportingInfoFactory supportingInfoFactory);

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/claim/model/ClaimLineInstitutionalBase.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gov.cms.bfd.server.ng.claim.model;
22

3+
import gov.cms.bfd.server.ng.ClaimFilterOptions;
34
import gov.cms.bfd.server.ng.converter.NonZeroIntConverter;
45
import gov.cms.bfd.server.ng.util.DateUtil;
56
import gov.cms.bfd.server.ng.util.FhirUtil;
@@ -79,7 +80,8 @@ public Optional<Observation> toFhirObservation(int bfdRowId) {
7980
}
8081

8182
@Override
82-
public Optional<ExplanationOfBenefit.ItemComponent> toFhirItemComponent() {
83+
public Optional<ExplanationOfBenefit.ItemComponent> toFhirItemComponent(
84+
ClaimFilterOptions options) {
8385
if (claimLineNumber.isEmpty()) {
8486
return Optional.empty();
8587
}

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/claim/model/ClaimLineProfessionalBase.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gov.cms.bfd.server.ng.claim.model;
22

3+
import gov.cms.bfd.server.ng.ClaimFilterOptions;
34
import gov.cms.bfd.server.ng.converter.NonZeroIntConverter;
45
import gov.cms.bfd.server.ng.util.DateUtil;
56
import jakarta.persistence.AttributeOverride;
@@ -69,7 +70,8 @@ abstract class ClaimLineProfessionalBase implements ClaimLineBase {
6970
@Embedded private ClaimLineProfessionalExtensions extensions;
7071

7172
@Override
72-
public Optional<ExplanationOfBenefit.ItemComponent> toFhirItemComponent() {
73+
public Optional<ExplanationOfBenefit.ItemComponent> toFhirItemComponent(
74+
ClaimFilterOptions options) {
7375
if (claimLineNumber.isEmpty()) {
7476
return Optional.empty();
7577
}
@@ -89,7 +91,7 @@ public Optional<ExplanationOfBenefit.ItemComponent> toFhirItemComponent() {
8991

9092
getAdjudicationCharge().toFhir().forEach(line::addAdjudication);
9193
placeOfServiceCode.map(c -> line.setLocation(c.toFhir()));
92-
getFhirExtensions().forEach(line::addExtension);
94+
getFhirExtensions(options).forEach(line::addExtension);
9395

9496
return Optional.of(line);
9597
}
@@ -122,7 +124,7 @@ public List<ExplanationOfBenefit.SupportingInformationComponent> toFhirSupportin
122124

123125
abstract void populateProductAndQuantity(ExplanationOfBenefit.ItemComponent item);
124126

125-
protected List<Extension> getFhirExtensions() {
126-
return getExtensions().toFhir();
127+
protected List<Extension> getFhirExtensions(ClaimFilterOptions options) {
128+
return getExtensions().toFhir(options);
127129
}
128130
}

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/claim/model/ClaimLineProfessionalExtensions.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package gov.cms.bfd.server.ng.claim.model;
22

3+
import gov.cms.bfd.server.ng.ClaimFilterOptions;
34
import jakarta.persistence.Column;
45
import jakarta.persistence.Embeddable;
6+
import jakarta.persistence.Embedded;
57
import java.util.List;
68
import java.util.Optional;
79
import java.util.stream.Stream;
@@ -26,13 +28,18 @@ public class ClaimLineProfessionalExtensions {
2628
@Column(name = "clm_srvc_ddctbl_sw")
2729
private Optional<ClaimServiceDeductibleCode> serviceDeductibleCode;
2830

29-
List<Extension> toFhir() {
31+
@Embedded ClaimTaxNumberCode claimTaxNumberCode;
32+
33+
List<Extension> toFhir(ClaimFilterOptions options) {
3034
return Stream.of(
3135
supplierTypeCode.map(ClaimSupplierTypeCode::toFhir),
3236
federalTypeOfServiceCode.map(ClaimFederalTypeOfServiceCode::toFhir),
3337
paymentCode.map(ClaimPaymentCode::toFhir),
3438
providerSpecialtyCode.map(ProviderSpecialtyCode::toFhirExtension),
35-
serviceDeductibleCode.map(ClaimServiceDeductibleCode::toFhir))
39+
serviceDeductibleCode.map(ClaimServiceDeductibleCode::toFhir),
40+
options.isIncludeTaxNumber()
41+
? claimTaxNumberCode.toFhir()
42+
: Optional.<Extension>empty())
3643
.flatMap(Optional::stream)
3744
.toList();
3845
}

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/claim/model/ClaimLineProfessionalNch.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gov.cms.bfd.server.ng.claim.model;
22

3+
import gov.cms.bfd.server.ng.ClaimFilterOptions;
34
import gov.cms.bfd.server.ng.converter.NonZeroDoubleConverter;
45
import gov.cms.bfd.server.ng.util.FhirUtil;
56
import gov.cms.bfd.server.ng.util.SystemUrls;
@@ -117,8 +118,8 @@ public List<ExplanationOfBenefit.SupportingInformationComponent> toFhirSupportin
117118
}
118119

119120
@Override
120-
protected List<Extension> getFhirExtensions() {
121-
var extensions = new ArrayList<>(super.getFhirExtensions());
121+
protected List<Extension> getFhirExtensions(ClaimFilterOptions options) {
122+
var extensions = new ArrayList<>(super.getFhirExtensions(options));
122123
extensions.addAll(claimLineProfessionalNchExtensions.toFhir());
123124
return extensions;
124125
}

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/claim/model/ClaimLineRx.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gov.cms.bfd.server.ng.claim.model;
22

3+
import gov.cms.bfd.server.ng.ClaimFilterOptions;
34
import gov.cms.bfd.server.ng.util.DateUtil;
45
import gov.cms.bfd.server.ng.util.FhirUtil;
56
import jakarta.persistence.Column;
@@ -34,7 +35,8 @@ public Optional<Observation> toFhirObservation(int bfdRowId) {
3435
}
3536

3637
@Override
37-
public Optional<ExplanationOfBenefit.ItemComponent> toFhirItemComponent() {
38+
public Optional<ExplanationOfBenefit.ItemComponent> toFhirItemComponent(
39+
ClaimFilterOptions options) {
3840

3941
var line = new ExplanationOfBenefit.ItemComponent();
4042
line.setSequence(1);

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/claim/model/ClaimProfessionalBase.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package gov.cms.bfd.server.ng.claim.model;
22

3-
import gov.cms.bfd.server.ng.ClaimSecurityStatus;
3+
import gov.cms.bfd.server.ng.ClaimFilterOptions;
44
import gov.cms.bfd.server.ng.util.SequenceGenerator;
55
import jakarta.persistence.Column;
66
import jakarta.persistence.Embedded;
@@ -63,12 +63,12 @@ void applyOutcomeOverride(ExplanationOfBenefit eob) {
6363

6464
/** {@inheritDoc} */
6565
@Override
66-
public ExplanationOfBenefit toFhir(ClaimSecurityStatus securityStatus) {
67-
var eob = super.toFhir(securityStatus);
66+
public ExplanationOfBenefit toFhir(ClaimFilterOptions options, ClaimState claimState) {
67+
var eob = super.toFhir(options, claimState);
6868
var diagnosisSequenceGenerator = new SequenceGenerator();
6969
var diagnosisSequenceMap = buildDiagnosisSequences(eob, diagnosisSequenceGenerator);
7070

71-
getItems().forEach(item -> addClaimItemToEob(eob, item, diagnosisSequenceMap));
71+
getItems().forEach(item -> addClaimItemToEob(eob, item, diagnosisSequenceMap, options));
7272
addProviders(eob);
7373
addAllSupportingInfo(eob);
7474
addCareTeam(eob);
@@ -85,9 +85,10 @@ public ExplanationOfBenefit toFhir(ClaimSecurityStatus securityStatus) {
8585
private void addClaimItemToEob(
8686
ExplanationOfBenefit eob,
8787
ClaimItemBase item,
88-
Map<String, List<Integer>> diagnosisSequenceMap) {
88+
Map<String, List<Integer>> diagnosisSequenceMap,
89+
ClaimFilterOptions options) {
8990

90-
var claimLine = item.getClaimLine().toFhirItemComponent();
91+
var claimLine = item.getClaimLine().toFhirItemComponent(options);
9192
claimLine.ifPresent(eob::addItem);
9293

9394
// populates diagnosisSequence only if CLM_LINE_DGNS_CD is present in D-type codes

0 commit comments

Comments
 (0)