Aller au contenu

Fiche pratique data manager - RCP (Réunion de Concertation Pluridisciplinaire)

Nom technique : rcp. Source cible : extraction tabulaire du CDA CANCER-FRCP 2025.01 (profil ANS).

📥 Télécharger un modèle de CSV

Le signalement RCP enregistre les comptes rendus de Réunion de Concertation Pluridisciplinaire : la décision thérapeutique arbitrée collégialement par des cancérologues pour un cas de cancer. C’est, en principe, la source typée de plus haute qualité du SI Registres - cas codé par des spécialistes, NIR fiable porté par une INS qualifiée, topographie/morphologie CIM-O-3 natives, TNM clinique attendu. La source d’origine est le CDA CANCER-FRCP (ANS), que le registre reçoit sous forme d’extraction tabulaire (Excel/CSV), jamais le XML brut. En pratique, la donnée réelle est souvent pauvrement codée : au mieux identité + topographie ; le TNM détaillé est rare (de l’ordre de 2 cas sur 1000). Une fiche sans tumeur réellement codée vaut donc comme notification : le SI crée une tumeur avec la seule topographie, le reste restant en texte libre. On en attend dans le registre un track-record fiable des cas vus en RCP et un appui à la réconciliation des identités/tumeurs.

Une ligne = une fiche RCP. Le séparateur de colonnes est ; (ou ,, auto-détecté ; encadrez d’un guillemet "…" toute cellule contenant le séparateur ou un retour ligne - notamment les textes libres). Les colonnes tumors et participants sont packées : entrées multiples séparées par |, et à l’intérieur de chaque entrée les attributs sont séparés par : (tuple positionnel). Le SI éclate ces deux colonnes vers les tables filles.

Toutes les colonnes ci-dessous sont des champs fournis par le data manager, dans l’ordre exact du manifeste (sauf les 3 contrôles d’import, en fin de tableau).

Colonne (csvKey)LibelléFormat attenduObligatoireNature
source_rcp_idIdentifiant RCP (source)code (majuscules, points/espaces retirés)-métadonnée RCP
session_idIdentifiant sessioncode-métadonnée RCP
rcp_dateDate de la RCPdate (JJ/MM/AAAA ou AAAA-MM-JJ)ouipivot temporel
cancer_phasePhase du cancertexte - valeurs attendues initial / relapse / unknown-métadonnée RCP
quorum_reachedQuorum atteintoui/non (true/1/o… acceptés)-métadonnée RCP
document_statusStatut du documenttexte - in_progress / completed / validated-métadonnée RCP
discovery_modeMode de découvertetexte - screening / clinical / unknown-métadonnée RCP
rcp_specialitySpécialité / type de RCPtexte (ex. digestif, pneumologie, onco-hematologie)-métadonnée RCP
rcp_locationLieu de la RCPtexte (libellé seul)-métadonnée RCP
cda_versionVersion CDAtexte (ex. 2025.01)-métadonnée RCP
care_plan_decisionDécision / plan de soinsvaleur packée (texte libre, conservé brut)-texte libre
clinical_contextContexte cliniquevaleur packée (texte libre, conservé brut)-texte libre
tumorsTumeursvaleur packée → table fille. Entrées |, attributs : (voir packing ci-dessous)-tumeurs (1:N)
participantsParticipantsvaleur packée → table fille. Entrées |, attributs : (voir packing ci-dessous)-participants (1:N)
patient_last_nameNomtexteouiidentité patient
patient_first_namePrénomtexte-identité patient
patient_birth_nameNom naissancetexte-identité patient
patient_birth_dateDate naissancedate (JJ/MM/AAAA ou AAAA-MM-JJ)-identité patient
patient_sexSexetexte (F / M)-identité patient
patient_ippIPPtexte (identifiant patient côté établissement organisateur)-identité patient
patient_secuN° Sécu (NIR)NIR (seuls les 10 premiers chiffres conservés) - alias d’en-tête NIR-identité patient
patient_addressAdressetexte-adresse patient
patient_postal_codeCode postalcode postal (zéros de tête restaurés, ex. 100001000)-adresse patient
patient_cityVilletexte-adresse patient
patient_birth_communeCommune de naissancetexte - alias Commune naissance-lieu de naissance
patient_birth_postal_codeCode postal de naissancecode postal - alias CP naissance-lieu de naissance
patient_birth_insee_codeCode INSEE de naissancetexte - alias Code INSEE naissance-lieu de naissance
finess_organisateurFINESS organisateurcode-structure source
rrc_labelRéseau Régional de Cancérologietexte-structure source
prescriber_namePrescripteur (médecin demandeur/référent)texte-prescripteur
prescriber_addressAdresse prescripteurtexte-prescripteur
prescriber_postal_codeCP prescripteurcode postal-prescripteur
prescriber_cityVille prescripteurtexte-prescripteur
prescriber_rppsRPPS prescripteurcode-prescripteur
can_create_patientPeut créer un patientoui/non-contrôle d’import
can_create_tumorPeut créer une tumeuroui/non-contrôle d’import
excludedExcluentier (0/vide = non exclu ; 1 = motif par défaut ; ≥2 = motif du registre)-contrôle d’import

