aimedicalcoding 0.3.4__tar.gz → 0.3.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. {aimedicalcoding-0.3.4/aimedicalcoding.egg-info → aimedicalcoding-0.3.5}/PKG-INFO +1 -1
  2. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/serialize.py +6 -21
  3. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5/aimedicalcoding.egg-info}/PKG-INFO +1 -1
  4. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/docs/GAP_SCHEMA.md +3 -6
  5. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/setup.py +1 -1
  6. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/LICENSE +0 -0
  7. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/MANIFEST.in +0 -0
  8. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/README.md +0 -0
  9. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/README_PYPI.md +0 -0
  10. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/__init__.py +0 -0
  11. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/__main__.py +0 -0
  12. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/__init__.py +0 -0
  13. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/base.py +0 -0
  14. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/ccda/__init__.py +0 -0
  15. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/ccda/adapter.py +0 -0
  16. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/ccda/codes.py +0 -0
  17. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/ccda/narrative.py +0 -0
  18. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/ccda/sections.py +0 -0
  19. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/custom_json/__init__.py +0 -0
  20. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/custom_json/adapter.py +0 -0
  21. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/fhir/__init__.py +0 -0
  22. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/fhir/adapter.py +0 -0
  23. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/fhir/codes.py +0 -0
  24. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/adapters/fhir/mapping.py +0 -0
  25. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/api.py +0 -0
  26. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/core/__init__.py +0 -0
  27. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/core/checkdigits.py +0 -0
  28. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/core/models.py +0 -0
  29. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/core/system_registry.py +0 -0
  30. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/pipeline/__init__.py +0 -0
  31. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/pipeline/orchestrator.py +0 -0
  32. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/recovery/__init__.py +0 -0
  33. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/recovery/engine.py +0 -0
  34. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/__init__.py +0 -0
  35. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/base.py +0 -0
  36. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/cvx/__init__.py +0 -0
  37. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/cvx/handler.py +0 -0
  38. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/cvx/normalize.py +0 -0
  39. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/cvx/patterns.py +0 -0
  40. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/icd10cm/__init__.py +0 -0
  41. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/icd10cm/handler.py +0 -0
  42. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/icd10cm/icdformat.py +0 -0
  43. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/icd10cm/patterns.py +0 -0
  44. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/loinc/__init__.py +0 -0
  45. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/loinc/axes.py +0 -0
  46. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/loinc/handler.py +0 -0
  47. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/loinc/normalize.py +0 -0
  48. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/loinc/patterns.py +0 -0
  49. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/rxnorm/__init__.py +0 -0
  50. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/rxnorm/handler.py +0 -0
  51. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/rxnorm/normalize.py +0 -0
  52. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/rxnorm/patterns.py +0 -0
  53. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/snomed/__init__.py +0 -0
  54. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/snomed/handler.py +0 -0
  55. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/snomed/hierarchy.py +0 -0
  56. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/snomed/patterns.py +0 -0
  57. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/systems/snomed/qualifiers.py +0 -0
  58. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/terminology/__init__.py +0 -0
  59. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding/terminology/service.py +0 -0
  60. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding.egg-info/SOURCES.txt +0 -0
  61. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding.egg-info/dependency_links.txt +0 -0
  62. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding.egg-info/entry_points.txt +0 -0
  63. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding.egg-info/requires.txt +0 -0
  64. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/aimedicalcoding.egg-info/top_level.txt +0 -0
  65. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/docs/ARCHITECTURE.md +0 -0
  66. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/docs/OUTPUT_GUIDE.md +0 -0
  67. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/docs/patterns/CVX_pattern_analysis.md +0 -0
  68. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/docs/patterns/ICD10CM_pattern_analysis.md +0 -0
  69. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/docs/patterns/LOINC_pattern_analysis.md +0 -0
  70. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/docs/patterns/RxNorm_pattern_analysis.md +0 -0
  71. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/docs/patterns/SNOMED_pattern_analysis.md +0 -0
  72. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/pyproject.toml +0 -0
  73. {aimedicalcoding-0.3.4 → aimedicalcoding-0.3.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aimedicalcoding
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Detect missing/broken clinical codes (LOINC / SNOMED CT / RxNorm / ICD-10-CM / CVX) in CCDA and FHIR documents, with recovery evidence
5
5
  Author: Aakash Kag, Vinay Shankar Miryala, Siva Karthik, Mohammed Rayaan
6
6
  License: MIT
@@ -121,20 +121,6 @@ def _dedupe(items) -> list:
121
121
  return out
122
122
 
123
123
 
124
- # SNOMED search-term enrichment (Problems 11450-4, Allergies 48765-2, Social
125
- # History 29762-2), matched by section LOINC or by the contexts those sections
126
- # route to (FHIR resources often carry no meta.tag/section code). Which slot's
127
- # labels get appended differs by section:
128
- # - Social History -> CODE tag labels (the question, e.g. "Gender identity" —
129
- # the value label is often a placeholder like "Not on file")
130
- # - Problems / Allergies -> VALUE tag labels (the concept; the code tag is a
131
- # generic marker like ASSERTION / "Problem" — appending it is noise)
132
- _SNOMED_CODE_LABEL_SECTIONS = {"29762-2"}
133
- _SNOMED_CODE_LABEL_CONTEXTS = {"social_history"}
134
- _SNOMED_VALUE_LABEL_SECTIONS = {"11450-4", "48765-2"}
135
- _SNOMED_VALUE_LABEL_CONTEXTS = {"problem", "allergy_substance", "allergy_reaction"}
136
-
137
-
138
124
  def _recovery(record: NormalizedRecord, slot: str, system: str) -> dict:
139
125
  stmt, ev, g = record.statement, record.gap.evidence, record.gap
140
126
 
@@ -146,18 +132,17 @@ def _recovery(record: NormalizedRecord, slot: str, system: str) -> dict:
146
132
  terms = [stmt.display_name, stmt.original_text]
147
133
  # add any normalized term the handler produced
148
134
  terms += [ev.get("analyte_normalized"), ev.get("term_normalized"), ev.get("ingredient")]
149
- # SNOMED only, Problems/Allergies/Social History only: append trailing
150
- # label context from the section-appropriate slot (see constants above).
135
+ # SNOMED: guarantee the TARGET slot's own labels are present, mirroring
136
+ # `target.slot` in the output record — code-slot gaps carry the code tag's
137
+ # displayName/originalText, value-slot gaps the value tag's.
151
138
  if system == System.SNOMEDCT.value:
152
- if (stmt.section_code in _SNOMED_CODE_LABEL_SECTIONS
153
- or stmt.context in _SNOMED_CODE_LABEL_CONTEXTS):
154
- terms += [stmt.display_name, stmt.original_text]
155
- elif (stmt.section_code in _SNOMED_VALUE_LABEL_SECTIONS
156
- or stmt.context in _SNOMED_VALUE_LABEL_CONTEXTS):
139
+ if slot == "value":
157
140
  if stmt.value:
158
141
  terms += [stmt.value.coded_value.display
159
142
  if stmt.value.coded_value else None,
160
143
  stmt.value.original_text]
144
+ else:
145
+ terms += [stmt.display_name, stmt.original_text]
161
146
 
162
147
  rec = {
163
148
  "search_terms": _dedupe(terms),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aimedicalcoding
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Detect missing/broken clinical codes (LOINC / SNOMED CT / RxNorm / ICD-10-CM / CVX) in CCDA and FHIR documents, with recovery evidence
5
5
  Author: Aakash Kag, Vinay Shankar Miryala, Siva Karthik, Mohammed Rayaan
6
6
  License: MIT
@@ -89,12 +89,9 @@ Each record separates four concerns:
89
89
  - `target.slot = "code"` (LOINC) → search `observation.code.display_text` / `.original_text`.
90
90
  - `target.slot = "value"` (SNOMED value-slot) → search `observation.value.display_text` / `.original_text`.
91
91
  `recovery.search_terms` already gives you the right ones, deduped.
92
- For **SNOMED-CT** targets, extra label context is appended at the end,
93
- section-specific: **Social History (29762-2)** appends the CODE tag's
94
- `display_text`/`original_text` (the question useful when the value label
95
- is a placeholder like "Not on file"); **Problems (11450-4)** and
96
- **Allergies (48765-2)** append the VALUE tag's labels (the concept — the
97
- code tag there is a generic marker like ASSERTION/"Problem").
92
+ For **SNOMED-CT** targets the terms follow `target.slot`: value-slot gaps
93
+ carry the VALUE tag's `display_text`/`original_text`, code-slot gaps the
94
+ CODE tag's — the other slot's labels are not mixed in.
98
95
 
99
96
  ---
100
97
 
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="aimedicalcoding",
5
- version="0.3.4",
5
+ version="0.3.5",
6
6
  author="Aakash Kag, Vinay Shankar Miryala, Siva Karthik, Mohammed Rayaan",
7
7
  description=(
8
8
  "Detect missing/broken clinical codes (LOINC / SNOMED CT / RxNorm / "
File without changes