Skip to content

Basic Concepts

Protocol-Oriented Design

ccdakit uses Python's Protocol types for structural subtyping. Your existing data models work automatically - no inheritance required.

from typing import Protocol

# ccdakit protocol
class ProblemProtocol(Protocol):
    @property
    def name(self) -> str: ...

    @property
    def code(self) -> str: ...

    @property
    def status(self) -> str: ...

# Your class automatically satisfies it
class MyProblem:
    def __init__(self, data: dict):
        self._data = data

    @property
    def name(self) -> str:
        return self._data['problem_name']

    @property
    def code(self) -> str:
        return self._data['snomed_code']

    @property
    def status(self) -> str:
        return self._data['active_status']

Architecture

Your Application (EHR, HIE, etc.)
Your Data Models (implement protocols)
ccdakit Library (Protocols → Builders → Validators → XML)

CDA Versions

from ccdakit import CDAVersion

CDAVersion.R2_1  # C-CDA R2.1 (2015) - recommended
CDAVersion.R2_0  # C-CDA R2.0 (2014)

Clinical Sections

39 complete sections available (9 core sections shown below, see guides/sections.md for all):

  • ProblemsSection (SNOMED, ICD-10)
  • MedicationsSection (RxNorm)
  • AllergiesSection (RxNorm, UNII, SNOMED)
  • ImmunizationsSection (CVX)
  • VitalSignsSection (LOINC)
  • ProceduresSection (CPT, SNOMED)
  • ResultsSection (LOINC)
  • SocialHistorySection (SNOMED)
  • EncountersSection (CPT)

Configuration

from ccdakit import configure, CDAConfig, OrganizationInfo

config = CDAConfig(
    organization=OrganizationInfo(
        name="My Medical Center",
        npi="1234567890",
        oid_root="2.16.840.1.113883.3.EXAMPLE",
    ),
    version=CDAVersion.R2_1,
)
configure(config)

Next Steps