Symptom Element Documentation
Overview
Section titled “Overview”The Symptom element represents patient-reported symptoms and chief complaints. Symptoms are recorded as FHIR Observations with category “survey” to distinguish them from clinical findings.
Function
Section titled “Function”builder.add_symptom( code: CodeInput, onset: Optional[DateTimeInput] = None, offset: Optional[DateTimeInput] = None, severity: Optional[Union[Severity, str]] = None, status: Union[ObservationStatus, str] = "final", notes: Optional[str] = None, laterality: Optional[Union[Laterality, str]] = None, finding_status: Optional[Union[FindingStatus, str]] = None, id: Optional[str] = None,) -> ObservationParameters
Section titled “Parameters”Required Parameters
Section titled “Required Parameters”- code: The symptom name or code
Optional Parameters
Section titled “Optional Parameters”- onset: When the symptom started
- offset: When the symptom ended (if resolved)
- severity: How severe the symptom is (mild, moderate, severe)
- status: Observation status (default: “final”)
- notes: Additional details about the symptom
- laterality: Body side affected (left, right, bilateral)
- finding_status: Whether symptom is present or absent
- id: Custom resource ID
Basic Usage
Section titled “Basic Usage”Simple Symptom
Section titled “Simple Symptom”from fhir_sdk import FHIRDocumentBuilder
builder = FHIRDocumentBuilder()builder.add_patient(name="John Doe", age=30)builder.add_encounter()
# Add basic symptomsymptom = builder.add_symptom(code="Headache")Using CodeableConcept (Preferred)
Section titled “Using CodeableConcept (Preferred)”from fhir_sdk.types import create_codeable_concept
symptom = builder.add_symptom( code=create_codeable_concept( text="Headache", code="25064002", system="http://snomed.info/sct", display="Headache" ))Using String (Alternative)
Section titled “Using String (Alternative)”symptom = builder.add_symptom(code="Headache")Comprehensive Symptom
Section titled “Comprehensive Symptom”from fhir_sdk import Severity, Laterality, FindingStatusfrom datetime import datetime, timedelta
symptom = builder.add_symptom( code=create_codeable_concept( text="Chest pain", code="29857009", system="http://snomed.info/sct", display="Chest pain" ), onset=datetime.now() - timedelta(hours=2), severity=Severity.MODERATE, laterality=Laterality.LEFT, finding_status=FindingStatus.PRESENT, notes="Sharp pain, worse with deep breathing")Severity Levels
Section titled “Severity Levels”from fhir_sdk import Severity
# Using enum (preferred)symptom = builder.add_symptom( code="Pain", severity=Severity.MILD)
# Using string (alternative)symptom = builder.add_symptom( code="Pain", severity="moderate")Available severity levels:
Severity.MILDor"mild"Severity.MODERATEor"moderate"Severity.SEVEREor"severe"
Laterality Options
Section titled “Laterality Options”from fhir_sdk import Laterality
# Using enum (preferred)symptom = builder.add_symptom( code="Knee pain", laterality=Laterality.RIGHT)Available laterality options:
Laterality.LEFTor"left"Laterality.RIGHTor"right"Laterality.BILATERALor"bilateral"
Finding Status
Section titled “Finding Status”from fhir_sdk import FindingStatus
# Positive finding (symptom present)symptom = builder.add_symptom( code="Nausea", finding_status=FindingStatus.PRESENT)
# Negative finding (symptom absent)symptom = builder.add_symptom( code="Chest pain", finding_status=FindingStatus.ABSENT)Time-based Symptoms
Section titled “Time-based Symptoms”from datetime import datetime, timedelta
# Ongoing symptom (onset only)symptom = builder.add_symptom( code="Fatigue", onset=datetime.now() - timedelta(days=3))
# Resolved symptom (onset and offset)symptom = builder.add_symptom( code="Fever", onset=datetime.now() - timedelta(days=2), offset=datetime.now() - timedelta(hours=6))Common Symptoms
Section titled “Common Symptoms”Use create_codeable_concept with SNOMED CT codes for better interoperability:
# Headachecode=create_codeable_concept( text="Headache", code="25064002", system="http://snomed.info/sct")
# Chest paincode=create_codeable_concept( text="Chest pain", code="29857009", system="http://snomed.info/sct")
# Nauseacode=create_codeable_concept( text="Nausea", code="422587007", system="http://snomed.info/sct")Best Practices
Section titled “Best Practices”- Always use create_codeable_concept with SNOMED CT codes when available
- Include onset time for symptom progression tracking
- Use severity levels for triage and monitoring
- Record negative findings (absent symptoms) for completeness
- Add detailed notes for complex or unusual symptoms
- Use laterality for body-part-specific symptoms
- Symptoms are categorized as “survey” observations (patient-reported)
- Multiple symptoms can be added for comprehensive chief complaints
- Onset/offset creates effective periods for symptom duration
- Finding status helps distinguish between present and ruled-out symptoms