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
Vocation
Section intitulée « Vocation »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.
Format canonique d’import
Section intitulée « Format canonique d’import »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 attendu | Obligatoire | Nature |
|---|---|---|---|---|
source_rcp_id | Identifiant RCP (source) | code (majuscules, points/espaces retirés) | - | métadonnée RCP |
session_id | Identifiant session | code | - | métadonnée RCP |
rcp_date | Date de la RCP | date (JJ/MM/AAAA ou AAAA-MM-JJ) | oui | pivot temporel |
cancer_phase | Phase du cancer | texte - valeurs attendues initial / relapse / unknown | - | métadonnée RCP |
quorum_reached | Quorum atteint | oui/non (true/1/o… acceptés) | - | métadonnée RCP |
document_status | Statut du document | texte - in_progress / completed / validated | - | métadonnée RCP |
discovery_mode | Mode de découverte | texte - screening / clinical / unknown | - | métadonnée RCP |
rcp_speciality | Spécialité / type de RCP | texte (ex. digestif, pneumologie, onco-hematologie) | - | métadonnée RCP |
rcp_location | Lieu de la RCP | texte (libellé seul) | - | métadonnée RCP |
cda_version | Version CDA | texte (ex. 2025.01) | - | métadonnée RCP |
care_plan_decision | Décision / plan de soins | valeur packée (texte libre, conservé brut) | - | texte libre |
clinical_context | Contexte clinique | valeur packée (texte libre, conservé brut) | - | texte libre |
tumors | Tumeurs | valeur packée → table fille. Entrées |, attributs : (voir packing ci-dessous) | - | tumeurs (1:N) |
participants | Participants | valeur packée → table fille. Entrées |, attributs : (voir packing ci-dessous) | - | participants (1:N) |
patient_last_name | Nom | texte | oui | identité patient |
patient_first_name | Prénom | texte | - | identité patient |
patient_birth_name | Nom naissance | texte | - | identité patient |
patient_birth_date | Date naissance | date (JJ/MM/AAAA ou AAAA-MM-JJ) | - | identité patient |
patient_sex | Sexe | texte (F / M) | - | identité patient |
patient_ipp | IPP | texte (identifiant patient côté établissement organisateur) | - | identité patient |
patient_secu | N° Sécu (NIR) | NIR (seuls les 10 premiers chiffres conservés) - alias d’en-tête NIR | - | identité patient |
patient_address | Adresse | texte | - | adresse patient |
patient_postal_code | Code postal | code postal (zéros de tête restaurés, ex. 1000 → 01000) | - | adresse patient |
patient_city | Ville | texte | - | adresse patient |
patient_birth_commune | Commune de naissance | texte - alias Commune naissance | - | lieu de naissance |
patient_birth_postal_code | Code postal de naissance | code postal - alias CP naissance | - | lieu de naissance |
patient_birth_insee_code | Code INSEE de naissance | texte - alias Code INSEE naissance | - | lieu de naissance |
finess_organisateur | FINESS organisateur | code | - | structure source |
rrc_label | Réseau Régional de Cancérologie | texte | - | structure source |
prescriber_name | Prescripteur (médecin demandeur/référent) | texte | - | prescripteur |
prescriber_address | Adresse prescripteur | texte | - | prescripteur |
prescriber_postal_code | CP prescripteur | code postal | - | prescripteur |
prescriber_city | Ville prescripteur | texte | - | prescripteur |
prescriber_rpps | RPPS prescripteur | code | - | prescripteur |
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 = 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
Préparer son CSV à partir de la source brute
Section intitulée « Préparer son CSV à partir de la source brute »Objectif : transformer l’extraction tabulaire du CDA CANCER-FRCP (ou une saisie manuelle) en une ligne canonique par fiche RCP.
- Une ligne par fiche RCP. Si la source liste plusieurs tumeurs ou plusieurs participants, ne dupliquez pas la ligne : packez-les dans
tumors/participants. - Mapper les colonnes locales vers les
csvKeydu 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). - Dates (
rcp_date,patient_birth_date) : formatJJ/MM/AAAAouAAAA-MM-JJuniquement. Tout autre format (ex.AAAA/MM/JJaccepté, mais pasJJ-MM-AAAA) sera lu comme vide.rcp_dateest obligatoire. - 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. - Codes postaux : les zéros de tête perdus par un passage en numérique sont restaurés (
1000→01000) ; pas d’action requise, mais vérifiez que la cellule n’est pas tronquée à plus de 4 chiffres significatifs. - Packer les tumeurs dans
tumorsselontopo:morpho:laterality:cT:cN:cM:stage:role, entrées séparées par|. Conservez la primitive enprimary; les métastases/autres primitives enmetastasis/other_primary. Laissez vides les attributs non codés (gardez les:), ne mettez pasN/A. Le couple topo/morpho suffit ; le TNM est en pratique rarement disponible. - Packer les participants dans
participantsselonname:rpps:speciality:role:in_quorum. Renseignezin_quorum=truepour les spécialités qui comptent au quorum INCa (≥ 3 spécialités) ;quorum_reachedau niveau fiche en est la synthèse. - 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.
- 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. - 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. - 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.
Comportement par défaut à l’import
Section intitulée « Comportement par défaut à l’import »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.
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 fiche RCP) en trois temps :
- 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. - 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.
- 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.
Spécificités
Section intitulée « Spécificités »- Deux tables filles :
report_rcp_tumors(1:N, alimentée partumors) etreport_rcp_participants(1:N, alimentée parparticipants). 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_iarcsont 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)sisource_rcp_idprésent, sinonSHA-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) ETcimo3_topo_code/cimo3_morpho_codesont stockés. cancer_phaseetdiscovery_modefont le lien avec d’autres typologies (discovery_mode = screening↔ dépistage).
Points d’attention
Section intitulée « Points d’attention »- Seul rejet de ligne :
rcp_dateabsente ou mal formatée, oupatient_last_namevide (les deux seuls champs obligatoires). Une date dans un format non reconnu (autre queJJ/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
topoquand 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 pourtumors, 4 pourparticipants). excludedest 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_organisateurreste un track-record, ne comptez pas dessus pour identifier précisément le 3C.