SDOH Data Guide
Social Determinants of Health drive 30–55% of outcomes yet are absent from most clinical databases. Learn how to collect, standardize, and analyze SDOH data using ICD-10 Z codes, FHIR, and proven screening tools.
The Five SDOH Domains
Economic Stability
Employment, income, food security, housing stability, poverty
Education Access & Quality
Literacy, early childhood education, enrollment, language access
Social & Community Context
Social isolation, discrimination, incarceration, civic participation
Health Care Access & Quality
Insurance coverage, access to primary care, health literacy
Neighborhood & Built Environment
Housing quality, transportation, environmental conditions, violence
ICD-10-CM Z Codes for SDOH
ICD-10-CM Chapter 21 (Z00–Z99) includes codes specifically for documenting social factors. These "Z codes" can be assigned as secondary diagnoses when they affect care planning.
| ICD-10 Code | Description | SDOH Domain |
|---|---|---|
| Z59.0 | Homelessness | Economic Stability |
| Z59.1 | Inadequate housing | Neighborhood |
| Z59.4 | Lack of adequate food | Economic Stability |
| Z59.5 | Extreme poverty | Economic Stability |
| Z56.0 | Unemployment, unspecified | Economic Stability |
| Z60.2 | Problems related to living alone | Social Context |
| Z60.4 | Social exclusion and rejection | Social Context |
| Z63.0 | Problems in relationship with spouse or partner | Social Context |
| Z71.3 | Dietary counseling and surveillance | Education |
| Z91.19 | Patient's noncompliance, other reason | Health Care Access |
SDOH Screening Tools
PRAPARE
Protocol for Responding to and Assessing Patients' Assets, Risks, and Experiences
Domains: Personal characteristics, family, money, neighborhood, resources
AHC-HRSN
Accountable Health Communities — Health-Related Social Needs Screening Tool
Domains: Housing instability, food insecurity, transportation, utilities, interpersonal safety
WE CARE
Well-child Care visit, Evaluation, Community Resources, Advocacy, Referral, Education
Domains: Food, housing, heat, employment, childcare, education
SDOH Database Schema
-- SDOH Screening Assessment CREATE TABLE sdoh_assessment ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), patient_id UUID NOT NULL, encounter_id UUID, -- Screening Instrument instrument_code VARCHAR(50) NOT NULL, -- PRAPARE, AHC-HRSN, WE-CARE instrument_loinc VARCHAR(20), -- LOINC code for the panel assessment_dt DATE NOT NULL, administered_by VARCHAR(50), -- PROVIDER, STAFF, SELF, KIOSK -- Overall Status has_social_needs BOOLEAN, -- Any need identified? needs_count INTEGER DEFAULT 0, referral_made BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT NOW() ); CREATE INDEX idx_sdoh_patient ON sdoh_assessment(patient_id, assessment_dt); -- Individual SDOH Need / Finding CREATE TABLE sdoh_need ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), assessment_id UUID REFERENCES sdoh_assessment(id), patient_id UUID NOT NULL, -- Classification sdoh_domain VARCHAR(50) NOT NULL, -- ECONOMIC, EDUCATION, SOCIAL, HEALTH_ACCESS, NEIGHBORHOOD need_category VARCHAR(100) NOT NULL, -- food_insecurity, housing_instability, transportation, etc. -- Coding icd10_z_code VARCHAR(10), -- ICD-10-CM Z code loinc_code VARCHAR(20), -- LOINC observation code snomed_code BIGINT, -- SNOMED CT concept -- Screening Response question_text TEXT, response_value VARCHAR(50), -- Yes, No, Sometimes, Often need_identified BOOLEAN NOT NULL DEFAULT FALSE, severity VARCHAR(20), -- MILD, MODERATE, SEVERE -- Resolution status VARCHAR(20) DEFAULT 'OPEN', -- OPEN, REFERRED, RESOLVED, DECLINED resolved_dt DATE, resolution_notes TEXT, identified_dt DATE NOT NULL ); CREATE INDEX idx_sdoh_need_patient ON sdoh_need(patient_id, need_identified); CREATE INDEX idx_sdoh_need_domain ON sdoh_need(sdoh_domain, need_identified); CREATE INDEX idx_sdoh_need_icd10 ON sdoh_need(icd10_z_code); -- SDOH Referral to Community Resource CREATE TABLE sdoh_referral ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), sdoh_need_id UUID REFERENCES sdoh_need(id), patient_id UUID NOT NULL, -- Community Resource organization_name VARCHAR(255), resource_type VARCHAR(100), -- Food bank, housing agency, transportation resource_phone VARCHAR(20), resource_address TEXT, -- Referral Details referral_dt DATE NOT NULL, referral_channel VARCHAR(50), -- PHONE, FAX, PLATFORM, SELF_REFERRAL -- Outcome Tracking accepted_dt DATE, completed_dt DATE, outcome VARCHAR(50), -- ACCEPTED, DECLINED, NO_RESPONSE, COMPLETED outcome_notes TEXT ); CREATE INDEX idx_sdoh_ref_patient ON sdoh_referral(patient_id); CREATE INDEX idx_sdoh_ref_need ON sdoh_referral(sdoh_need_id);
SQL Query Examples
SDOH Needs Prevalence by Domain
SELECT
sdoh_domain,
need_category,
COUNT(DISTINCT patient_id) AS patients_screened,
SUM(CASE WHEN need_identified THEN 1 ELSE 0 END) AS needs_identified,
ROUND(100.0 * SUM(CASE WHEN need_identified THEN 1 ELSE 0 END)
/ COUNT(DISTINCT patient_id), 1) AS prevalence_pct,
SUM(CASE WHEN status = 'REFERRED' THEN 1 ELSE 0 END) AS referred_count
FROM sdoh_need
WHERE identified_dt >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY sdoh_domain, need_category
ORDER BY needs_identified DESC;High-Need Members with Open SDOH Gaps
SELECT sn.patient_id, COUNT(DISTINCT sn.sdoh_domain) AS domain_count, STRING_AGG(DISTINCT sn.need_category, ', ') AS open_needs, MAX(sa.assessment_dt) AS last_screened FROM sdoh_need sn JOIN sdoh_assessment sa ON sa.patient_id = sn.patient_id WHERE sn.need_identified = TRUE AND sn.status = 'OPEN' AND sa.assessment_dt >= CURRENT_DATE - INTERVAL '12 months' GROUP BY sn.patient_id HAVING COUNT(DISTINCT sn.sdoh_domain) >= 2 -- 2+ domains in need ORDER BY domain_count DESC;
SDOH Implementation Best Practices
- •Use standardized screening tools: PRAPARE and AHC-HRSN map to LOINC and ICD-10 — standardization enables aggregation across populations and comparability with benchmarks
- •Code Z codes on claims: Documenting SDOH using ICD-10 Z codes on professional and facility claims creates a longitudinal record that survives outside your EHR
- •Close the loop on referrals: Track whether community resource referrals were accepted and completed — unresolved referrals indicate need for alternative approaches
- •Link SDOH to utilization: Join SDOH assessment data to claims to measure whether addressing social needs reduces ED visits and readmissions
- •Implement FHIR SDOH IG: Use the Gravity Project FHIR Implementation Guide for interoperable SDOH data exchange — especially important for care coordination across organizations
- •Protect patient privacy: SDOH data is sensitive — implement appropriate access controls, obtain patient consent for sharing, and consider de-identification for analytics
Frequently Asked Questions
What are Social Determinants of Health (SDOH)?
SDOH are the non-medical factors that influence health outcomes — the conditions in which people are born, grow, live, work, and age. They include economic stability, education, social and community context, health care access, and neighborhood/built environment. Research shows SDOH account for 30–55% of health outcomes.
How are SDOH documented in healthcare data?
SDOH are documented using ICD-10-CM Z codes (Chapter 21 — Factors influencing health status). Common codes include Z59.0 (homelessness), Z59.4 (lack of adequate food), Z56.0 (unemployment), and Z60.2 (problems related to living alone). Standardized screening tools like PRAPARE and AHC-HRSN capture SDOH systematically.
What is the PRAPARE screening tool?
PRAPARE (Protocol for Responding to and Assessing Patients' Assets, Risks, and Experiences) is a standardized SDOH screening tool developed by NACHC. It covers 21 items across five domains and maps directly to ICD-10-CM Z codes and LOINC codes. It's widely used in FQHCs and increasingly in hospitals.
How does FHIR support SDOH data?
The Gravity Project developed the FHIR SDOH Clinical Care Implementation Guide (IG), which provides standardized FHIR resources for SDOH screening, assessment, goals, and referrals. It uses FHIR Observation (for assessments), Condition (for documented needs), and ServiceRequest (for referrals to community resources).
Why is SDOH data important for value-based care?
SDOH data helps risk-stratify populations, explain variation in outcomes, and design targeted interventions. Payers and providers in value-based contracts are increasingly collecting SDOH data to address root causes of high utilization — food insecurity, housing instability, and transportation barriers often drive avoidable ED visits and readmissions.