Data Management with FHIR
0.1.0 - ci-build
Data Management with FHIR - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Cette documentation décrit le schéma de base de données PostgreSQL optimisé pour le stockage des variables du socle EDSH (Entrepôt de Données de Santé en répartition), généré à partir du questionnaire FHIR Questionnaire-UsageCore.json.
Le schéma implémente une architecture relationnelle normalisée permettant de stocker l'ensemble des données de santé core définies dans le questionnaire FHIR, avec un focus sur l'interopérabilité et les performances d'interrogation.
Le schéma comprend 11 tables principales organisées autour de l'entité centrale patient :
patientDescription : Table consolidée des informations démographiques et d'identité patient, combinant les éléments d'identité (linkId: 2958000860428) et de géocodage (linkId: 5491974639955) du questionnaire FHIR.
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 patient_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique du patient |
| nom | VARCHAR(255) | - | - | Nom patient (linkId: 8605698058770) |
| prenom | VARCHAR(255) | - | - | Prénom patient (linkId: 6214879623503) |
| nir | VARCHAR(15) | CHECK format | - | Numéro inscription au Répertoire - NIR (linkId: 5711960356160) |
| ins | VARCHAR(50) | - | - | Identité Nationale de Santé - INS (linkId: 3764723550987) |
| date_naissance | DATE | CHECK validité | - | Date de naissance (linkId: 5036133558154) |
| sexe | VARCHAR(20) | CHECK ('h', 'f') | - | Sexe consolidé depuis PMSI (linkId: 3894630481120) |
| date_deces | DATE | CHECK cohérence | - | Date de décès (linkId: 5633552097315) |
| source_deces | VARCHAR(50) | - | - | Source de la date de décès (linkId: 9098810065693) |
| rang_gemellaire | INTEGER | CHECK (1-10) | - | Rang gémellaire du bénéficiaire (linkId: 6931296968515) |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
Index principaux :
idx_patient_nir : Index sur NIR (WHERE nir IS NOT NULL)idx_patient_ins : Index sur INS (WHERE ins IS NOT NULL)idx_patient_nom_prenom : Index composé nom/prénomidx_patient_date_naissance : Index sur date de naissanceidx_patient_search : Index GIN pour recherche textuelle françaiseidx_patient_nir_hash : Index de hachage pour recherche exacte NIRidx_patient_ins_hash : Index de hachage pour recherche exacte INSpatient_adresseDescription : Informations de géolocalisation et adressage patient (linkId: 5491974639955).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 patient_adresse_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique de l'adresse |
| 🔗 patient_id | BIGINT | NOT NULL, FK | - | Référence vers patient |
| latitude | DECIMAL(10,7) | CHECK (-90 à 90) | - | Latitude du domicile patient (linkId: 3709843054556) |
| longitude | DECIMAL(10,7) | CHECK (-180 à 180) | - | Longitude du domicile patient (linkId: 7651448032665) |
| code_iris | VARCHAR(20) | - | - | Code IRIS du lieu de résidence |
| libelle_iris | VARCHAR(200) | - | - | Libellé IRIS du lieu de résidence |
| code_geographique_residence | VARCHAR(10) | - | - | Code géographique de résidence |
| libelle_geographique_residence | VARCHAR(200) | - | - | Libellé géographique de résidence |
| date_recueil | DATE | - | - | Date de recueil de l'information |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
Index spécialisés :
idx_patient_coords_gist : Index spatial GIST pour les coordonnées géographiquesidx_patient_adresse_iris : Index sur code IRISidx_patient_adresse_date : Index composé patient/date de recueildonnees_pmsiDescription : Table centrale des données de séjour PMSI (Programme de médicalisation des systèmes d'information) - point de liaison pour toutes les données cliniques (linkId: 2825244231605).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 pmsi_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique du séjour PMSI |
| 🔗 patient_id | BIGINT | NOT NULL, FK | - | Référence vers patient |
| mode_sortie | VARCHAR(100) | - | - | Mode de sortie du séjour |
| age_admission | INTEGER | CHECK (0-150) | - | Âge à l'admission (nécessaire si pas de date de naissance) |
| date_debut_sejour | DATE | - | - | Date de début du séjour |
| date_fin_sejour | DATE | CHECK cohérence dates | - | Date de fin du séjour |
| mode_entree | VARCHAR(100) | - | - | Mode d'entrée dans l'établissement |
| etablissement | VARCHAR(255) | - | - | Établissement de soins |
| service | VARCHAR(255) | - | - | Service médical |
| unite_fonctionnelle | VARCHAR(255) | - | - | Unité fonctionnelle |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
Index de performance :
idx_pmsi_patient_id : Index sur patient_ididx_pmsi_date_debut : Index sur date de début de séjouridx_pmsi_date_fin : Index sur date de fin de séjouridx_pmsi_etablissement : Index sur établissementidx_pmsi_patient_date : Index composé patient/date de débutidx_pmsi_covering : Index couvrant avec INCLUDEidx_pmsi_duree_sejour : Index calculé sur la durée de séjourdiagnosticsDescription : Codes diagnostiques et informations liées aux séjours utilisant les classifications CIM-10 (linkId: 9391816419630).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 diagnostic_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique du diagnostic |
| 🔗 patient_id | BIGINT | NOT NULL, FK | - | Référence vers patient |
| 🔗 pmsi_id | BIGINT | NOT NULL, FK | - | Référence vers séjour PMSI |
| code_diagnostic | VARCHAR(20) | NOT NULL, CHECK longueur | - | Code diagnostic CIM-10 |
| type_diagnostic | VARCHAR(50) | - | - | Type de diagnostic (principal, associé, etc.) |
| libelle_diagnostic | TEXT | - | - | Libellé descriptif du diagnostic |
| date_recueil | DATE | CHECK ≤ CURRENT_DATE | - | Date de recueil de l'information |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
Index de recherche :
idx_diagnostics_pmsi_id : Index sur pmsi_ididx_diagnostics_code : Index sur code diagnosticidx_diagnostics_type : Index sur type de diagnosticidx_diagnostics_pmsi_code : Index composé pmsi/codeidx_diagnostics_patient_code : Index composé patient/code/dateactesDescription : Actes médicaux et procédures réalisés durant les séjours utilisant les classifications CCAM et autres standards (linkId: 591926901726).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 acte_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique de l'acte |
| 🔗 patient_id | BIGINT | NOT NULL, FK | - | Référence vers patient |
| 🔗 pmsi_id | BIGINT | NOT NULL, FK | - | Référence vers séjour PMSI |
| code_acte | VARCHAR(20) | NOT NULL, CHECK longueur | - | Code de l'acte médical (CCAM, etc.) |
| libelle_acte | TEXT | - | - | Libellé descriptif de l'acte |
| date_acte | TIMESTAMP | CHECK ≤ CURRENT_TIMESTAMP | - | Date et heure de réalisation de l'acte |
| executant | VARCHAR(255) | - | - | Professionnel exécutant (non prévu dans le socle) |
| date_recueil | DATE | CHECK ≤ CURRENT_DATE | - | Date de recueil de l'information |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
Index optimisés :
idx_actes_pmsi_id : Index sur pmsi_ididx_actes_code : Index sur code d'acteidx_actes_date : Index sur date d'acteidx_actes_date_recueil : Index sur date de recueilidx_actes_pmsi_code : Index composé pmsi/codeidx_actes_patient_code : Index composé patient/code/datebiologieDescription : Table consolidée des résultats d'examens biologiques, différenciés par codes LOINC et types d'examens incluant fonction rénale, bilan hépatique, hémogramme et autres tests (linkId: 7702944131447).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 biologie_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique du résultat biologique |
| 🔗 patient_id | BIGINT | NOT NULL, FK | - | Référence vers patient |
| code_loinc | VARCHAR(20) | - | - | Code LOINC identifiant le test biologique |
| libelle_test | VARCHAR(255) | - | - | Libellé descriptif du test |
| type_examen | VARCHAR(100) | CHECK types valides | - | Type examen: fonction_renale, bilan_hepatique, hemogramme, autres |
| valeur | DECIMAL(15,6) | CHECK ≥ 0 | - | Valeur numérique du résultat |
| unite | VARCHAR(50) | - | - | Unité de mesure |
| valeur_texte | TEXT | - | - | Valeur textuelle du résultat |
| date_prelevement | TIMESTAMP WITH TIME ZONE | CHECK ≤ CURRENT_TIMESTAMP | - | Date et heure du prélèvement |
| statut_validation | VARCHAR(50) | CHECK valeurs valides | - | Statut de validation (en_attente, valide, rejete, en_cours) |
| borne_inf_normale | DECIMAL(15,6) | CHECK cohérence bornes | - | Borne inférieure de normalité |
| borne_sup_normale | DECIMAL(15,6) | CHECK cohérence bornes | - | Borne supérieure de normalité |
| laboratoire | VARCHAR(255) | - | - | Laboratoire d'analyse (non prévu dans le socle) |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
Index spécialisés pour biologie :
idx_biologie_patient_id : Index sur patient_ididx_biologie_code_loinc : Index sur code LOINCidx_biologie_type_examen : Index sur type d'examenidx_biologie_date_prelevement : Index sur date de prélèvementidx_biologie_statut_validation : Index sur statut de validationidx_biologie_patient_loinc : Index composé patient/LOINCidx_biologie_patient_type : Index composé patient/typeidx_biologie_covering : Index couvrant avec INCLUDEidx_biologie_loinc_hash : Index de hachage pour recherche exacte LOINCidx_biologie_valeur_non_null : Index partiel sur valeurs non nullesidx_biologie_date_patient : Index optimisé date/patientprescriptionDescription : Données de prescription médicamenteuse avec codage ATC pour la pharmacovigilance et la recherche clinique (linkId: 817801935685).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 prescription_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique de la prescription |
| 🔗 patient_id | BIGINT | NOT NULL, FK | - | Référence vers patient |
| prescripteur | VARCHAR(50) | - | - | Professionnel prescripteur |
| denomination | VARCHAR(255) | - | - | Dénomination du médicament |
| code_atc | VARCHAR(20) | - | - | Code ATC du médicament |
| voie_administration | VARCHAR(100) | - | - | Voie d'administration prévue |
| date_prescription | DATE | - | - | Date de la prescription (non prévu dans le socle) |
| date_debut_prescription | DATE | CHECK cohérence dates | - | Date de début de la prescription |
| date_fin_prescription | DATE | CHECK cohérence dates | - | Date de fin de la prescription |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
Index de prescription :
idx_prescription_patient_id : Index sur patient_ididx_prescription_code_atc : Index sur code ATCidx_prescription_date_prescription : Index sur date de prescriptionidx_prescription_patient_atc : Index composé patient/ATCidx_prescription_covering : Index couvrant avec INCLUDEidx_prescription_atc_hash : Index de hachage pour recherche exacte ATCidx_prescription_active : Index partiel sur prescriptions activesidx_prescription_period : Index sur période de prescriptionposologieDescription : Informations détaillées de posologie pour les médicaments (linkId: 6348237104421).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 posologie_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique de la posologie |
| 🔗 prescription_id | BIGINT | NOT NULL, FK | - | Référence vers prescription |
| nombre_prises_par_jour | INTEGER | CHECK (1-24) | - | Nombre de prises par jour |
| quantite | DECIMAL(10,3) | CHECK > 0 | - | Quantité par prise |
| unite_quantite | VARCHAR(20) | - | - | Unité de la quantité |
| date_heure_debut | TIMESTAMP | CHECK cohérence dates | - | Date et heure de début |
| date_heure_fin | TIMESTAMP | CHECK cohérence dates | - | Date et heure de fin |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
administrationDescription : Données d'exposition médicamenteuse avec codage ATC pour la pharmacovigilance et la recherche clinique, traçant les administrations réelles (linkId: 817801935685).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 administration_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique de l'administration |
| 🔗 patient_id | BIGINT | NOT NULL, FK | - | Référence vers patient |
| 🔗 prescription_id | BIGINT | FK | - | Référence vers prescription (optionnelle) |
| denomination | VARCHAR(255) | - | - | Dénomination du médicament administré |
| code_atc | VARCHAR(20) | - | - | Code ATC du médicament |
| voie_administration | VARCHAR(100) | - | - | Voie d'administration réelle |
| quantite | DECIMAL(10,3) | CHECK > 0 | - | Quantité administrée |
| unite_quantite | VARCHAR(20) | - | - | Unité de la quantité |
| date_heure_debut | TIMESTAMP | CHECK cohérence dates | - | Date et heure de début d'administration |
| date_heure_fin | TIMESTAMP | CHECK cohérence dates | - | Date et heure de fin d'administration |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
Index d'administration :
idx_administration_patient_id : Index sur patient_ididx_administration_code_atc : Index sur code ATCidx_administration_denomination : Index sur dénominationidx_administration_date_heure_debut : Index sur date de débutidx_administration_atc_hash : Index de hachage pour recherche exacte ATCidx_administration_timeline : Index chronologique optimisédossier_soinsDescription : Mesures et observations cliniques incluant signes vitaux, mesures physiques et données de soins infirmiers (linkId: 305831246173).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 soin_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique de l'observation |
| 🔗 patient_id | BIGINT | NOT NULL, FK | - | Référence vers patient |
| code_loinc | VARCHAR(20) | - | - | Code LOINC de l'observation |
| libelle_test | VARCHAR(255) | - | - | Libellé de l'observation |
| valeur | DECIMAL(15,6) | CHECK ≥ 0 | - | Valeur numérique mesurée |
| unite | VARCHAR(50) | - | - | Unité de mesure |
| valeur_code | VARCHAR(50) | - | - | Valeur codée |
| valeur_texte | TEXT | - | - | Valeur textuelle |
| date_mesure | DATE | CHECK ≤ CURRENT_DATE | - | Date de la mesure |
| unite_soins | VARCHAR(255) | - | - | Unité de soins (non prévu dans le socle) |
| professionnel | VARCHAR(255) | - | - | Professionnel réalisant la mesure (non prévu dans le socle) |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
Index de soins :
idx_soins_patient_id : Index sur patient_ididx_soins_loinc : Index sur code LOINCidx_soins_date_mesure : Index sur date de mesureidx_dossier_soins_timeline : Index chronologique optimiséstyle_vieDescription : Informations consolidées sur le mode de vie incluant tabac, alcool, drogues et activité physique (linkId: 1693164086678).
| Colonne | Type | Contraintes | Défaut | Description |
|---|---|---|---|---|
| 🔑 style_vie_id | BIGSERIAL | PRIMARY KEY | - | Identifiant unique du style de vie |
| 🔗 patient_id | BIGINT | NOT NULL, FK | - | Référence vers patient |
| consommation_tabac | VARCHAR(100) | - | - | Information sur la consommation de tabac |
| consommation_alcool | VARCHAR(100) | - | - | Information sur la consommation d'alcool |
| consommation_autres_drogues | VARCHAR(100) | - | - | Information sur la consommation d'autres drogues |
| activite_physique | VARCHAR(100) | - | - | Information sur l'activité physique |
| date_recueil | DATE | CHECK ≤ CURRENT_DATE | - | Date de recueil de l'information |
| created_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de création |
| updated_at | TIMESTAMP WITH TIME ZONE | - | CURRENT_TIMESTAMP | Horodatage de dernière modification |
| Table Source | Colonne | Table Référencée | Colonne Référencée | Type de Relation | Action DELETE |
|---|---|---|---|---|---|
| patient_adresse | patient_id | patient | patient_id | 1:N | CASCADE |
| donnees_pmsi | patient_id | patient | patient_id | 1:N | CASCADE |
| diagnostics | patient_id | patient | patient_id | 1:N | CASCADE |
| diagnostics | pmsi_id | donnees_pmsi | pmsi_id | 1:N | CASCADE |
| actes | patient_id | patient | patient_id | 1:N | CASCADE |
| actes | pmsi_id | donnees_pmsi | pmsi_id | 1:N | CASCADE |
| biologie | patient_id | patient | patient_id | 1:N | CASCADE |
| prescription | patient_id | patient | patient_id | 1:N | CASCADE |
| posologie | prescription_id | prescription | prescription_id | 1:N | CASCADE |
| administration | patient_id | patient | patient_id | 1:N | CASCADE |
| administration | prescription_id | prescription | prescription_id | 1:N | RESTRICT |
| dossier_soins | patient_id | patient | patient_id | 1:N | CASCADE |
| style_vie | patient_id | patient | patient_id | 1:N | CASCADE |
patientchk_patient_sexe : Le sexe doit être 'h' (homme) ou 'f' (femme)chk_patient_date_naissance : Date de naissance entre 1900-01-01 et la date courantechk_patient_date_deces : Date de décès postérieure à la date de naissance et ≤ date courantechk_patient_nir_format : Format NIR : 13 à 15 chiffreschk_patient_rang_gemellaire : Rang gémellaire entre 1 et 10patient_adressechk_patient_latitude : Latitude entre -90 et 90 degréschk_patient_longitude : Longitude entre -180 et 180 degrésdonnees_pmsichk_pmsi_dates : Date de fin de séjour ≥ date de début de séjourchk_pmsi_age_admission : Âge à l'admission entre 0 et 150 ansbiologiechk_biologie_bornes : Borne supérieure ≥ borne inférieurechk_biologie_type_examen : Type d'examen parmi 'fonction_renale', 'bilan_hepatique', 'hemogramme', 'autres'chk_biologie_valeur_positive : Valeur ≥ 0chk_biologie_date_prelevement : Date de prélèvement ≤ timestamp actuelchk_biologie_statut_validation : Statut parmi 'en_attente', 'valide', 'rejete', 'en_cours'prescription, administration, posologie)chk_prescription_dates : Date de fin ≥ date de début de prescriptionchk_administration_dates : Date/heure de fin ≥ date/heure de débutchk_administration_quantite : Quantité > 0chk_posologie_prises_jour : Nombre de prises par jour entre 1 et 24chk_posologie_quantite : Quantité > 0chk_posologie_dates : Date/heure de fin ≥ date/heure de débutchk_soins_valeur_positive : Valeur mesurée ≥ 0chk_soins_date_mesure : Date de mesure ≤ date courantechk_style_vie_date_recueil : Date de recueil ≤ date courantechk_diagnostics_code_format : Code diagnostic entre 3 et 20 caractèreschk_diagnostics_date_recueil : Date de recueil ≤ date courantechk_actes_code_format : Code acte entre 4 et 20 caractèreschk_actes_date_acte : Date d'acte ≤ timestamp actuelchk_actes_date_recueil : Date de recueil ≤ date couranteDocumentation générée automatiquement à partir du script DDL PostgreSQL pour les variables du socle EDSH