@geoalgeria/sante
v2.3.0
Published
Public health establishments of Algeria: hospitals (EPH), proximity health (EPSP), specialized hospitals (EHS) and university hospitals (CHU) from the Ministry of Health, bilingual FR/AR, geocoded via OpenStreetMap & Wikidata, with commune/wilaya linkage.
Downloads
659
Maintainers
Readme
@geoalgeria/sante
Algeria's public health establishments, as data you can install.
657 public health establishments across all 58 wilayas with health directorates, public hospitals (EPH), proximity-health establishments (EPSP), specialized hospitals (EHS) and university hospitals (CHU) from the Ministry of Health (MoH), bilingual French/Arabic, 587 geocoded (122 to a precise OpenStreetMap/Wikidata point, 11 verified by hand, 454 to a commune centroid) with commune/wilaya linkage. Shipped as JSON, CSV, GeoJSON, and TypeScript. Part of GeoAlgeria.
The community tier lives in
@geoalgeria/cliniques, and the two must not be summed. This package is the registry tier: the public establishments the Ministry of Health runs, official and closed.cliniquesis the community tier: 1,915 polycliniques, salles de soins, centres de santé, maternités and clinics mapped by OpenStreetMap volunteers, partial by nature. Every OSM element a record here references is excluded there by construction, so no place is published twice under the same element, but the two describe different tiers of a health system and adding 657 to 1,915 counts nothing real.
npm install @geoalgeria/santeimport sante from "@geoalgeria/sante";
const all = sante.sante(); // 657 establishments
// Public hospitals in a wilaya (joins GeoAlgeria's wilaya_code)
const ephAlger = all.filter((e) => e.wilaya_code === "16" && e.type === "eph");
// Only the geocoded ones, ready to map
const mappable = all.filter((e) => e.lat != null);What you can build
- Hospital & clinic locators – coordinates on 587 of 657 records, ready for a map or nearest-facility search.
- Bilingual health directories – French and Arabic names, official type and wilaya for every establishment.
- Coverage & planning analysis – count establishments by type per commune/wilaya across the whole country.
What's inside
| Dataset | Count | Coordinates | Notes | | --- | --- | --- | --- | | Health establishments | 657 | 587 geocoded | 58 wilayas, 594 bilingual |
By type
| Type | Count | Meaning |
| --- | --- | --- |
| eph | 252 | Établissement Public Hospitalier – public hospital |
| epsp | 280 | Établissement Public de Santé de Proximité – proximity health |
| ehs | 103 | Établissement Hospitalier Spécialisé – specialized hospital |
| chu | 17 | Centre Hospitalo-Universitaire – university hospital |
| hopital | 5 | other public hospital |
By coordinate precision (geo_precision)
| Value | Count | Meaning |
| --- | --- | --- |
| exact | 133 | precise point: an OSM or Wikidata facility in the commune, or a location verified by hand |
| approximate | 454 | the establishment's commune centroid |
| null | 70 | locality not resolved to a commune – no coordinates (lat/lng also null) |
By coordinate method (geo_method)
| Value | Count | Meaning |
| --- | --- | --- |
| osm_point | 119 | precise point from an OpenStreetMap facility in the commune |
| wikidata_point | 3 | precise point from a Wikidata facility in the commune |
| commune_centroid | 454 | the establishment's commune centroid (approximate) |
| owner_verified | 11 | location read off the map by the project owner, through the reviewed-correction ledger |
| null | 70 | no method – record has no coordinate |
The registry is official; the coordinates are best-effort. Names, type and wilaya come from the Ministry of Health. The MoH publishes no coordinates, so GeoAlgeria derives them, see Source & method below. Counts move as the MoH, OpenStreetMap and Wikidata are edited; each rebuild reflects their current state.
Formats
The npm package ships the JSON (importable directly):
import sante from "@geoalgeria/sante/data/sante.json" with { type: "json" };
// or via CDN, no install:
// https://cdn.jsdelivr.net/npm/@geoalgeria/sante/data/sante.jsonThe loaders and record shapes are fully typed, TypeScript definitions ship in the package:
import sante, { type HealthEstablishment } from "@geoalgeria/sante";
const all: HealthEstablishment[] = sante.sante();CSV and GeoJSON are in the repo under data/ and bundled in every
GitHub Release:
data/
sante.json # 657 establishments (array)
metadata.json # sources, counts, coverage, updated
retired-ids.json # ids no record may hold again, and where each one's data went
csv/sante.csv # repo + Release bundle (not in npm tarball)
geojson/sante.geojson # Point features (geocoded records only)Record shape
{
"id": "01-ehs-02",
"name": "Etablissement Hospitalier Spécialisé Psychiatrie Adrar",
"name_fr": "Etablissement Hospitalier Spécialisé Psychiatrie Adrar",
"name_ar": "المؤسسة الاستشفائية المتخصصة في الأمراض العقلية أدرار",
"wilaya_code": "01",
"commune_code": "0101",
"commune": "Adrar",
"lat": 27.875834,
"lng": -0.307533,
"geo_precision": "exact",
"geo_method": "osm_point",
"source": "msp",
"refs": {
"osm": "way/432370657",
"msp": "3588"
},
"type": "ehs",
"type_label_fr": "Établissement Hospitalier Spécialisé",
"type_label_ar": "المؤسسة الاستشفائية المتخصصة",
"sector": "public",
"slug": "etablissement-hospitalier-specialise-psychiatrie-adrar"
}id is a stable {wilaya_code}-{type}-{seq} key synthesized by GeoAlgeria (the
MoH publishes no establishment code), opaque, unique within sante.json.
name is the French name where available, else Arabic. type is derived from
the establishment's title; wilaya_code from the MoH's wilaya tag. sector is
"public" for the whole MoH registry, which lists no private establishment at
all; the private facilities OpenStreetMap records live in
@geoalgeria/cliniques.
source is always "msp" (the Ministry of Health registry);
refs carries the per-provenance ids that contributed the record, msp
always, plus msp_twin where the registry published the same establishment a
second time in the other language and msp_repeat where the registry entered it
a second time in the same language, plus osm or wikidata when the coordinate
was upgraded to a precise point. geo_precision is "exact", "approximate", or null; geo_method
names how the coordinate was obtained (osm_point, wikidata_point,
commune_centroid, owner_verified, or null). lat/lng/geo_precision/geo_method are all
null together for the 70 records whose locality could not be matched to a
commune.
Coordinates and commune are derived, not from the MoH. The Ministry of Health lists names, type and wilaya only. GeoAlgeria matches each establishment's locality to the
geoalgeriacommune set within its wilaya (givingcommune,commune_codeand a centroid coordinate), then upgrades the coordinate to a precise point where a hospital or clinic in OpenStreetMap or Wikidata sits in that same commune. Wilaya is exact; commune and coordinates are best-effort.
Need the administrative divisions too?
For wilayas, dairas, and communes, use the main
geoalgeria package, it's how
you turn an establishment's commune_code into a polygon or centroid. Use
@geoalgeria/sante when you only need the health establishments.
Source & method
Run npm run fetch to regenerate every output. It:
- pulls the Ministry of Health establishment registry from the
sante.gov.dzWordPress REST API (healthinstitution), in French and Arabic, each tagged with its wilaya; - derives the type from each title and pairs the French and Arabic posts
into one bilingual record. The pairing goes by locality, then by an
unambiguous shared commune, then by the registry's own habit of publishing
the two posts under consecutive ids. That last step needs more than the
adjacency, since only 42.9% of French posts have an Arabic post at id+1: the
two names must also agree on a consonant skeleton, which is what French and
Arabic spellings of one name actually share, and an ambiguous candidate is
left as two records rather than guessed at. Adjacency only reaches two post
ids, so four pairs across three cities, whose halves the registry entered 4,
10, 14 and 1284 ids apart, are paired by hand instead, in an explicit table.
Each row records what its evidence covers, and the two levels are not the
same claim: for two of them a source that is not the registry (an
OpenStreetMap element, a Wikidata item) names the establishment in both
scripts, so it states the pair itself; for the other two that source confirms
the French half only, and the Arabic half rests on the two titles being
exact translations of each other together with the pair being the one
candidate left in its wilaya and type group. Four further cases the table was
asked about stay two records, because no source names them at all, and they
are listed beside the pairs with what is missing. Every decision, including each
refusal and its reason, is written to
quality/sante-twin-recovery.json. A record cites both posts:refs.mspis its primary (French) post andrefs.msp_twinthe Arabic one, so either id resolves to it; - folds in the registry's repeat posts: 7 establishments were entered a
second time in the language they already had, which step 2 can never see,
because it only ever pairs a French post with an Arabic one. The whole title
has to fold to the same
@geoalgeria/normalizekey, so a name the registry wrote differently stays two records: the two Skikda hospitals and the two Ouargla ones are two facilities, not one entered twice. Every decision and every pair kept apart is written toquality/sante-repeat-posts.json, and the merged record cites the absorbed post asrefs.msp_repeat; - matches each establishment's locality to a commune in the
geoalgeriaset within its wilaya, attachingcommune,commune_codeand a centroid; - queries Wikidata (SPARQL, hospitals) and OpenStreetMap (Overpass,
amenity=hospital/clinic,healthcare=*) and upgrades the coordinate to a precise point where one sits in the establishment's commune.
Raw source pulls are cached under
research/sante/.
Licence & attribution
Package code is MIT. The data is a composite:
- The Ministry of Health registry (names, type, wilaya) is a factual public-sector listing.
- Coordinates are derived from Wikidata (CC0, public domain) and OpenStreetMap (© OpenStreetMap contributors, licensed under the ODbL 1.0). If you use or redistribute this dataset, you must attribute OpenStreetMap contributors and keep derived databases under a compatible licence.
Verify against official sources for authoritative information. This dataset is provided for reference and to power GeoAlgeria.
API docs & field reference → · Browse all packages →
Made by Yasser's studio · LinkedIn · X · [email protected]
GeoAlgeria is free, and it stays free. The same studio also makes maps, websites, mobile apps and open data for clients.