Packing tumors (entrées séparées par |, attributs positionnels séparés par :) : topo:morpho:laterality:cT:cN:cM:stage:role

  • topo = topographie CIM-O-3 (codée CIM-10 chapitre II par le CDA), morpho = morphologie CIM-O (ex. 8140/3), laterality = left/right/bilateral/midline/unknown, cT/cN/cM = TNM clinique (UICC v7), stage = stade synthétique, role = primary/metastasis/other_primary.
  • Attributs vides admis : C787:8140/3:unknown:::M1::metastasis (laisser le champ vide entre les :).

Packing participants (entrées séparées par |, attributs positionnels séparés par :) : name:rpps:speciality:role:in_quorum

  • role = coordinator/requester/presenter/treating_physician/correspondent/participant, in_quorum = true/false (compte dans le quorum INCa).

Format de packing provisoire tant que l’extraction CDA→Excel réelle n’est pas figée.

Télécharger un modèle de CSV au format attendu

Objectif : transformer l’extraction tabulaire du CDA CANCER-FRCP (ou une saisie manuelle) en une ligne canonique par fiche RCP.

  1. Une ligne par fiche RCP. Si la source liste plusieurs tumeurs ou plusieurs participants, ne dupliquez pas la ligne : packez-les dans tumors / participants.
  2. Mapper les colonnes locales vers les csvKey du tableau Format canonique d’import. Les en-têtes sont auto-mappés (insensibles à la casse/accents) ; vous pouvez utiliser les alias (NIR, Commune naissance, CP naissance, Code INSEE naissance).
  3. Dates (rcp_date, patient_birth_date) : format JJ/MM/AAAA ou AAAA-MM-JJ uniquement. Tout autre format (ex. AAAA/MM/JJ accepté, mais pas JJ-MM-AAAA) sera lu comme vide. rcp_date est obligatoire.
  4. NIR (patient_secu) : laissez le NIR complet, le SI ne conserve que les 10 premiers chiffres. Source RCP = meilleur taux de remplissage NIR, ne le laissez pas vide si la source le porte.
  5. Codes postaux : les zéros de tête perdus par un passage en numérique sont restaurés (100001000) ; pas d’action requise, mais vérifiez que la cellule n’est pas tronquée à plus de 4 chiffres significatifs.
  6. Packer les tumeurs dans tumors selon topo:morpho:laterality:cT:cN:cM:stage:role, entrées séparées par |. Conservez la primitive en primary ; les métastases/autres primitives en metastasis/other_primary. Laissez vides les attributs non codés (gardez les :), ne mettez pas N/A. Le couple topo/morpho suffit ; le TNM est en pratique rarement disponible.
  7. Packer les participants dans participants selon name:rpps:speciality:role:in_quorum. Renseignez in_quorum=true pour les spécialités qui comptent au quorum INCa (≥ 3 spécialités) ; quorum_reached au niveau fiche en est la synthèse.
  8. Conserver le code source : gardez à la fois le CIM-10 d’origine (track-record) et le CIM-O-3 - pas de transcodage à faire de votre côté, le SI valide sans rejeter.
  9. Textes libres (care_plan_decision, clinical_context) : concaténez le compte rendu / histoire de la maladie / questions / plan de soins. Optionnels (l’ARC ouvre le PDF de toute façon). Encadrez de guillemets si le texte contient ;, , ou un retour ligne.
  10. Structure organisatrice : finess_organisateur = 3C ou établissement organisateur ; rrc_label = le RRC parent. La structure n’est pas (encore) identifiée par FINESS de façon fiable - le FINESS reste un track-record.
  11. Amendement : ne réécrasez jamais une fiche. Une fiche amendée est une nouvelle ligne (voir Points d’attention). Cadence d’import attendue : annuelle.

Pièges de format à éviter : un séparateur | ou : à l’intérieur d’un texte libre non encadré de guillemets casse le packing - préférez encadrer ; ne réordonnez pas les attributs des tuples (positionnel) ; ne supprimez pas les : vides d’un attribut manquant.

