Healthcare Facility and Workforce (SEA)
Overview
A registry-grade model of six national health systems. The national classification schemes (Indonesia's Kelas A to D, the Philippine DOH hospital levels, Thailand's regional, general and community tiers, and their Malaysian, Singaporean and Vietnamese counterparts) are modelled faithfully and normalised onto five cross-country tiers, populated with regions, districts and facilities down to village clinic level. 9,000 facilities carry ten years of annual capacity, department, accreditation, staffing and utilisation history, a specialist staffing matrix that covers every hospital-tier facility against all 42 specialties so that a zero is a finding rather than a missing row, and district-level disease burden joined to the same geography as the facilities. The 2019 to 2022 period is monthly: COVID bed conversions, admissions, ventilator use, oxygen status, service disruption and vaccination coverage for every facility for every month, with wave timing that differs by country and a 2022 that does not return cleanly to the 2019 baseline. The tables reconcile by construction: workforce density is exactly reproducible from facility staffing, specialist counts never exceed physician headcounts, catchment populations sum to district populations, and every declared relationship is a real foreign key. It is operational and workforce data about facilities, built for health-system analytics, capacity planning models, ETL pipelines and reporting logic. The licence and disclosure sections state the provenance of the data.
Analytics
Select a country on the map to see the figures the dataset records for it.
Select a country on the map to see the figures the dataset records for it.
Row Counts by Table
Counted from the files that ship, not estimated.
| Table | Rows |
|---|---|
| facilities | 9,000 |
| facility_capacity | 90,000 |
| facility_departments | 25,894 |
| facility_accreditations | 6,579 |
| facility_staffing | 911,860 |
| specialist_staffing | 1,146,180 |
| workforce_density | 2,760 |
| catchments | 11,671 |
| facility_utilisation | 90,000 |
| referral_flows | 102,010 |
| facility_covid_capacity | 432,000 |
| covid_admissions | 432,000 |
| service_disruption | 432,000 |
| vaccination_coverage | 6,622 |
| covid_waves | 24 |
| disease_burden | 2,280,000 |
| population_health_indicators | 2,760 |
| condition_codes | 95 |
| hf_countries | 6 |
| hf_admin_regions | 276 |
| hf_districts | 2,400 |
| facility_tiers | 5 |
| facility_classes | 33 |
| ownership_types | 12 |
| accreditation_bodies | 8 |
| hf_specialties | 42 |
| staff_categories | 18 |
Table Relationships
One parent record and seven child tables, each joined back on the same key.
Schema
Every table ships with typed columns, referential integrity, and documentation.
| Column | Type | Description |
|---|---|---|
| facility_id | varchar(16) | Facility number. Primary key; foreign key on every facility-grain table. |
| facility_code | varchar(24) | Registry-style code, <country>-<region>-<sequence><check letter>. Follows no real national coding scheme. |
| facility_name | varchar(48) | Generated facility name: a facility-type frame in the country's own idiom around an invented place name. One name is deliberately shared by two unrelated facilities. |
| district_id | varchar(16) | District the facility sits in. |
| class_id | varchar(32) | National classification of the facility. Consistent with its capacity and department mix per the class minimums; the build re-verifies it. |
| tier_id | varchar(8) | Cross-country tier, derived from the class. |
| ownership_id | varchar(16) | Who owns and operates the facility. |
+8 more columns in facilities. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| capacity_id | varchar(16) | Capacity row key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| year | integer | Calendar year of this capacity snapshot, 2015 to 2024. |
| total_beds | integer | Total inpatient beds. Never below the facility class minimum. |
| icu_beds | integer | Intensive care beds. Zero at primary-care tiers and at many district hospitals. |
| isolation_beds | integer | Isolation beds. Jump in 2020 and 2021 through conversion and only partly revert afterwards. |
| maternity_beds | integer | Maternity beds, including the small maternity units at health centres. |
+8 more columns in facility_capacity. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| dept_id | varchar(16) | Department row key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| specialty_id | varchar(8) | The specialty this department provides. |
| opened_year | integer | Year the department opened. Never before the facility was established. |
| inpatient_capable | boolean | True when the department admits inpatients; false for diagnostic and support departments and at outpatient tiers. |
| twenty_four_hour_flag | boolean | True for round-the-clock departments: emergency, obstetrics and anesthesiology at the referral tiers. |
| Column | Type | Description |
|---|---|---|
| accreditation_id | varchar(16) | Accreditation cycle key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| body_id | varchar(16) | The accrediting body. |
| level_achieved | varchar(32) | The level awarded in this cycle, from the body's own level list. |
| awarded_date | date | Date the accreditation was awarded. |
| expiry_date | date | Date it expires, three years after award. |
| status | varchar(16) | current, expired or lapsed. Lapsed means the facility let it run out without renewing, which real registries are full of. |
+2 more columns in facility_accreditations. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| staffing_id | varchar(16) | Staffing row key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| category_id | varchar(16) | The staff category counted in this row. |
| year | integer | Calendar year, 2015 to 2024. |
| headcount | integer | People employed in the category. Zero with open vacancies is an unfilled establishment, the rural staffing finding, and is present on purpose. |
| fte | numeric(7,1) | Full-time equivalents. In 2021 a deliberate cluster of facilities shows headcount rising while FTE falls: isolation and secondment, not an error. |
| vacancies | integer | Unfilled established posts. |
+3 more columns in facility_staffing. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| spec_staffing_id | varchar(16) | Specialist staffing row key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| specialty_id | varchar(8) | The specialty counted in this row. |
| year | integer | Calendar year, 2015 to 2024. |
| consultant_count | integer | Consultants on staff. The matrix covers every hospital-tier facility against all 42 specialties, so a zero is the scarcity finding, not a missing row. Totals never exceed the facility's specialist physician headcount. |
| trainee_count | integer | Trainees in the specialty. Only teaching facilities have any. |
| visiting_count | integer | Visiting or sessional specialists, the standard workaround where no consultant is resident. |
+2 more columns in specialist_staffing. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| density_id | varchar(8) | Density row key. Primary key. |
| region_id | varchar(8) | Stable fictional identifier for region; use it for declared joins. |
| year | integer | Calendar year, 2015 to 2024. |
| doctors_per_10k | numeric(6,2) | Doctors per 10,000 region population. Exactly reproducible from facility_staffing; the build re-verifies it. |
| nurses_per_10k | numeric(6,2) | Nurses per 10,000 region population. Exactly reproducible from facility_staffing. |
| specialists_per_100k | numeric(7,2) | Specialist physicians per 100,000 region population. Exactly reproducible from facility_staffing. |
| who_threshold_flag | boolean | True when combined doctor and nurse density clears a WHO-style floor of 44.5 per 10,000. The threshold style is public classification knowledge. |
+1 more columns in workforce_density. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| catchment_id | varchar(16) | Catchment row key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| district_id | varchar(16) | The district whose population this row serves. Per district, the population_served values sum exactly to the district population. |
| population_served | integer | People in this district served by this facility. |
| travel_time_band | varchar(16) | Coded travel time from the served population to the facility, UNDER_30_MIN to OVER_4_HOURS. |
| catchment_type | varchar(16) | primary for the facility's home district, secondary for referral coverage of other districts. |
| Column | Type | Description |
|---|---|---|
| utilisation_id | varchar(16) | Utilisation row key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| year | integer | Calendar year, 2015 to 2024. |
| admissions | integer | Inpatient admissions that year. |
| outpatient_visits | integer | Outpatient visits that year. The 2020 drop is the deepest in the panel. |
| emergency_visits | integer | Emergency visits that year. |
| surgeries | integer | Surgical procedures that year. 2020 is materially below 2019 in every country and 2022 does not fully recover in half of them. |
+5 more columns in facility_utilisation. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| flow_id | varchar(16) | Referral flow row key. Primary key. |
| from_facility_id | varchar(16) | The referring facility. |
| to_facility_id | varchar(16) | The receiving facility, one or two tiers up the chain. |
| year | integer | Calendar year, 2015 to 2024. |
| referral_count | integer | Referrals along this edge that year. Dips in 2020 and 2021. |
| dominant_specialty_id | varchar(8) | The specialty most of the edge's referrals belong to. |
| median_distance_km | numeric(7,1) | Road distance between the two facilities in kilometres, derived from their synthetic coordinates. |
+1 more columns in referral_flows. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| covid_capacity_id | varchar(16) | COVID capacity row key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| year_month | varchar(16) | Month of this snapshot, 2019-01 to 2022-12 with no gaps. Import as text: spreadsheets convert values like 2019-01 to dates. |
| covid_beds | integer | Beds designated for COVID care that month. Zero through 2019 and at outpatient tiers. |
| covid_icu_beds | integer | ICU beds designated for COVID care. |
| ventilators_available | integer | Ventilators the facility holds. |
| ventilators_in_use | integer | Ventilators in use that month. Never exceeds the available count. |
+3 more columns in facility_covid_capacity. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| covid_admission_id | varchar(16) | COVID admissions row key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| year_month | varchar(16) | Month of this row, 2019-01 to 2022-12 with no gaps. Import as text: spreadsheets convert values like 2019-01 to dates. |
| admissions | integer | COVID admissions that month. |
| icu_admissions | integer | Of the admissions, how many went to ICU. Never exceeds admissions. |
| discharges | integer | COVID discharges that month. |
| deaths | integer | COVID deaths that month. |
+3 more columns in covid_admissions. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| disruption_id | varchar(16) | Disruption row key. Primary key. |
| facility_id | varchar(16) | Stable fictional identifier for facility; use it for declared joins. |
| year_month | varchar(16) | Month of this row, 2019-01 to 2022-12 with no gaps. Import as text: spreadsheets convert values like 2019-01 to dates. |
| elective_procedures_deferred | integer | Elective procedures deferred that month. 2020 collapses in every country. |
| outpatient_vs_baseline_pct | numeric(6,1) | Outpatient volume as a percentage of the 2019 baseline. Exactly 100 through the baseline year. |
| immunisation_sessions_cancelled | integer | Routine immunisation sessions cancelled that month, concentrated at primary-care facilities. |
| screening_suspended_flag | boolean | True when screening programmes were suspended that month. |
+1 more columns in service_disruption. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| coverage_id | varchar(16) | Coverage row key. Primary key. |
| region_id | varchar(8) | Stable fictional identifier for region; use it for declared joins. |
| year_month | varchar(16) | Month of this row, 2021-01 to 2022-12. One region is deliberately missing two months. Import as text: spreadsheets convert values like 2021-01 to dates. |
| first_dose_pct | numeric(5,1) | First-dose coverage of the eligible population, in percent. Monotonic non-decreasing within a region. |
| second_dose_pct | numeric(5,1) | Second-dose coverage, in percent. Monotonic non-decreasing within a region. |
| booster_pct | numeric(5,1) | Booster coverage, in percent. Monotonic non-decreasing within a region. |
| campaign_phase | varchar(32) | Coded rollout phase, from health workers through boosters. |
+2 more columns in vaccination_coverage. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| wave_id | varchar(8) | Wave key. Primary key. |
| country_code | varchar(8) | ISO 3166-1 alpha-2 country code. |
| wave_number | varchar(8) | Wave sequence within the country, 1 to 4. |
| start_month | varchar(16) | Month the wave starts, as year-month. |
| peak_month | varchar(16) | Month the wave peaks. |
| end_month | varchar(16) | Month the wave ends. |
| variant_label | varchar(16) | Deliberately generic variant era label: early, alpha_like, delta_like or omicron_like. |
+2 more columns in covid_waves. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| burden_id | varchar(16) | Burden row key. Primary key. |
| district_id | varchar(16) | Stable fictional identifier for district; use it for declared joins. |
| year | integer | Calendar year, 2015 to 2024. |
| condition_code | varchar(8) | The condition this row measures. |
| incidence_per_100k | numeric(8,1) | Generated new cases per 100,000 district population. Zero for COVID-19 before 2020 is a real zero, not a gap. |
| prevalence_per_100k | numeric(8,1) | Generated existing cases per 100,000. Several times incidence for chronic conditions, below it for acute ones. |
| daly_band | varchar(16) | Coded disease burden band for the condition: LOW, MEDIUM, HIGH or VERY_HIGH. |
+2 more columns in disease_burden. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| indicator_id | varchar(8) | Indicator row key. Primary key. |
| region_id | varchar(8) | Stable fictional identifier for region; use it for declared joins. |
| year | integer | Calendar year, 2015 to 2024. |
| life_expectancy_years | numeric(5,1) | Generated life expectancy at birth for the region. Dips through 2020 and 2021 and only partly recovers. |
| infant_mortality_per_1k | numeric(5,1) | Generated infant deaths per 1,000 live births. |
| maternal_mortality_per_100k | numeric(6,1) | Generated maternal deaths per 100,000 live births. |
| immunisation_coverage_pct | numeric(5,1) | Generated routine immunisation coverage in percent. The COVID-era dip does not fully recover by 2024: the scar is deliberate. |
+6 more columns in population_health_indicators. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| condition_code | varchar(8) | Condition key. Primary key. The codes are this dataset's own and follow no real coding system. |
| condition_name | varchar(48) | The condition in generic medical vocabulary. |
| condition_category | varchar(24) | communicable, non_communicable, injury or maternal_neonatal. |
| chronic_flag | boolean | True when the condition is chronic, which drives the prevalence-to-incidence ratio in disease_burden. |
| Column | Type | Description |
|---|---|---|
| country_code | varchar(8) | ISO 3166-1 alpha-2 country code. Primary key; the only real-world identity in the dataset. |
| country_name | varchar(16) | Country name in English. |
| iso3_code | varchar(8) | ISO 3166-1 alpha-3 code for the same country. |
| population_band | varchar(16) | Coded population size band. The band is the statement; no exact national population ships anywhere in the dataset. |
| population_band_description | varchar(56) | What the population band means in words. |
| income_group | varchar(16) | World-Bank-style income classification code: HIC, UMIC or LMIC. |
| income_group_description | varchar(40) | What the income group code means in words. |
+5 more columns in hf_countries. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| region_id | varchar(8) | Generated region identifier, <country>-R<seq>. Primary key; foreign key on every region-grain table. |
| country_code | varchar(8) | ISO 3166-1 alpha-2 country code. |
| region_name | varchar(24) | Generated region name in the country's own naming style. Invented; collisions with real first-level areas are a build failure. |
| region_type | varchar(24) | The country's own word for this unit: provinsi, negeri, planning_area, changwat, province or tinh. |
| capital_flag | boolean | True for exactly one region per country, the capital region. Specialist concentration follows it. |
| urbanisation_band | varchar(16) | URBAN, MIXED or RURAL. Drives facility placement, staffing levels and vaccination rollout speed. |
| population | integer | Generated population of the region. Realistic in ordering and proportion only; region populations partition the country total exactly. |
+4 more columns in hf_admin_regions. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| district_id | varchar(16) | Generated district identifier, <region>-D<seq>. Primary key. |
| region_id | varchar(8) | Stable fictional identifier for region; use it for declared joins. |
| district_name | varchar(24) | Generated district name. Invented; below first level an accidental match with some real place cannot be ruled out and is disclosed. |
| district_type | varchar(24) | The country's own administrative word for the district: kabupaten, kota, daerah, subzone, amphoe, municipality, component_city, huyen or quan. |
| settlement_type | varchar(16) | urban, peri_urban, rural or remote. Drives facility mix, staffing shortfalls and disease burden gradients. |
| population | integer | Generated district population. District populations partition their region's population exactly, which is what makes the catchment reconciliation assertable. |
| households | integer | Generated household count for the district. |
+3 more columns in hf_districts. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| tier_id | varchar(8) | Cross-country tier key, T1 to T5. The column a cross-country analysis joins on. |
| tier_code | varchar(24) | Stable code for the tier: NATIONAL_REFERRAL down to CLINIC. |
| tier_name | varchar(24) | The tier in words. |
| tier_description | varchar(168) | What sits at this tier and what it refers upward. |
| Column | Type | Description |
|---|---|---|
| class_id | varchar(32) | National class key, <country>-<class code>. Primary key. |
| country_code | varchar(8) | ISO 3166-1 alpha-2 country code. |
| class_code | varchar(24) | The class within its national scheme: KELAS_A, DOH_LEVEL_3, REGIONAL and their peers. The schemes are real public classification; the facilities filling them are not. |
| class_name | varchar(48) | The class as the national scheme names it. |
| tier_id | varchar(8) | The one cross-country tier this class maps to. The mapping is total: every class maps to exactly one tier. |
| class_description | varchar(152) | What the class means within its country's scheme. |
| min_beds | integer | This dataset's regulatory floor for the class. Every facility of the class carries at least this many beds in every year; the build re-verifies it. |
+2 more columns in facility_classes. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| ownership_id | varchar(16) | Ownership form key. Primary key. |
| ownership_name | varchar(40) | The ownership form in words. |
| ownership_description | varchar(120) | What the ownership form means. |
| Column | Type | Description |
|---|---|---|
| body_id | varchar(16) | Accreditation body key. Primary key. |
| country_code | varchar(8) | Country the body operates in. Empty for the two international bodies, which accredit across all six. |
| body_name | varchar(56) | Generated body name. The bodies are invented, because real accreditation bodies are organisations; the schemes they run are shaped like real national programmes. |
| scheme_name | varchar(48) | Name of the accreditation scheme the body runs. |
| levels_available | varchar(56) | The ordered levels the scheme can award, pipe-separated. |
| international_flag | boolean | True for the two international bodies. |
| Column | Type | Description |
|---|---|---|
| specialty_id | varchar(8) | Specialty key, SP-<code>. Primary key. The codes are this dataset's own. |
| specialty_name | varchar(48) | The clinical specialty in words. |
| parent_group | varchar(16) | medical, surgical, diagnostic or support. |
| training_years | integer | Years of postgraduate training the specialty takes, used to shape scarcity. |
| scarcity_band | varchar(16) | COMMON, SCARCE or CAPITAL. Drives geographic concentration: capital-band specialties effectively exist only in national referral centres. |
| scarcity_band_description | varchar(104) | What the scarcity band means for where the specialty is found. |
| Column | Type | Description |
|---|---|---|
| category_id | varchar(16) | Staff category key, STC-<code>. Primary key. |
| category_name | varchar(32) | The workforce category in words. |
| clinical_group | varchar(16) | DOCTOR, NURSE, ALLIED or NON_CLINICAL. The grain the density and specialist assertions aggregate over. |
| category_description | varchar(128) | Who is counted in this category. |
Sample Data
A snapshot of real rows from the dataset (values are fully synthetic).
| facility_id | facility_code | facility_name | class_id | tier_id | ownership_id | established_year | teaching_flag | referral_flag | status |
|---|---|---|---|---|---|---|---|---|---|
| HF000001 | ID-R01-00001E | RSUP Cilestari | ID-KELAS_A | T1 | OWN-GN | 1957 | true | true | active |
| HF000002 | ID-R01-00002L | RSUP Cilestari II | ID-KELAS_A | T1 | OWN-SOE | 1937 | true | true | active |
| HF000003 | ID-R01-00003S | RSUP Cilestari III | ID-KELAS_A | T1 | OWN-SOE | 1924 | true | true | active |
class_id codes
Every code this dataset uses, with what it means. The same mapping ships in the files.
| class_id | country | class_name | tier | class_description | min_beds | required_specialties |
|---|---|---|---|---|---|---|
| ID-KELAS_A | ID | Rumah Sakit Kelas A | T1 | Top national classification. Full subspecialty and teaching capability; the referral end point of the system. | 400 | 18 |
| ID-KELAS_B | ID | Rumah Sakit Kelas B | T2 | Provincial referral classification with broad specialist services and intensive care. | 200 | 11 |
| ID-KELAS_C | ID | Rumah Sakit Kelas C | T3 | District hospital classification. The four base specialist services plus emergency and inpatient care. | 100 | 4 |
| ID-KELAS_D | ID | Rumah Sakit Kelas D | T3 | Small district hospital classification, general practice led with limited specialist visits. | 25 | 2 |
| ID-KLINIK | ID | Klinik Pratama | T5 | Licensed outpatient clinic, mostly private. | 0 | 0 |
| ID-PUSKESMAS | ID | Pusat Kesehatan Masyarakat | T4 | Sub-district primary care centre. Outpatient, maternal and child health, immunisation; some carry a few observation beds. | 0 | 0 |
| MY-DISTRICT_MINOR | MY | District hospital without specialists | T3 | District hospital run by medical officers, visited by specialists on rotation. | 30 | 0 |
| MY-DISTRICT_SPECIALIST | MY | District hospital with specialists | T3 | District hospital carrying resident specialists in the base disciplines. | 80 | 4 |
| MY-KLINIK_DESA | MY | Klinik Desa | T5 | Village-level community clinic run by nurses and midwives. | 0 | 0 |
| MY-KLINIK_KESIHATAN | MY | Klinik Kesihatan | T4 | Public primary care health clinic. | 0 | 0 |
| MY-NATIONAL_REFERRAL | MY | National referral hospital | T1 | Federal tertiary referral and teaching centre. | 500 | 20 |
| MY-STATE_GENERAL | MY | State general hospital | T2 | The specialist referral hospital of one state. | 250 | 12 |
| PH-BARANGAY_STATION | PH | Barangay health station | T5 | Village health post staffed by midwives and health workers. | 0 | 0 |
| PH-DOH_LEVEL_1 | PH | Level 1 hospital | T3 | First-referral hospital with the base clinical services and operating capability. | 25 | 2 |
| PH-DOH_LEVEL_2 | PH | Level 2 hospital | T2 | Departmentalised hospital with intensive care and the major specialist departments. | 100 | 6 |
| PH-DOH_LEVEL_3 | PH | Level 3 hospital | T1 | Teaching and training hospital with subspecialty and tertiary clinical services. | 300 | 15 |
| PH-INFIRMARY | PH | Infirmary | T4 | Small inpatient unit for uncomplicated cases, below Level 1. | 6 | 0 |
| PH-RURAL_HEALTH_UNIT | PH | Rural health unit | T4 | Municipal primary care and public health unit. | 0 | 0 |
| SG-ACUTE_GENERAL | SG | Acute general hospital | T1 | Acute tertiary hospital within a public healthcare cluster. | 400 | 18 |
| SG-COMMUNITY_HOSPITAL | SG | Community hospital | T3 | Step-down inpatient care, rehabilitation and sub-acute beds. | 50 | 1 |
| SG-POLYCLINIC | SG | Polyclinic | T4 | Public primary care group practice. | 0 | 0 |
| SG-PRIVATE_CLINIC | SG | Private clinic | T5 | Private general practice or specialist clinic. | 0 | 0 |
| SG-SPECIALIST_CENTRE | SG | National specialty centre | T2 | Single-discipline national centre operating alongside the acute hospitals. | 100 | 3 |
| TH-COMMUNITY | TH | Community hospital | T3 | District-level hospital, first-level inpatient care. | 30 | 1 |
| TH-GENERAL | TH | General hospital | T2 | Standard-level provincial hospital with the major specialist services. | 150 | 8 |
| TH-HEALTH_PROMOTING | TH | Health promoting hospital | T4 | Sub-district primary care and prevention unit. | 0 | 0 |
| TH-PRIVATE_CLINIC | TH | Private clinic | T5 | Licensed private outpatient practice. | 0 | 0 |
| TH-REGIONAL | TH | Regional hospital | T1 | Advanced-level hospital serving a group of provinces with full subspecialty care. | 500 | 18 |
| VN-CENTRAL | VN | Central hospital | T1 | Ministry-level hospital at the top of the four-level system. | 500 | 18 |
| VN-COMMUNE_STATION | VN | Commune health station | T4 | Commune-level primary care station, the base of the system. | 0 | 0 |
| VN-DISTRICT | VN | District hospital | T3 | District-level hospital providing first-level inpatient care. | 50 | 2 |
| VN-PRIVATE_CLINIC | VN | Private clinic | T5 | Licensed private outpatient practice, concentrated in cities. | 0 | 0 |
| VN-PROVINCIAL | VN | Provincial hospital | T2 | The general hospital of one province. | 200 | 10 |
Version History
| v1.0.0 | 2026-08-10 | First release. 9,000 generated facilities across six Southeast Asian countries with ten years of capacity, staffing, utilisation and accreditation history, a full hospital-by-specialty scarcity matrix, district-level disease burden, and 48 months of facility-level COVID operations data. |