Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
## Multiple Primary and Histology Coding Rules Version History

**Changes in version 1.43**

- Implemented 2026 updates of solid tumor rules. (#152)

**Changes in version 1.42**

- Changed the minimum Java language for this library from Java 8 to Java 21.
Expand Down
193 changes: 116 additions & 77 deletions src/main/java/com/imsweb/mph/MphConstants.java

Large diffs are not rendered by default.

86 changes: 26 additions & 60 deletions src/main/java/com/imsweb/mph/mpgroups/Mp2018BreastGroup.java

Large diffs are not rendered by default.

20 changes: 10 additions & 10 deletions src/main/java/com/imsweb/mph/mpgroups/Mp2018ColonGroup.java
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public TempRuleResult apply(MphInput i1, MphInput i2, RuleExecutionContext conte
rule.getNotes().add("This rule does not apply to a single overlapping malignancy of colon and rectum.");
_rules.add(rule);

// Rule M5 Abstract multiple primaries when separate/non-contiguous tumors are two or more different subtypes/variants in Column 3, Table 1 in the Equivalent Terms and Definitions. Timing is irrelevant.
// Rule M5 Abstract multiple primaries when separate/non-contiguous tumors are two or more different subtypes/variants in Column 2, Table 1 in the Site-group Instructions. Timing is irrelevant.
rule = new MphRule(MphConstants.SOLID_TUMOR_2018_COLON, "M5") {
@Override
public TempRuleResult apply(MphInput i1, MphInput i2, RuleExecutionContext context) {
Expand All @@ -88,19 +88,19 @@ public TempRuleResult apply(MphInput i1, MphInput i2, RuleExecutionContext conte
return result;
}
};
rule.setQuestion("Are separate/non-contiguous tumors two or more different subtypes/variants in Column 3, Table 1 in the Equivalent Terms and Definitions?");
rule.setReason("Separate/non-contiguous tumors that are two or more different subtypes/variants in Column 3, Table 1 in the Equivalent Terms and Definitions are multiple primaries.");
rule.setQuestion("Are separate/non-contiguous tumors two or more different subtypes/variants in Column 2, Table 1 in the Site-group Instructions?");
rule.setReason("Separate/non-contiguous tumors that are two or more different subtypes/variants in Column 2, Table 1 in the Site-group Instructions are multiple primaries.");
rule.getNotes().add("The tumors may be subtypes/variants of the same or different NOS histologies.");
rule.getNotes().add(
" - Same NOS: Medullary carcinoma NOS 8510/3 and tubulopapillary adenocarcinoma 8263/3 are both subtypes of adenocarcinoma NOS 8140/3 but are distinctly different histologies. Abstract multiple primaries.");
rule.getNotes().add(
" - Different NOS: Goblet cell carcinoid 8243/3 is a subtype of mixed adenoneuroendocrine carcinoma 8244/3; somatostatin-producing NET 8156/3 is a subtype of neuroendocrine tumor Grade 1 (G1) 8240/3. They are distinctly different histologies. Abstract multiple primaries.");
_rules.add(rule);

// Rule M6 Abstract multiple primaries when separate/non-contiguous tumors are on different rows in Table 1 in the Equivalent Terms and Definitions. Timing is irrelevant.
// Rule M6 Abstract multiple primaries when separate/non-contiguous tumors are on different rows in Table 1 in the Site-group Instructions. Timing is irrelevant.
rule = new MpRuleDifferentRowInTable(MphConstants.SOLID_TUMOR_2018_COLON, "M6", MphConstants.COLON_2018_TABLE1_ROWS);
rule.setQuestion("Are separate/non-contiguous tumors on different rows in Table 1 in the Equivalent Terms and Definitions?");
rule.setReason("Separate/non-contiguous tumors that are on different rows in Table 1 in the Equivalent Terms and Definitions are multiple primaries.");
rule.setQuestion("Are separate/non-contiguous tumors on different rows in Table 1 in the Site-group Instructions?");
rule.setReason("Separate/non-contiguous tumors that are on different rows in Table 1 in the Site-group Instructions are multiple primaries.");
rule.getNotes().add("Each row in the table is a distinctly different histology.");
_rules.add(rule);

Expand Down Expand Up @@ -215,10 +215,10 @@ else if (!i1.getPrimarySite().equals(i2.getPrimarySite()))
"The physician may state this is a recurrence, meaning the patient had a previous colon tumor and now has another colon tumor. Follow the rules; do not attempt to interpret the physician’s statement.");
_rules.add(rule);

// Rule M11 Abstract a single primary when synchronous, separate/non-contiguous tumors are on the same row in Table 1 in the Equivalent Terms and Definitions.
// Rule M11 Abstract a single primary when synchronous, separate/non-contiguous tumors are on the same row in Table 1 in the Site-group Instructions.
rule = new MpRuleSameRowInTable(MphConstants.SOLID_TUMOR_2018_COLON, "M11", MphConstants.COLON_2018_TABLE1_ROWS, true);
rule.setQuestion("Are synchronous, separate/non-contiguous tumors on the same in Table 1 in the Equivalent Terms and Definitions?");
rule.setReason("Synchronous, separate/non-contiguous tumors that are on the same row in Table 1 in the Equivalent Terms and Definitions are a single primary.");
rule.setQuestion("Are synchronous, separate/non-contiguous tumors on the same in Table 1 in the Site-group Instructions?");
rule.setReason("Synchronous, separate/non-contiguous tumors that are on the same row in Table 1 in the Site-group Instructions are a single primary.");
rule.getNotes().add("The same row means the tumors are:");
rule.getNotes().add(" - The same histology (same four-digit ICD-O code) OR");
rule.getNotes().add(" - One is the preferred term (column 1) and the other is a synonym for the preferred term (column 2) OR");
Expand All @@ -230,7 +230,7 @@ else if (!i1.getPrimarySite().equals(i2.getPrimarySite()))
// Rule M12 Abstract a single primary (the invasive) when an in situ tumor is diagnosed after an invasive tumor.
rule = new MpRuleInsituAfterInvasive(MphConstants.SOLID_TUMOR_2018_COLON, "M12");
rule.getNotes().add("The rules are hierarchical. Only use this rule when none of the previous rules apply.");
rule.getNotes().add("The tumors may be a NOS and a subtype/variant of that NOS. See Table 1 in the Equivalent Terms and Definitions for listings of NOS and subtype/variants.");
rule.getNotes().add("The tumors may be a NOS and a subtype/variant of that NOS. See Table 1 in the Site-group Instructions for listings of NOS and subtype/variants.");
rule.getNotes().add("The in situ is recorded as a recurrence for those registrars who collect recurrence data.");
_rules.add(rule);

Expand Down
20 changes: 10 additions & 10 deletions src/main/java/com/imsweb/mph/mpgroups/Mp2018HeadAndNeckGroup.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ else if (GroupUtility.areOppositeSides(i1.getLaterality(), i2.getLaterality()))
"The physician may state this is a recurrence, meaning the patient had a previous head and neck tumor and now has another head and neck tumor. Follow the rules; do not attempt to interpret the physician’s statement.");
_rules.add(rule);

// Rule M7 Abstract multiple primaries when separate, non-contiguous tumors are two or more different subtypes/variants in Column 3 of the appropriate site table (Tables 1-9) in the Equivalent Terms and Definitions. Timing is irrelevant.
// Rule M7 Abstract multiple primaries when separate, non-contiguous tumors are two or more different subtypes/variants in Column 2 of the appropriate site table (Tables 1-9) in the Site-group Instructions. Timing is irrelevant.
rule = new MphRule(MphConstants.SOLID_TUMOR_2018_HEAD_AND_NECK, "M7") {
@Override
public TempRuleResult apply(MphInput i1, MphInput i2, RuleExecutionContext context) {
Expand Down Expand Up @@ -206,17 +206,17 @@ else if (!map1.equals(map2))
}
};
rule.setQuestion(
"Are separate, non-contiguous tumors different subtypes/variants in Column 3 of the appropriate site table (Tables 1-9) in the Equivalent Terms and Definitions?");
"Are separate, non-contiguous tumors different subtypes/variants in Column 2 of the appropriate site table (Tables 1-9) in the Site-group Instructions?");
rule.setReason(
"Separate, non-contiguous tumors are different subtypes/variants in Column 3 of the appropriate site table (Tables 1-9) in the Equivalent Terms and Definitions are multiple primaries.");
"Separate, non-contiguous tumors are different subtypes/variants in Column 2 of the appropriate site table (Tables 1-9) in the Site-group Instructions are multiple primaries.");
rule.getNotes().add("The tumors may be subtypes/variants of the same or different NOS histologies.");
rule.getNotes().add(
" - Same NOS: Alveolar rhabdomyosarcoma 8920/3 and embryonal rhabdomyosarcoma 8910/3 are both subtypes of rhabdomyosarcoma 8900/3 but are distinctly different histologies. Abstract multiple primaries.");
rule.getNotes().add(
" - Different NOS: Colloid-type adenocarcinoma 8144 is a subtype of adenocarcinoma NOS 8140; Sarcomatoid carcinoma 8074 is a subtype of squamous cell carcinoma 8070. They are distinctly different histologies. Abstract multiple primaries.");
_rules.add(rule);