Valeurs par défaut RCP : can_create_patient = false et can_create_tumor = false. La RCP est donc en rattachement seul : à l’import, le SI ne crée ni patient ni tumeur automatiquement. Raison métier : la fiche RCP arrive en aval du parcours et doit se rattacher à un patient/une tumeur déjà connus du registre ; la décision de créer revient à la réconciliation / l’ARC, pas à l’import.

Surcharge par ligne : renseignez can_create_patient / can_create_tumor à oui (ou 1/true/o/x) pour autoriser la création sur cette ligne précise, non pour la refuser explicitement. Une cellule vide laisse le défaut RCP (false).

Colonne excluded : 0 ou vide = ligne non exclue ; 1 = exclusion sans motif précisé (motif global par défaut) ; un entier ≥ 2 = motif spécifique du catalogue d’exclusion du registre. Une valeur truthy (oui/x/true) sans nombre vaut motif 1.

Une fois votre fichier déposé, le système traite chaque ligne (chaque fiche RCP) en trois temps :

  1. Validation - champs obligatoires (rcp_date, nom) et formats. Une ligne invalide est rejetée, motif affiché dans l’aperçu ; un code topo/morpho inconnu lève un simple avertissement, jamais un rejet.
  2. Mise en qualité - il éclate les tumeurs et les participants vers leurs tables filles, conserve les codes CIM-O-3 tels quels (pas de transcodage) et calcule les groupes (Berg, IARC) à partir de topographie + morphologie.
  3. Enregistrement - les lignes valides deviennent des signalements, avec leurs tables filles (tumeurs, participants).

Le rapprochement avec un patient (réconciliation) se fait ensuite, dans une étape séparée : rien à préparer pour ça dans le CSV.

  • Deux tables filles : report_rcp_tumors (1:N, alimentée par tumors) et report_rcp_participants (1:N, alimentée par participants). Le SI éclate les colonnes packées.
  • Pas de transcodage, aucune ligne rejetée pour un code : topo (CIM-10-sourcée) et morpho (CIM-O) sont validées contre les référentiels - un code inconnu génère un warning, jamais un rejet. berg_group/topo_iarc sont calculés directement depuis topo + morpho (pas de dérivation depuis un préfixe CIM-10 comme au PMSI).
  • Déduplication : dedup_hash = SHA-256(structure | source_rcp_id | session_id) si source_rcp_id présent, sinon SHA-256(structure | patient_ipp | rcp_date | topo). Pas d’upsert : un CR ré-envoyé à l’identique est ignoré (skip).
  • Amendement chaîné : une fiche amendée côté DCC est une nouvelle entrée rattachée à la précédente via amends_report_rcp_id (préserve l’historique médical) - jamais un écrasement.
  • Doubles codages conservés : cim10_code (source) ET cimo3_topo_code / cimo3_morpho_code sont stockés.
  • cancer_phase et discovery_mode font le lien avec d’autres typologies (discovery_mode = screening ↔ dépistage).
  • Seul rejet de ligne : rcp_date absente ou mal formatée, ou patient_last_name vide (les deux seuls champs obligatoires). Une date dans un format non reconnu (autre que JJ/MM/AAAA, AAAA/MM/JJ, AAAA-MM-JJ) est lue comme vide → rejet.
  • Fiche sans tumeur codée : pas d’erreur, mais la fiche vaut notification - le SI crée une tumeur avec la seule topographie, le reste reste en texte. Renseignez au moins topo quand vous le pouvez.
  • TNM quasi toujours vide en réel : ne bloquez pas la prep dessus ; packez les : vides plutôt que d’inventer des stades.
  • Rattachement seul (voir Comportement par défaut à l’import) : sans surcharge, aucun patient ni tumeur n’est créé - une ligne dont l’identité ne se réconcilie pas reste non rattachée en attente d’arbitrage ARC, elle ne crée pas d’orphelin de force.
  • Ré-import à l’identique = skip silencieux (dédup, pas d’upsert). Pour corriger une fiche, passez par un amendement (nouvelle ligne chaînée), pas par un ré-envoi modifié espérant un écrasement.
  • Packing fragile : un | ou : dans un texte libre non encadré de guillemets décale tous les attributs du tuple ; un attribut manquant sans son : décale le reste. Vérifiez le nombre de : par entrée (7 pour tumors, 4 pour participants).
  • excluded est un n° de motif, pas un booléen libre : un entier < 1 (ex. 0) ne marque pas l’exclusion. Une valeur inconnue de motif est résolue/rejetée par le worker en aval, pas à l’import.
  • ? = valeur manquante : une cellule contenant uniquement ? est traitée comme vide (sentinelle de certaines sources).
  • FINESS organisateur non fiable comme identifiant : la structure est résolue à l’interface ; le finess_organisateur reste un track-record, ne comptez pas dessus pour identifier précisément le 3C.