Introduction
A healthcare data warehouse will accumulate naming drift over time unless a standard is enforced from the start. DOB in one table, birth_dt in another, member_birth_date in a third — all meaning the same thing. When a HIPAA audit asks you to identify every column containing a date of birth, or when CMS asks why your encounter data does not match your claims submission, the answer usually traces back to naming inconsistency.
ISO-11179 is the international standard that fixes this. It defines how data element names should be constructed so that the name itself communicates the structure, content, and format of the field. Healthcare organizations adopted it because the standard aligns with how EDI transactions, FHIR resources, and CMS reporting requirements are already organized — by domain and data type.
This guide covers the full standard: core rules, standard abbreviations for every major healthcare domain, common mistakes, platform-specific DDL examples, and a SQL audit query you can run against your existing schema today.
What Is ISO-11179?
ISO/IEC 11179 is an international standard published by ISO and the International Electrotechnical Commission for the representation and management of data elements. Part 5 of the standard defines naming and identification rules for data elements — and that is the part that healthcare data engineers care about.
The core idea is that every column name should follow a three-part structure:
Object class: What entity the data describes — mbr (member), clm (claim), prvdr (provider), pt (patient), rx (prescription).
Property: The characteristic being captured — birth (date of birth), paid (paid amount), svc (service), eff (effective).
Representation: The data type or format — dt (date), amt (monetary amount), cd (code), id (identifier), nm (name).
The result is a column name like mbr_birth_dt that tells you immediately: this is a member-domain field, it captures the birth property, and it is stored as a date. You do not need a data dictionary to decode it.
Healthcare adopted ISO-11179 because it was already implicit in EDI standards (837 loops use similar object-property-class patterns), HIPAA transactions, and CMS reporting specifications. Formalizing it through ISO-11179 gives organizations a defensible, auditable standard — not an internal convention that disappears when the original architect leaves.
The Core Rules
Every ISO-11179-compliant healthcare column name follows five rules:
1. Lowercase snake_case only. All characters are lowercase. Words are separated by underscores. No camelCase, no PascalCase, no mixed case. mbr_eff_dt — not MemberEffectiveDate, not mbrEffDt.
2. Standard abbreviations, not full words. Use the approved domain abbreviation set (covered in the next section), not spelled-out words. clm_pd_amt — not claim_paid_amount. Abbreviations must be consistent across the entire schema: if mbr is your member object class, it is mbr everywhere, not mem in some tables and member in others.
3. 30-character maximum. Most SQL platforms impose limits (PostgreSQL truncates identifiers at 63 chars; Snowflake allows 255 but BI tool compatibility degrades above 30). Staying under 30 ensures portability. If a name exceeds 30 characters, abbreviate the property term — icd_diag_cd_1 not icd_diagnosis_code_primary.
4. No special characters or spaces. Only alphanumeric characters and underscores. No hyphens, dots, parentheses, or brackets.
5. Consistent representation suffixes. The suffix signals the data type and eliminates ambiguity at a glance:
| Suffix | Meaning | Example |
|---|---|---|
_dt | Calendar date (no time) | clm_svc_dt |
_ts | Timestamp with time | load_ts |
_amt | Monetary amount | clm_pd_amt |
_cd | Code value (enumerated) | icd_diag_cd |
_id | Unique identifier | mbr_id |
_nm | Name (person or entity) | prvdr_nm |
_nbr | Non-identity number | clm_ln_nbr |
_flg | Boolean true/false flag | elig_actv_flg |
_cnt | Count or quantity | diag_cd_cnt |
_pct | Percentage | copay_pct |
_txt | Free-text narrative | denial_rsn_txt |
_ind | Indicator (binary, like flag) | dual_elig_ind |
Use the mdatool Naming Auditor to validate your schema against these rules automatically — it flags violations and suggests compliant alternatives.
Standard Healthcare Abbreviations by Domain
The following abbreviation sets are used in production healthcare schemas at major payers, health systems, and data vendors. Cross-reference the full term list at the mdatool glossary.
Claims
The claims domain uses the clm_ prefix for claim-level fields, pmt_ for payment tracking, and adj_ for adjustments.
| Non-standard | ISO-11179 Compliant | Notes |
|---|---|---|
| claim_id | clm_id | Claim identifier |
| paid_amount | clm_pd_amt | Paid amount |
| billed_amount | clm_bld_amt | Billed/submitted amount |
| allowed_amount | clm_alwd_amt | Allowed amount |
| service_date | clm_svc_dt | Date of service |
| paid_date | clm_pd_dt | Date claim was paid |
| adjudication_date | clm_adj_dt | Adjudication date |
| claim_status | clm_sts_cd | Status code |
| claim_type | clm_type_cd | Claim type code |
| denial_reason | clm_denial_rsn_cd | Denial reason code |
| line_number | clm_ln_nbr | Claim line sequence |
| diagnosis_1 | icd_diag_cd_1 | Primary ICD-10-CM code |
| procedure_code | cpt_proc_cd | CPT procedure code |
See Healthcare Claims Data Model: Complete SQL Schema for a full Star Schema built with these naming conventions.
Member / Enrollment
The member domain uses mbr_ for member attributes, subscr_ for subscriber (employer/group) fields, and elig_ for eligibility period fields.
| Non-standard | ISO-11179 Compliant | Notes |
|---|---|---|
| member_id | mbr_id | Member identifier (PHI) |
| member_dob | mbr_birth_dt | Date of birth (PHI) |
| first_name | mbr_first_nm | First name (PHI) |
| last_name | mbr_last_nm | Last name (PHI) |
| effective_date | mbr_eff_dt | Coverage effective date |
| termination_date | mbr_term_dt | Coverage termination date |
| zip_code | mbr_zip_cd | ZIP code (PHI) |
| gender | mbr_gndr_cd | Gender code |
| group_number | subscr_grp_nbr | Subscriber group number |
| plan_id | plan_id | Health plan identifier |
| eligibility_flag | elig_actv_flg | Active eligibility flag |
| medicare_status | mcr_elig_cd | Medicare eligibility code |
Clinical
The clinical domain uses pt_ for patient-level fields, diag_ for diagnosis data, and proc_ for procedures.
| Non-standard | ISO-11179 Compliant | Notes |
|---|---|---|
| patient_id | pt_id | Patient identifier (PHI) |
| encounter_id | enc_id | Encounter identifier |
| admit_date | enc_adm_dt | Admission date |
| discharge_date | enc_dsch_dt | Discharge date |
| diagnosis_code | diag_cd | ICD-10-CM diagnosis code |
| diagnosis_count | diag_cd_cnt | Total diagnosis count |
| procedure_date | proc_dt | Procedure date |
| procedure_code | proc_cd | ICD-10-PCS procedure code |
| hcc_code | hcc_cd | HCC model condition code |
| raf_score | raf_score_amt | Risk adjustment factor |
| drg_code | drg_cd | DRG code |
| los_days | enc_los_cnt | Length of stay (days) |
Free Tool
Calculate RAF scores with our free HCC Calculator →
Pharmacy
The pharmacy domain uses rx_ for prescription fields, ndc_ for drug code data, and pharm_ for dispensing pharmacy attributes.
| Non-standard | ISO-11179 Compliant | Notes |
|---|---|---|
| prescription_id | rx_id | Prescription identifier |
| ndc_code | ndc_cd | National Drug Code |
| days_supply | rx_days_sup_cnt | Days supply dispensed |
| quantity | rx_qty_cnt | Quantity dispensed |
| fill_date | rx_fill_dt | Prescription fill date |
| drug_name | drug_nm | Drug name |
| pharmacy_id | pharm_id | Pharmacy identifier |
| pharmacy_npi | pharm_npi | Pharmacy NPI |
| generic_flag | drug_gnrc_flg | Generic drug flag |
| formulary_tier | form_tier_nbr | Formulary tier |
| copay_amount | rx_copay_amt | Copay amount |
| dea_number | rx_dea_nbr | Prescriber DEA number |
Free Tool
Look up any NPI number instantly →
Provider
The provider domain uses prvdr_ as the base prefix, npi_ for NPI-specific columns, and tax_ for tax identifier fields.
| Non-standard | ISO-11179 Compliant | Notes |
|---|---|---|
| provider_id | prvdr_id | Provider identifier |
| provider_npi | prvdr_npi | Provider NPI (10-digit) |
| provider_name | prvdr_nm | Provider name |
| specialty_code | prvdr_spclty_cd | NUCC taxonomy/specialty |
| provider_type | prvdr_type_cd | Provider type code |
| billing_npi | bllng_npi | Billing provider NPI |
| rendering_npi | rndng_npi | Rendering provider NPI |
| group_npi | grp_npi | Group practice NPI |
| tax_id | prvdr_tax_id | Tax identification number |
| state_license | prvdr_lic_cd | State license code |
For NPI validation patterns and provider data architecture, see the NPI Guide.
Common Mistakes and How to Fix Them
These are the naming patterns that appear most often in legacy healthcare schemas and fail ISO-11179 compliance:
| Non-Compliant Name | ISO-11179 Name | Problem |
|---|---|---|
DOB | mbr_birth_dt | Acronym, no object class, no suffix |
PatientID | pt_id | PascalCase, full word |
CLAIM_NUMBER | clm_nbr | All caps, "number" not abbreviated |
provider_NPI | prvdr_npi | Mixed case, "provider" not abbreviated |
MemberEffectiveDate | mbr_eff_dt | CamelCase, no suffix |
paid_Amount | clm_pd_amt | Mixed case, no object class |
date_of_service | clm_svc_dt | Full words, no object class |
Diagnosis_Code_1 | icd_diag_cd_1 | Mixed case, no domain prefix |
is_active | elig_actv_flg | No object class, "is_" prefix is boolean ambiguity |
createdat | load_ts | No underscores, wrong suffix (timestamp not date) |
The most common root cause is that the original schema was designed for a single application (where DOB is obvious from context) and later promoted to a shared data warehouse where that context disappears.
Applying ISO-11179 in Snowflake, BigQuery, and Databricks
Each platform handles case sensitivity differently, which affects how strictly ISO-11179 enforcement works in practice.
Snowflake stores unquoted identifiers as uppercase internally but displays them as lowercase — unless you quote them. Always create healthcare tables without quoting identifiers, and ISO-11179 lowercase names work naturally:
-- Snowflake: ISO-11179 compliant claims table
CREATE TABLE claims.fact_claim_header (
clm_id VARCHAR(50) NOT NULL,
mbr_id VARCHAR(50) NOT NULL, -- PHI
prvdr_npi VARCHAR(10),
clm_svc_dt DATE NOT NULL,
clm_pd_dt DATE,
clm_bld_amt NUMBER(12,2),
clm_alwd_amt NUMBER(12,2),
clm_pd_amt NUMBER(12,2),
clm_sts_cd VARCHAR(20),
icd_diag_cd_1 VARCHAR(7),
icd_diag_cd_2 VARCHAR(7),
icd_diag_cd_3 VARCHAR(7),
load_ts TIMESTAMP_NTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_fact_clm PRIMARY KEY (clm_id)
);
BigQuery is case-insensitive for identifiers and uses ANSI SQL types. Replace Snowflake's NUMBER(12,2) with NUMERIC and TIMESTAMP_NTZ with DATETIME:
-- BigQuery: ISO-11179 compliant claims table
CREATE TABLE claims.fact_claim_header (
clm_id STRING NOT NULL,
mbr_id STRING NOT NULL,
prvdr_npi STRING,
clm_svc_dt DATE NOT NULL,
clm_pd_dt DATE,
clm_bld_amt NUMERIC,
clm_alwd_amt NUMERIC,
clm_pd_amt NUMERIC,
clm_sts_cd STRING,
icd_diag_cd_1 STRING,
icd_diag_cd_2 STRING,
icd_diag_cd_3 STRING,
load_ts DATETIME
);
Databricks (Delta Lake) uses DECIMAL for financial amounts and supports COMMENT clauses — use them to document PHI columns directly in the DDL:
-- Databricks: ISO-11179 compliant claims table
CREATE TABLE claims.fact_claim_header (
clm_id STRING NOT NULL COMMENT 'Claim identifier',
mbr_id STRING NOT NULL COMMENT 'Member ID — PHI, mask in non-prod',
prvdr_npi STRING COMMENT 'Rendering provider NPI',
clm_svc_dt DATE NOT NULL COMMENT 'Date of service',
clm_pd_dt DATE,
clm_bld_amt DECIMAL(12,2),
clm_alwd_amt DECIMAL(12,2),
clm_pd_amt DECIMAL(12,2),
clm_sts_cd STRING,
icd_diag_cd_1 STRING,
icd_diag_cd_2 STRING,
icd_diag_cd_3 STRING,
load_ts TIMESTAMP
)
USING DELTA
PARTITIONED BY (YEAR(clm_svc_dt));
Use the mdatool DDL Converter to translate schemas between these platforms automatically without manually rewriting type mappings.
Auditing Your Existing Schema
If you are applying ISO-11179 to a legacy schema, start with an audit before migrating. This query surfaces columns in Snowflake's information schema that are likely non-compliant — camelCase, all-caps, or missing standard suffixes:
-- Snowflake: find columns that are likely ISO-11179 non-compliant
SELECT
table_schema,
table_name,
column_name,
data_type,
CASE
WHEN column_name != LOWER(column_name) THEN 'mixed_case'
WHEN column_name LIKE '%[A-Z]%' THEN 'contains_uppercase'
WHEN column_name NOT LIKE '%\_%' THEN 'no_underscore_separator'
WHEN column_name NOT RLIKE '.*_(dt|ts|amt|cd|id|nm|nbr|flg|cnt|pct|txt|ind)$'
THEN 'missing_type_suffix'
ELSE 'ok'
END AS compliance_status
FROM information_schema.columns
WHERE table_schema NOT IN ('INFORMATION_SCHEMA', 'PUBLIC')
AND table_name NOT LIKE 'SYS_%'
ORDER BY compliance_status, table_schema, table_name, column_name;
Run this against your warehouse and export the results. The Naming Auditor automates this and generates a full compliance report with suggested replacements for every violation.
Migration strategy: Rename columns using views first — create ISO-11179 compliant views over non-compliant base tables, migrate downstream consumers to the view, then rename the base tables in a maintenance window. This decouples the migration from application deployments and gives you a rollback path if a consuming system breaks.
-- Step 1: Create compliant view over legacy table
CREATE OR REPLACE VIEW claims.v_fact_claim_header AS
SELECT
ClaimID AS clm_id,
MemberDOB AS mbr_birth_dt,
PaidAmount AS clm_pd_amt,
DateOfService AS clm_svc_dt,
ProviderNPI AS prvdr_npi
FROM claims_legacy.ClaimHeader;
-- Step 2: Migrate consumers to the view, then rename the base table
ALTER TABLE claims_legacy.ClaimHeader RENAME TO fact_claim_header;
Frequently Asked Questions
What is ISO-11179 naming convention?
ISO/IEC 11179 is an international standard for naming and defining data elements. The naming convention it defines — object class + property + representation — produces column names that are self-documenting, unambiguous, and consistent across systems. In healthcare, it means that mbr_birth_dt is always a member's date of birth, clm_pd_amt is always a paid claim amount, and prvdr_npi is always a provider NPI — regardless of which table, which system, or which team created the column.
Why use ISO-11179 for healthcare data?
Healthcare data is consumed by many systems simultaneously — HIPAA audits, CMS submissions, BI tools, ML pipelines, and operational applications. Each consumer expects to find PHI columns, financial amounts, and code values in predictable locations with predictable names. ISO-11179 creates that predictability. It also makes HIPAA compliance easier: when PHI columns follow a naming pattern (all end in _nm, _dt, or _id with a patient object class prefix), automated PHI discovery tools can identify them reliably without manual tagging.
What is the correct abbreviation for patient identifier?
The ISO-11179 compliant name for a patient identifier is pt_id. In payer data warehouses where the entity is a health plan member rather than a clinical patient, use mbr_id. In claims data, mbr_id refers to the member on the claim and is a PHI field that requires HIPAA-compliant handling. The mdatool glossary contains the full approved abbreviation set for every healthcare domain.
How do I audit my schema for naming violations?
Run the compliance query in the section above against your Snowflake, BigQuery, or Databricks information schema. It identifies four violation types: mixed case, uppercase letters, missing underscore separators, and missing type suffixes. For a complete automated audit with suggested replacements, use the Naming Auditor — it checks all four rules, applies domain-specific context (so it knows npi does not need a _cd suffix even though it is a code-like value), and exports a prioritized remediation list.
Does Snowflake require specific naming conventions?
Snowflake does not enforce any naming convention — it accepts any valid identifier. But Snowflake's behavior makes ISO-11179 compliance important in practice. Snowflake stores unquoted identifiers as uppercase internally. If developers use quoted identifiers ("MemberDOB") to preserve mixed case, every query must also use quoted references — creating brittle SQL that breaks when the quoting is omitted. Using ISO-11179 lowercase snake_case without quotes eliminates this problem entirely. Unquoted lowercase names work consistently across Snowflake SQL, dbt models, Looker LookML, and any other tooling that reads Snowflake.
mdatool Team
The mdatool team builds free engineering tools for healthcare data architects, analysts, and engineers working across payer, provider, and life sciences data.
Ready to improve your data architecture?
Free tools for DDL conversion, SQL analysis, naming standards, and more.
Get weekly healthcare data engineering tips
Practical guides on data modeling, SQL standards, and healthcare domain conventions — straight to your inbox.
No spam. Unsubscribe any time.