aimedicalcoding 0.3.6__tar.gz → 0.3.7__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.6/aimedicalcoding.egg-info → aimedicalcoding-0.3.7}/PKG-INFO +1 -1
  2. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/fhir/codes.py +19 -1
  3. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7/aimedicalcoding.egg-info}/PKG-INFO +1 -1
  4. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/setup.py +1 -1
  5. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/LICENSE +0 -0
  6. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/MANIFEST.in +0 -0
  7. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/README.md +0 -0
  8. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/README_PYPI.md +0 -0
  9. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/__init__.py +0 -0
  10. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/__main__.py +0 -0
  11. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/__init__.py +0 -0
  12. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/base.py +0 -0
  13. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/ccda/__init__.py +0 -0
  14. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/ccda/adapter.py +0 -0
  15. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/ccda/codes.py +0 -0
  16. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/ccda/narrative.py +0 -0
  17. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/ccda/sections.py +0 -0
  18. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/custom_json/__init__.py +0 -0
  19. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/custom_json/adapter.py +0 -0
  20. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/fhir/__init__.py +0 -0
  21. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/fhir/adapter.py +0 -0
  22. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/adapters/fhir/mapping.py +0 -0
  23. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/api.py +0 -0
  24. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/core/__init__.py +0 -0
  25. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/core/checkdigits.py +0 -0
  26. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/core/models.py +0 -0
  27. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/core/system_registry.py +0 -0
  28. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/pipeline/__init__.py +0 -0
  29. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/pipeline/orchestrator.py +0 -0
  30. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/recovery/__init__.py +0 -0
  31. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/recovery/engine.py +0 -0
  32. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/serialize.py +0 -0
  33. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/__init__.py +0 -0
  34. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/base.py +0 -0
  35. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/cvx/__init__.py +0 -0
  36. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/cvx/handler.py +0 -0
  37. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/cvx/normalize.py +0 -0
  38. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/cvx/patterns.py +0 -0
  39. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/icd10cm/__init__.py +0 -0
  40. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/icd10cm/handler.py +0 -0
  41. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/icd10cm/icdformat.py +0 -0
  42. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/icd10cm/patterns.py +0 -0
  43. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/loinc/__init__.py +0 -0
  44. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/loinc/axes.py +0 -0
  45. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/loinc/handler.py +0 -0
  46. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/loinc/normalize.py +0 -0
  47. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/loinc/patterns.py +0 -0
  48. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/rxnorm/__init__.py +0 -0
  49. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/rxnorm/handler.py +0 -0
  50. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/rxnorm/normalize.py +0 -0
  51. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/rxnorm/patterns.py +0 -0
  52. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/snomed/__init__.py +0 -0
  53. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/snomed/handler.py +0 -0
  54. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/snomed/hierarchy.py +0 -0
  55. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/snomed/patterns.py +0 -0
  56. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/systems/snomed/qualifiers.py +0 -0
  57. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/terminology/__init__.py +0 -0
  58. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding/terminology/service.py +0 -0
  59. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding.egg-info/SOURCES.txt +0 -0
  60. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding.egg-info/dependency_links.txt +0 -0
  61. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding.egg-info/entry_points.txt +0 -0
  62. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding.egg-info/requires.txt +0 -0
  63. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/aimedicalcoding.egg-info/top_level.txt +0 -0
  64. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/docs/ARCHITECTURE.md +0 -0
  65. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/docs/GAP_SCHEMA.md +0 -0
  66. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/docs/OUTPUT_GUIDE.md +0 -0
  67. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/docs/patterns/CVX_pattern_analysis.md +0 -0
  68. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/docs/patterns/ICD10CM_pattern_analysis.md +0 -0
  69. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/docs/patterns/LOINC_pattern_analysis.md +0 -0
  70. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/docs/patterns/RxNorm_pattern_analysis.md +0 -0
  71. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/docs/patterns/SNOMED_pattern_analysis.md +0 -0
  72. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/pyproject.toml +0 -0
  73. {aimedicalcoding-0.3.6 → aimedicalcoding-0.3.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aimedicalcoding
3
- Version: 0.3.6
3
+ Version: 0.3.7
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
@@ -169,7 +169,9 @@ def extract_value(resource: dict) -> Optional[ValueInfo]:
169
169
  # --------------------------------------------------------------------------
170
170
 
171
171
  def extract_companion(resource: dict) -> dict:
172
- """interpretation + reference range (Observation-shaped resources)."""
172
+ """interpretation + reference range + method + body site (Observation-shaped
173
+ resources). FHIR analog of the CCDA extractor: Observation.method and
174
+ Observation.bodySite are CodeableConcepts (the LOINC Method axis / site)."""
173
175
  out: dict[str, Any] = {}
174
176
  for interp in resource.get("interpretation") or []:
175
177
  code = next((clean(c.get("code")) for c in interp.get("coding") or []
@@ -189,6 +191,22 @@ def extract_companion(resource: dict) -> dict:
189
191
  if clean(rr.get("text")):
190
192
  out["reference_range"] = clean(rr.get("text"))
191
193
  break
194
+
195
+ # method: LOINC Method axis (Observation.method CodeableConcept)
196
+ m_codings, m_text = concept_codings(resource.get("method"))
197
+ method = best_label(m_codings, m_text)
198
+ if method:
199
+ out["method"] = method
200
+
201
+ # body site: Observation.bodySite CodeableConcept
202
+ b_codings, b_text = concept_codings(resource.get("bodySite"))
203
+ body_site = best_label(b_codings, b_text)
204
+ if body_site:
205
+ out["body_site"] = body_site
206
+ primary = next((c for c in b_codings if c.code), None)
207
+ if primary:
208
+ out["body_site_code"] = primary.code
209
+ return out
192
210
  return out
193
211
 
194
212
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aimedicalcoding
3
- Version: 0.3.6
3
+ Version: 0.3.7
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
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="aimedicalcoding",
5
- version="0.3.6",
5
+ version="0.3.7",
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