Fiche pratique - PMSI
Nom technique : pmsi
📥 Télécharger un modèle de CSV
Vocation
Section intitulée « Vocation »Le signalement PMSI décrit un séjour hospitalier, tel que l’établissement l’exporte (RSS / RUM, codage CIM-10 orienté facturation). C’est une source à très haut volume mais bruitée : beaucoup de séjours non-cancer, des codes de séance (Z51.*) ou d’antécédent (Z85), et un cancer souvent porté par le DR ou un DAS plutôt que le DP. Le tri des séjours non-oncologiques est à la charge du data manager en amont (aucun filtre côté outil) ; en revanche, sur un séjour retenu, le système sélectionne lui-même le code cancer par priorité DP → DR → DAS.
Format canonique d’import
Section intitulée « Format canonique d’import »Une ligne = un RUM (Résumé d’Unité Médicale = passage dans un service). Une hospitalisation produit plusieurs RUM : par exemple 30 séances de chimio = 30 lignes partageant les mêmes dates d’hospitalisation mais portant chacune leur propre identifiant de RUM.
Séparateur de colonnes ; recommandé (, également auto-détecté) ; entourez de guillemets "…" toute cellule contenant le séparateur ou un retour ligne. En-têtes en snake_case, identiques aux csvKey du tableau ci-dessous et dans l’ordre du manifeste. Toutes les colonnes sont des champs fournis par le data manager, sauf les trois contrôles d’import (can_create_patient, can_create_tumor, excluded) en fin de tableau.
Colonnes packées : le séparateur d’entrées est | et, pour les actes, le sous-séparateur :.
Colonne (csvKey) | Libellé | Format attendu | Obligatoire | Nature |
|---|---|---|---|---|
structure_finess | FINESS de l’établissement | code FINESS (9 caractères) connu du registre ; vide accepté, inconnu ou malformé → ligne rejetée | - | Établissement |
nrss | N° RSS | code | - (voir note) | Identifiant RUM |
nadm | N° admission | code | - (voir note) | Identifiant RUM |
nrum | N° RUM | code | - | Identifiant RUM |
ghm | GHM | texte | - | Séjour |
uf_code | Code UF | texte | - | Unité fonctionnelle |
uf_label | Libellé UF | texte | - | Unité fonctionnelle |
entry_date | Date entrée hôpital | date JJ/MM/AAAA ou AAAA-MM-JJ | oui | Date (hospitalisation) |
exit_date | Date sortie hôpital | date | - | Date (hospitalisation) |
entry_date_rum | Date entrée RUM | date | - | Date (RUM) |
exit_date_rum | Date sortie RUM | date | - | Date (RUM) |
entry_mode | Mode entrée | entier | - | Séjour |
entry_provenance | Provenance | texte | - | Séjour |
exit_mode | Mode sortie | entier | - | Séjour |
exit_destination | Destination | texte | - | Séjour |
dp | Diagnostic principal (DP) | code CIM-10 | oui | Diagnostic |
dr | Diagnostic relié (DR) | code CIM-10 | - | Diagnostic |
das_codes | Codes DAS | liste de codes CIM-10 packés par | | - | Diagnostics (table fille) |
actes | Actes CCAM | entrées packées par |, chaque acte = date:CCAM:phase:activité (4 champs au plus séparés par :, ceux de fin omissibles) | - | Actes (table fille) |
patient_last_name | Nom | texte | - | Identité patient |
patient_first_name | Prénom | texte | - | Identité patient |
patient_birth_name | Nom de naissance | texte | - | Identité patient |
patient_birth_date | Date de naissance | date, pas dans le futur | - | Identité patient |
patient_sex | Sexe | texte (M/F) | - | Identité patient |
patient_ipp | IPP | texte | - | Identité patient |
patient_secu | N° Sécu (NIR) | NIR (seuls les 10 premiers chiffres conservés) | - | Identité patient |
patient_address | Adresse | texte | - | Adresse |
patient_postal_code | Code postal | code postal (zéros de tête restaurés) | - | Adresse |
patient_city | Ville | texte | - | Adresse |
patient_birth_commune | Commune de naissance | texte | - | Lieu de naissance |
patient_birth_postal_code | Code postal de naissance | code postal | - | Lieu de naissance |
patient_birth_insee_code | Code INSEE de naissance | texte (5 chiffres) | - | Lieu de naissance |
document | Document associé | nom de fichier (extension comprise) d’une entrée de l’archive ZIP déposée avec le CSV ; vide accepté, nom absent → ligne sans document (voir Documents associés) | - | document |
can_create_patient | Peut créer un patient | oui/non | - | Contrôle d’import |
can_create_tumor | Peut créer une tumeur | oui/non | - | Contrôle d’import |
excluded | Exclu | entier (0/vide, 1, ou ≥2) | - | Contrôle d’import |
Note identifiants : structure_finess, nrss et nadm sont individuellement non obligatoires dans le manifeste, mais une règle transverse impose qu’au moins un de nrss ou nadm soit rempli (sinon la ligne est rejetée). Renseignez nrum dès qu’il est disponible.
Télécharger un modèle de CSV au format attendu
Préparer son CSV à partir de la source brute
Section intitulée « Préparer son CSV à partir de la source brute »Travail concret pour passer de l’export PMSI (RSS / RUM) au CSV canonique. Check-list :
-
Filtrer le bruit non-cancer EN AMONT. Le PMSI est volumineux et codé pour la facturation. L’outil n’applique aucun filtre : ne transmettez que les séjours d’intérêt oncologique. Repérez-les sur la présence d’un code
C*en DP, DR ou DAS, ou d’un code de séanceZ51.*pointant vers un cancer en DR/DAS. Écartez les séjours sans aucun code cancer. -
Une ligne = un RUM. Ne pré-agrégez pas une hospitalisation en une seule ligne : éclatez en autant de lignes que de RUM. Les RUM d’une même hospitalisation partagent
entry_date/exit_datemais se distinguent par leur identifiant de RUM. -
Mapper les colonnes locales vers les
csvKeydu tableau Format canonique d’import. Les libellés source varient selon l’établissement ; alignez-vous sur lescsvKey. -
Identifiants de RUM : remplissez au moins
nrssounadmsur chaque ligne, etnrumsi disponible. C’est la base de la clé de déduplication (structure_finess+ (nadm||nrss) +nrum). Conservez les zéros de tête denrum(traité comme chaîne). -
FINESS : renseignez
structure_finessavec un FINESS connu du registre. Un même export peut contenir plusieurs établissements ; la pré-validation liste les FINESS trouvés et met en erreur les lignes au FINESS inconnu. Vide, la ligne est intégrée sans établissement. -
UF : fournissez
uf_codeet/ouuf_labelselon ce dont vous disposez (les deux sont conservés). -
Dates :
JJ/MM/AAAAouAAAA-MM-JJ, sans heure. Deux niveaux :entry_date/exit_date= dates d’hospitalisation (dupliquées sur tous les RUM d’une même hospitalisation) ;entry_date_rum/exit_date_rum= dates du RUM (propres à chaque ligne), à renseigner si votre source les distingue. Ne mélangez pas les deux niveaux. -
NIR (
patient_secu) : le système ne conserve que les 10 premiers chiffres (garde-fou : espaces et caractères non numériques retirés, troncature à 10 chiffres). Inutile de le tronquer à la main. -
Codes diagnostics :
dp,dret lesdas_codessont des codes CIM-10. Ils seront mis en majuscules et débarrassés des points/espaces par le SI ; la présence ou non du point n’a pas d’incidence. -
Packing des DAS : concaténez les codes CIM-10 associés dans
das_codesséparés par|, dans l’ordre du RSS (l’ordre compte : voir Points d’attention, règle « 1er DAS valide »). Ex.C77.0|I10. Chaque code commence par une lettre suivie de deux chiffres, 10 caractères au plus ; un autre séparateur que|met la ligne en erreur. -
Packing des actes : chaque acte au format
date:CCAM:phase:activité, champs séparés par:dans cet ordre, les actes séparés par|. Le code CCAM est obligatoire (4 lettres et 3 chiffres, ex.EBLA003) ; la date se lit enJJ/MM/AAAAouAAAA-MM-JJ; la phase et l’activité sont un chiffre. Un champ manquant se laisse vide en gardant les:(2024-01-10:AAAA001::), et les champs de fin peuvent être omis (2024-01-10:AAAA001). Un acte hors de ce format (plus de 4 champs, CCAM absent ou mal formé, date illisible…) met la ligne en erreur à la pré-validation. -
Mode de sortie 9 = décès : dans ce cas la date de fin d’hospitalisation (
exit_date) vaut date de décès. Vérifiez sa cohérence. -
Exclusions amont : pour les séjours à exclure du traitement registre sans les retirer du fichier, utilisez la colonne
excluded(cf. Comportement par défaut à l’import).
Comportement par défaut à l’import
Section intitulée « Comportement par défaut à l’import »Valeurs par défaut : can_create_patient = true et can_create_tumor = true. Le PMSI n’est pas une typologie en « rattachement seul » : un séjour hospitalier oncologique est une source légitime pour créer un patient et une tumeur jusque-là inconnus du registre, d’où l’autorisation par défaut.
Surcharge par ligne : renseignez can_create_patient et/ou can_create_tumor à oui/non sur la ligne concernée. Toute autre valeur met la ligne en erreur à la pré-validation ; une cellule vide laisse le défaut (création autorisée) s’appliquer.
Colonne excluded :
0ou vide = ligne non exclue ;1= exclusion avec le motif par défaut (motif global n°1) ;≥ 2= motif spécifique du catalogue d’exclusion du registre. Un numéro inconnu du catalogue fait rejeter la ligne.- Seuls des chiffres sont acceptés :
oui,x,-1,1.5ou tout texte mettent la ligne en erreur à la pré-validation.
Ce que fait le système à l’import
Section intitulée « Ce que fait le système à l’import »Une fois votre fichier déposé, le système traite chaque ligne (chaque RUM) en trois temps :
- Validation - champs obligatoires (
entry_date,dp, au moins un identifiant de RUM) et formats (dates, codes DAS et actes packés). Une ligne invalide est rejetée, motif affiché dans l’aperçu avant import. - Transcodage et mise en qualité - il choisit le code cancer caractérisant par priorité DP → DR → DAS, le traduit en CIM-O-3 (règle de préfixe) et calcule les indicateurs chimio / radiothérapie déduits des actes. Il en déduit les groupes IARC topographique et morphologique, pour le séjour comme pour chaque DAS.
- Enregistrement - les lignes valides deviennent des signalements, avec leurs tables filles (DAS, actes).
Le rapprochement avec un patient (identito-vigilance) se fait ensuite, dans une étape séparée, sur l’identité créée à l’import : rien à préparer pour ça dans le CSV.
Spécificités
Section intitulée « Spécificités »- Trois niveaux : la ligne CSV alimente le séjour (
report_pmsi) plus deux tables filles 1:N -report_pmsi_das(un DAS par code dedas_codes, avec sapositiondans le RSS) etreport_pmsi_actes(un acte par entrée deactes). DP et DR restent uniques sur le parent. - Déduplication sans upsert : clé
structure_finess + (nadm||nrss) + nrum(nrumvide →"1"). Au réimport d’un même lot, les lignes dont le hash existe déjà sont ignorées (skip), pas mises à jour. Le rapport d’import liste les lignes sautées. - Transcodage direct CIM-10 → CIM-O-3 : la topographie est recopiée du code CIM-10. La morphologie suit la règle de préfixe :
C*→80003(/3 malin),D00-D09→80102(/2 in situ),D10-D36→80000(/0 bénin),D37-D48→80001(/1 incertain). - Flags actes calculés :
has_chemo/has_radiotherapy(séjour) etis_chemo/is_radiotherapy(acte) sont déduits des codes CCAM via les tables de référence.
Points d’attention
Section intitulée « Points d’attention »- Ligne rejetée si :
entry_dateoudpmanquant (champs obligatoires) ;- ni
nrssninadmrenseigné ; - un code de
das_codesou une entrée deacteshors format (étapes 10 et 11).
- Ordre des DAS : quand le code cancer retenu tombe sur les DAS, c’est le premier DAS valide dans l’ordre du fichier qui est choisi. Respectez donc l’ordre du RSS dans
das_codes. - Séjour non oncologique : si aucun code cancer valide n’est trouvé (DP, DR, DAS), le séjour est importé mais
characterizing_codereste NULL - donnée peu exploitable. Filtrez ces cas en amont (Préparer son CSV, étape 1). - Multi-organes : si plusieurs codes cancer valides d’organes différents (groupes topo IARC : colon et rectum en sont deux) coexistent, seul le code prioritaire est retenu ; le SI lève
has_other_organ_groupset liste les autres - informez-vous-en, mais ne dédoublez pas la ligne. - Ne pas confondre les deux niveaux de dates :
entry_date/exit_date= hospitalisation (identiques sur tous les RUM d’une même hospitalisation),entry_date_rum/exit_date_rum= RUM (propres à chaque ligne). Ne mettez pas une date de RUM dans les colonnes d’hospitalisation. - Réimport : un réimport ne corrige pas un codage déjà envoyé - les lignes déjà vues sont ignorées (skip), pas mises à jour.