// Rule M8 Abstract multiple primaries when separate, non-contiguous tumors are on different rows in the appropriate site table (Tables 1-9) in the Equivalent Terms and Definitions. Timing is irrelevant.
// Rule M8 Abstract multiple primaries when separate, non-contiguous tumors are on different rows in the appropriate site table (Tables 1-9) in the Site-group Instructions. Timing is irrelevant.
rule = new MphRule(MphConstants.SOLID_TUMOR_2018_HEAD_AND_NECK, "M8") {
@Override
public TempRuleResult apply(MphInput i1, MphInput i2, RuleExecutionContext context) {
Expand Down Expand Up @@ -245,15 +245,15 @@ public TempRuleResult apply(MphInput i1, MphInput i2, RuleExecutionContext conte
return result;
}
};
rule.setQuestion("Are separate, non-contiguous tumors on different rows in the appropriate site table (Tables 1-9) in the Equivalent Terms and Definitions?");
rule.setReason("Separate, non-contiguous tumors on different rows in the appropriate site table (Tables 1-9) in the Equivalent Terms and Definitions are multiple primaries.");
rule.setQuestion("Are separate, non-contiguous tumors on different rows in the appropriate site table (Tables 1-9) in the Site-group Instructions?");
rule.setReason("Separate, non-contiguous tumors on different rows in the appropriate site table (Tables 1-9) in the Site-group Instructions are multiple primaries.");
rule.getNotes().add("Each row in the table is a distinctly different histology.");
_rules.add(rule);

// Rule M9 Abstract a single primary (the invasive) when an in situ tumor is diagnosed after an invasive tumor in the same primary site.
rule = new MpRuleInsituAfterInvasive(MphConstants.SOLID_TUMOR_2018_HEAD_AND_NECK, "M9");
rule.getNotes().add(HIERARCHICAL_RULES);
rule.getNotes().add("The tumors may be a NOS and a subtype/variant of that NOS. See Tables 1-9 in the Equivalent Terms and Definitions for listings of NOS and subtype/variants.");
rule.getNotes().add("The tumors may be a NOS and a subtype/variant of that NOS. See Tables 1-9 in the Site-group Instructions for listings of NOS and subtype/variants.");
rule.getNotes().add("The in situ is recorded as a recurrence for those registrars who collect recurrence data.");
_rules.add(rule);

Expand All @@ -277,7 +277,7 @@ public TempRuleResult apply(MphInput i1, MphInput i2, RuleExecutionContext conte
"This rule is based on long-term epidemiologic studies of recurrence intervals. The specialty medical experts (SMEs) reviewed and approved these rules. Many of the SMEs were also authors, co-authors, or editors of the AJCC Staging Manual.");
_rules.add(rule);

// Rule M12 Abstract a single primary when separate/non-contiguous tumors in the same primary site are on the same row in the appropriate site table (Tables 1-9) in the Equivalent Terms and Definitions. Timing is irrelevant.
// Rule M12 Abstract a single primary when separate/non-contiguous tumors in the same primary site are on the same row in the appropriate site table (Tables 1-9) in the Site-group Instructions. Timing is irrelevant.
rule = new MphRule(MphConstants.SOLID_TUMOR_2018_HEAD_AND_NECK, "M12") {
@Override
public TempRuleResult apply(MphInput i1, MphInput i2, RuleExecutionContext context) {
Expand Down Expand Up @@ -309,9 +309,9 @@ else if (row1.contains(row2) || row2.contains(row1))
return result;
}
};
rule.setQuestion("Are separate, non-contiguous tumors in the same primary site and on the same row in the appropriate site table (Tables 1-9) in the Equivalent Terms and Definitions?");
rule.setQuestion("Are separate, non-contiguous tumors in the same primary site and on the same row in the appropriate site table (Tables 1-9) in the Site-group Instructions?");
rule.setReason(
"Separate, non-contiguous tumors in the same primary site and on the same row in the appropriate site table (Tables 1-9) in the Equivalent Terms and Definitions are a single primary.");
"Separate, non-contiguous tumors in the same primary site and on the same row in the appropriate site table (Tables 1-9) in the Site-group Instructions are a single primary.");
rule.getNotes().add("The same row means the tumors are:");
rule.getNotes().add(" - The same histology (same four-digit ICD-O code) OR");
rule.getNotes().add(" - One is the preferred term (column 1) and the other is a synonym for the preferred term (column 2) OR");
Expand Down
Loading
Loading