Skip to content

Family Member History Profile

Canonical../StructureDefinition/nexus-emr-core-familymemberhistory
Statusdraft (experimental) · 1.26.0
BaseFamilyMemberHistory (constraint)
SourceFSH · JSON

Nexus EMR profile for FamilyMemberHistory -- family history as discrete chart content for summaries and extraction output. First pass: one relative, coded relationship, condition list with onset. Closed to SMART apps pending an exposure decision.

TypedFhir API / Pydantic schema

The typed accessor surface FamilyMemberHistory exposes for FamilyMemberHistory — generated from this IG's compiled profile; each typed accessor has a validating raw-FHIR twin (xRaw) where marked. The three ports are parity-enforced.

The AI-facing shape: from typed_fhir.facade.generated.schemas import FamilyMemberHistorySchemamodel_json_schema() is a structured-output / tool definition; instantiating validates an extraction. Generated source.

class FamilyMemberHistorySchema(BaseModel):
    """AI-facing shape of the FamilyMemberHistory profile: the facade's typed accessor
    surface (curated + salient fields) as a pydantic model. `model_json_schema()` is a
    structured-output / tool schema; instantiating validates an extraction."""

    model_config = ConfigDict(extra="forbid")

    status: Literal["completed", "entered-in-error", "health-unknown", "partial"] | None = Field(
        None,
        description=(
            "partial | completed | entered-in-error | health-unknown. A code specifying the "
            "status of the record of the family history of a specific family member. Note: This "
            "element is labeled as a modifier because the status contains codes that mark the "
            "resource as not currently valid. FamilyMemberHistory.status — 1..1"
        ),
    )
    data_absent_reason: Concept | None = Field(
        None,
        description=(
            "subject-unknown | withheld | unable-to-obtain | deferred. Describes why the family "
            "member's history is not available. FamilyMemberHistory.dataAbsentReason — 0..1"
        ),
    )
    patient: Reference | None = Field(
        None,
        description=(
            "The patient whose family history this is. The person who this history concerns. "
            "FamilyMemberHistory.patient — 1..1"
        ),
    )
    date: FuzzyDate | None = Field(
        None,
        description=(
            "When the history was recorded/updated -- the effective date. The date (and possibly "
            "time) when the family member history was recorded or last updated. Note: This should "
            "be captured even if the same as the date on the List aggregating the full family "
            "history. FamilyMemberHistory.date — 0..1"
        ),
    )
    relationship: Concept | None = Field(
        None,
        description=(
            "Who the relative is (v3 FamilyMember: MTH, FTH, SIB, ...). The type of relationship "
            "this person has to the patient (father, mother, brother etc.). Note: Extensible: "
            "heritage charts may carry local relationship wording as text alongside the coding. "
            "Where this code was mapped from a source system's own vocabulary, carry the raw "
            "coding alongside the mapped one, flagged `userSelected = true`. See [Carrying the "
            "raw code](../guide/patterns/raw-codes.md). "
            "FamilyMemberHistory.relationship — 1..1"
        ),
    )
    sex: Concept | None = Field(
        None,
        description=(
            "male | female | other | unknown. The birth sex of the family member. Note: This "
            "element should ideally reflect whether the individual is genetically male or female. "
            "However, as reported information based on the knowledge of the patient or reporting "
            "friend/relative, there may be situations where the reported sex might not be totally "
            "accurate. E.g. 'Aunt Sue' might be XY rather than XX. Questions soliciting this "
            "information should be phrased to encourage capture of genetic sex where known. "
            "However, systems performing analysis should also allow for the possibility of "
            "imprecision with this element. FamilyMemberHistory.sex — 0..1. codes (extensible): "
            "female | male | other | unknown"
        ),
    )
    reason_code: Concept | None = Field(
        None,
        description=(
            "Why was family member history performed?. Describes why the family member history "
            "occurred in coded or textual form. Note: Textual reasons can be captured using "
            "reasonCode.text. FamilyMemberHistory.reasonCode — 0..*"
        ),
    )
    condition: dict | None = Field(
        None,
        description=(
            "Conditions the relative had. The significant Conditions (or condition) that the "
            "family member had. This is a repeating section to allow a system to represent more "
            "than one condition per resource, though there is nothing stopping multiple resources "
            "- one per condition. FamilyMemberHistory.condition — 0..*"
        ),
    )
    deceased: bool | None = Field(
        None,
        description=(
            "Dead? How old/when?. Deceased flag or the actual or approximate age of the relative "
            "at the time of death for the family member history record. Note: Whether the "
            "relative is deceased, and ONLY the boolean arm of `deceased[x]`. A record carrying "
            "an age or a date of death instead leaves this absent, and absent means the fact was "
            "not stated as a boolean rather than that the relative is alive. That value stays on "
            "the raw resource. Salient field — deceasedBoolean"
        ),
    )