Skip to content

Commit b4d7ca7

Browse files
authored
BFD-4728: Only populate a single CLM_CNTL_NUM + populate EOB.related (#3135)
1 parent be32c5f commit b4d7ca7

8 files changed

Lines changed: 373 additions & 32 deletions

File tree

apps/bfd-model-idr/maps/ExplanationOfBenefit-Pharmacy.map

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ group createEOBPharmacy(source src: ExplanationOfBenefitPharmacy, target tgt: BF
5353
src.CLM_UNIQ_ID as claimId -> tgtIdentifier.value = claimId "Set identifier Value";
5454
} "Add CLM_UNIQ_ID as unique identifier";
5555

56+
//We only use CLM_ORIG_CNTL_NUM because it is stable for a submitted PDE, even across deleted PDEs.
5657
src -> tgt.identifier = create('Identifier') as tgtIdentifier then {
5758
src -> tgtIdentifier.system = "https://bluebutton.cms.gov/identifiers/CLM-CNTL-NUM" "set system";
5859
src.CLM_ORIG_CNTL_NUM as claimCntlNum -> tgtIdentifier.value = claimCntlNum "Set identifier Value";

apps/bfd-pipeline-idr/test_samples2/SYNTHETIC_CLM.csv

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ CLM_DT_SGNTR_SK,CLM_UNIQ_ID,CLM_RLT_COND_SGNTR_SK,CLM_TYPE_CD,CLM_SRC_ID,META_SR
33
322823692141,1071939711295,,10,20000,7,2021-09-26,2021-10-03,67289832423923BIX,1,2025-05-30,2025-05-30,9999-12-31,86974,181968400,55,3,0,3,3,X,01211,L,Y,Y,1104867175,1437702123,1942945159,1972944437,1558719914,001500,0.83,77005,815173.13,625244.33,776.8698768765123,189928.8,8.6587654578765,,6.9911829076291,77.3,151.2789573902381,377.9276567879876,96.6890386948091,,207.0781097280107,0,,,,,,916765.73,,225008.1723456788765,,,,9999-12-31,,,,,,2026-01-11 04:43:44.721156,,,,,,,,,A0,03
44
322823692142,1071939711296,616234798483,40,20000,7,2021-09-26,2021-10-03,67289832423923BIX,1,2025-05-30,2025-05-30,9999-12-31,86974,181968400,55,3,0,3,3,X,01211,L,Y,Y,1104867175,1437702123,1942945159,1972944437,1558719914,001500,0.83,75205,815173.13,625244.33,776.87,189928.8,8.66,694.2593027489236,,,95.82,180.88,523.7798679801093,393.0490172830912,8569.4,0,,11.09,,,,82490.85,,450536.56,,,,9999-12-31,,,,,,2025-07-13 04:05:01.400693,2025-08-20 03:57:55.730556,,,,,,,,A0,03
55
322823692143,1071939711297,1699821257,1013,21000,1003,2021-09-26,2021-10-03,67289832423923BIX,1,2025-05-30,2025-05-30,9999-12-31,86974,181968400,55,3,~,3,3,X,01211,,N,Y,1104867175,1437702123,1942945159,1972944437,1558719914,001500,0.83,,815173.13,625244.33,776.87,189928.8,8.66,,,,,,,,,,,,,,,82490.85,,450536.56,,,,9999-12-31,,,,,,,,,,,,,,,A0,03
6-
322823692144,1071939711298,111457034536,2013,21000,1003,2021-09-26,2021-10-03,67289832423923BIX,1,2025-05-30,2025-05-30,9999-12-31,86974,181968400,55,3,~,3,3,X,01211,,Y,Y,1104867175,1437702123,1942945159,1972944437,1558719914,001500,0.83,,815173.13,625244.33,776.87,189928.8,8.66,,,,,,,,,,,,,,,82490.8499963378906,,450536.56,,,,9999-12-31,,,,,,,,,,,,,,,A0,03
7-
271048844531,1409088853949,-3090332935474150314,1,20000,1,2025-08-10,2025-08-12,31646182683546TDF,1,2025-11-12,2025-11-12,2025-10-02,97992,181968400,54,2,1,3,5,D,12401,A,Y,N,,,,,,,,,99813.94,38656.27,1397.69,61157.67,6.96,,,,,,,,,,,,,,,,,,,31646182683546TDF,1649041195,2025-08-11,1437702123,S,Z0001,001,649.73,2026-01-05 04:03:23.920661,,,,,,1649041195,01,01,,03
6+
322823692144,1071939711298,111457034536,2013,21000,1003,2021-09-26,2021-10-03,67289832423923BIX,1,2025-05-30,2025-05-30,9999-12-31,86974,181968400,55,3,~,3,3,X,01211,,Y,Y,1104867175,1437702123,1942945159,1972944437,1558719914,001500,0.83,,815173.13,625244.33,776.87,189928.8,8.66,,,,,,,,,,,,,,,82490.8499963378906,,450536.56,,31646182683541TDF,,9999-12-31,,,,,,,,,,,,,,,A0,03
7+
271048844531,1409088853949,-3090332935474150314,1,20000,1,2025-08-10,2025-08-12,31646182683546TDF,1,2025-11-12,2025-11-12,2025-10-02,97992,181968400,54,2,1,3,5,D,12401,A,Y,N,,,,,,,,,99813.94,38656.27,1397.69,61157.67,6.96,,,,,,,,,,,,,,,,,,,31646182683546TDF,1649041195,2025-08-11,1437702123,S,Z0001,001,649.73,2026-01-05 04:03:23.920661,,,,,,1649041195,01,01,,03

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ public ExplanationOfBenefit toFhir(ClaimSecurityStatus securityStatus) {
7878
claimTypeCode.toFhirAdjudication().ifPresent(eob::addAdjudication);
7979

8080
eob.setMeta(meta.toFhir(claimTypeCode, securityStatus, finalAction, getMetaSourceSk()));
81-
identifiers.toFhir().forEach(eob::addIdentifier);
81+
identifiers.toFhir(claimTypeCode).forEach(eob::addIdentifier);
82+
identifiers.toFhirRelatedClaim(claimTypeCode).ifPresent(eob::addRelated);
8283
eob.setBillablePeriod(billablePeriod.toFhir());
8384
eob.setCreated(DateUtil.toDate(claimEffectiveDate));
8485
claimTypeCode

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

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.Optional;
1010
import org.hl7.fhir.r4.model.CodeableConcept;
1111
import org.hl7.fhir.r4.model.Coding;
12+
import org.hl7.fhir.r4.model.ExplanationOfBenefit;
1213
import org.hl7.fhir.r4.model.Identifier;
1314

1415
@Embeddable
@@ -22,7 +23,7 @@ class Identifiers {
2223
@Column(name = "clm_orig_cntl_num")
2324
private Optional<String> claimOriginalControlNumber;
2425

25-
public List<Identifier> toFhir() {
26+
public List<Identifier> toFhir(ClaimTypeCode claimTypeCode) {
2627
var claimId =
2728
new Identifier()
2829
.setValue(String.valueOf(claimUniqueId))
@@ -34,19 +35,38 @@ public List<Identifier> toFhir() {
3435
.setCode("uc")
3536
.setDisplay("Unique Claim ID")));
3637
var identifiers = new ArrayList<>(Collections.singletonList(claimId));
37-
claimControlNumber.ifPresent(
38-
s ->
39-
identifiers.add(
40-
new Identifier()
41-
.setSystem(SystemUrls.BLUE_BUTTON_CLAIM_CONTROL_NUMBER)
42-
.setValue(s)));
38+
var controlNumber =
39+
claimTypeCode.isClaimSubtype(ClaimSubtype.PDE)
40+
? claimOriginalControlNumber.or(() -> claimControlNumber)
41+
: claimControlNumber;
4342

44-
claimOriginalControlNumber.ifPresent(
43+
controlNumber.ifPresent(
4544
s ->
4645
identifiers.add(
4746
new Identifier()
4847
.setSystem(SystemUrls.BLUE_BUTTON_CLAIM_CONTROL_NUMBER)
4948
.setValue(s)));
49+
5050
return identifiers;
5151
}
52+
53+
public Optional<ExplanationOfBenefit.RelatedClaimComponent> toFhirRelatedClaim(
54+
ClaimTypeCode claimTypeCode) {
55+
if (claimTypeCode.isClaimSubtype(ClaimSubtype.PDE)) {
56+
return Optional.empty();
57+
}
58+
return claimOriginalControlNumber.map(
59+
origCntlNum ->
60+
new ExplanationOfBenefit.RelatedClaimComponent()
61+
.setRelationship(
62+
new CodeableConcept()
63+
.addCoding(
64+
new Coding()
65+
.setSystem(SystemUrls.HL7_EX_RELATED_CLAIM_RELATIONSHIP)
66+
.setCode("prior")))
67+
.setReference(
68+
new Identifier()
69+
.setSystem(SystemUrls.BLUE_BUTTON_CLAIM_CONTROL_NUMBER)
70+
.setValue(origCntlNum)));
71+
}
5272
}

apps/bfd-server-ng/src/main/java/gov/cms/bfd/server/ng/util/SystemUrls.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,10 @@ private SystemUrls() {
567567
public static final String HL7_DIAGNOSIS_TYPE =
568568
"http://terminology.hl7.org/CodeSystem/ex-diagnosistype";
569569

570+
/** HL7 - Example Related Claim Relationship Codes. */
571+
public static final String HL7_EX_RELATED_CLAIM_RELATIONSHIP =
572+
"http://terminology.hl7.org/CodeSystem/ex-relatedclaimrelationship";
573+
570574
/** HL7 - Claim Information Category Codes. */
571575
public static final String HL7_CLAIM_INFORMATION =
572576
"http://terminology.hl7.org/CodeSystem/claiminformationcategory";

apps/bfd-server-ng/src/test/java/gov/cms/bfd/server/ng/__snapshots__/EobPharmacyIT.snap

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,6 @@ gov.cms.bfd.server.ng.EobPharmacyIT.eobReadPharmacy=[
9696
} ]
9797
},
9898
"value" : "5213363418309"
99-
}, {
100-
"system" : "https://bluebutton.cms.gov/identifiers/CLM-CNTL-NUM",
101-
"value" : "50787281107100OQH"
10299
}, {
103100
"system" : "https://bluebutton.cms.gov/identifiers/CLM-CNTL-NUM",
104101
"value" : "15564917518692RYL"

apps/bfd-server-ng/src/test/java/gov/cms/bfd/server/ng/__snapshots__/EobReadIT.snap

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2346,6 +2346,18 @@ gov.cms.bfd.server.ng.EobReadIT.eobReadPhase2=[
23462346
"provider" : {
23472347
"reference" : "#1104867175"
23482348
},
2349+
"related" : [ {
2350+
"reference" : {
2351+
"system" : "https://bluebutton.cms.gov/identifiers/CLM-CNTL-NUM",
2352+
"value" : "31646182683541TDF"
2353+
},
2354+
"relationship" : {
2355+
"coding" : [ {
2356+
"code" : "prior",
2357+
"system" : "http://terminology.hl7.org/CodeSystem/ex-relatedclaimrelationship"
2358+
} ]
2359+
}
2360+
} ],
23492361
"resourceType" : "ExplanationOfBenefit",
23502362
"status" : "active",
23512363
"subType" : {

0 commit comments

Comments
 (0)