Fiche pratique - ACP
Nom technique : acp
📥 Télécharger un modèle de CSV
Vocation
Section intitulée « Vocation »Le signalement ACP correspond au compte-rendu d’anatomie et cytologie pathologiques produit par un laboratoire d’anapath à partir d’un prélèvement (biopsie, pièce opératoire, cytologie). C’est la source la plus riche du registre - elle porte à la fois une codification structurée (codes ADICAP ou SNOMED) et le texte du CR (conclusion, description, texte complet) - et une source à fort volume. Elle provient des laboratoires publics et privés du territoire, dans des formats très hétérogènes (CSV plat, XML CRAP/DIAMIC, PDF, XLS) qu’il faut remapper vers le CSV canonique. On en attend l’identification des cancers incidents et leur caractérisation morphologique/topographique.
Format canonique d’import
Section intitulée « Format canonique d’import »Une ligne = un compte-rendu anatomo-pathologique.
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 (adicap_codes, snomed_codes) : plusieurs valeurs dans une seule cellule, séparées par | (jamais ;). Pour SNOMED, chaque entrée est un couple atomique « T-xxxxx M-yyyyy » (topo puis morpho, séparés par une espace).
Colonne (csvKey) | Libellé | Format attendu | Obligatoire | Nature |
|---|---|---|---|---|
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), pas dans le futur | - | Identité patient |
patient_sex | Sexe | texte (M/F) | - | Identité patient |
patient_nip | NIP | texte | - | Identifiant patient source |
patient_secu | N° Secu (NIR) | NIR (seuls les 10 premiers chiffres conservés) | - | Identité patient |
patient_address | Adresse | texte | - | Adresse patient |
patient_postal_code | Code postal | code postal (zéros de tête restaurés) | - | Adresse patient |
patient_city | Ville | texte | - | Adresse patient |
patient_birth_commune | Commune de naissance | texte | - | Lieu de naissance |
patient_birth_postal_code | Code postal de naissance | code postal (zéros de tête restaurés) | - | Lieu de naissance |
patient_birth_insee_code | Code INSEE de naissance | texte | - | Lieu de naissance |
structure_finess | FINESS de l’établissement | code FINESS (9 caractères) connu du registre ; vide accepté, inconnu ou malformé → ligne rejetée | - | Structure |
nda | NDA | texte | - | Prélèvement |
sampling_date | Date prélèvement | date (JJ/MM/AAAA ou AAAA-MM-JJ) | - | Prélèvement |
registration_date | Date enregistrement | date (JJ/MM/AAAA ou AAAA-MM-JJ) | - | Prélèvement |
validation_date | Date validation | date (JJ/MM/AAAA ou AAAA-MM-JJ) | - | Prélèvement |
source_exam_id | N° CR ANAPAT | texte | oui | Identifiant CR (clé dédup) |
service_name | Service | texte | - | Source |
pathologist_name | Pathologiste signataire | texte (nom du médecin qui a signé le CR) | - | Prélèvement |
prescriber_name | Prescripteur | texte | - | Prescripteur |
prescriber_address | Adresse prescripteur | texte | - | Prescripteur |
prescriber_postal_code | CP prescripteur | code postal (zéros de tête restaurés) | - | Prescripteur |
prescriber_city | Ville prescripteur | texte | - | Prescripteur |
prescriber_rpps | RPPS prescripteur | code (majuscules, points/espaces retirés) | - | Prescripteur |
adicap_codes | Codes ADICAP | valeur packée - codes ADICAP séparés par | | - | Codification (table fille) |
snomed_codes | Codes SNOMED | valeur packée - couples T-xxxxx M-yyyyy séparés par | | - | Codification (table fille) |
sampling_topography_text | Topographie (texte) | texte libre | - | Anapath |
sampling_morphology_text | Morphologie (texte) | texte libre | - | Anapath |
laterality | Latéralité | G gauche, D droite, B bilatéral, M médian | - | Anapath |
cr_conclusion | Conclusion | texte libre | - | Compte-rendu |
cr_description | Description | texte libre | - | Compte-rendu |
cr_raw_content | Texte complet CR | valeur brute (texte) | - | Compte-rendu |
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 import |
can_create_tumor | Peut créer une tumeur | oui/non | - | Contrôle import |
excluded | Exclu | entier (0/vide, 1, ≥2) | - | Contrôle import |
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 labo (CSV plat, XML CRAP/DIAMIC, PDF, XLS) au CSV canonique :
-
Identifier l’identifiant de ligne.
source_exam_id(N° CR ANAPAT) est obligatoire avecpatient_last_name. Si la source n’expose pas de numéro d’examen exploitable, construire une clé stable par concaténation : nom + prénom + sexe + date de naissance + date anapath + code. Cette clé doit être reproductible d’un export à l’autre (sinon le réimport recrée des doublons). -
Renommer les colonnes locales en
csvKeydu tableau Format canonique d’import. Les en-têtes sont comparés à la lettre (espaces et casse ignorés) : un libellé (« Nom ») ou un ancien alias (« NIR ») n’est pas reconnu, et une colonne obligatoire absente sous son nom exact bloque le fichier au dépôt. Les colonnes inconnues sont conservées mais ignorées. Un seul identifiant patient est attendu :patient_nip(libellé « NIP »). -
Normaliser les dates au format
JJ/MM/AAAA(l’anapath utilise surtout les slashs ;AAAA-MM-JJest aussi accepté). Toute autre forme (texte,JJ-MM-AAAA, heure accolée, date hors calendrier comme31/02/2025…) met la ligne en erreur à la pré-validation, que la date soit obligatoire ou non : la ligne n’est pas intégrée tant que le fichier n’est pas corrigé. -
Préparer le NIR. 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.
-
Packer les codes de codification dans une seule cellule, séparés par
|:- ADICAP :
adicap_codes=PHGSA5B2|PHGSA7B2. - SNOMED :
snomed_codes=T-04000 M-81403|T-08000 M-80703(un couple = topo + morpho, séparés par une espace). - Un CR n’a généralement qu’une seule des deux colonnes renseignée (ADICAP ou SNOMED selon le labo).
- ADICAP :
-
Vérifier la longueur des codes ADICAP. Un code complet fait 8 caractères : mode de prélèvement (D1), technique (D2), organe (D3, 2 caractères) puis lésion (4 caractères). Selon la longueur fournie :
- 8 caractères (complet) : à pousser tel quel.
- 6 caractères (organe + lésion) : à pousser tel quel, le SI préfixe lui-même le code par
XX. - 2 caractères (organe seul) : préfixer par
XX(GS→XXGS). Sans ce préfixe, la ligne est en erreur à la pré-validation ; avec, seule la topographie est transcodée. - 10 caractères : tronquer à 8. Sinon la lésion est lue sur 6 caractères, n’est pas trouvée, et le code reste sans morphologie.
- Hors de 4 à 12 caractères, la ligne est en erreur à la pré-validation. Entre les deux, les autres longueurs sont acceptées mais le découpage est faux et le transcodage ne trouve rien.
-
Codes hémato (lésion commençant par
H, ex.H580) : les pousser tels quels. Ils sont acceptés mais pas transcodés en CIM-O-3, faute des tables de transcodage adéquates. Ne pas les convertir à la main. -
Filtrer les codes non-cancer EN AMONT. Le SI ne le fait pas. Retirer du fichier les codes ADICAP/SNOMED bénins hors champ du registre.
-
Latéralité : une seule valeur par ligne (
Ggauche,Ddroite,Bbilatéral,Mmédian), appliquée à tous les codes ADICAP et SNOMED de la ligne. Convertir les libellés source (« Gauche », « droit »…) en ces lettres : la valeur n’est pas contrôlée à la pré-validation, et une valeur de plus de 2 caractères fait échouer la ligne à l’intégration. Une ligne sans aucun code ADICAP ni SNOMED ne conserve pas sa latéralité. -
Texte du CR : alimenter
cr_conclusion,cr_descriptionetcr_raw_contentselon ce que la source distingue. Si la source ne sépare pas, mettre le texte complet danscr_raw_content. Échapper avec des guillemets toute cellule contenant;ou un retour ligne. -
Ne PAS dédupliquer côté data manager : voir Spécificités. Laisser les codes identiques, le SI les collapse.
Comportement par défaut à l’import
Section intitulée « Comportement par défaut à l’import »Par défaut pour la typologie ACP : can_create_patient = oui et can_create_tumor = oui. La typologie n’est donc pas en « rattachement seul » : un CR anapath porte un diagnostic histologique fiable, il peut donc à la fois créer un patient inconnu et ouvrir une nouvelle tumeur.
Surcharge par ligne : renseigner les colonnes can_create_patient / can_create_tumor avec oui ou non uniquement : toute autre valeur met la ligne en erreur à la pré-validation. Mettre non pour forcer un simple rattachement sur une ligne donnée (ex. ligne dont on ne veut pas qu’elle crée une tumeur isolée).
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 en trois temps :
- Pré-validation - dès le dépôt, il contrôle les champs obligatoires, la lisibilité de
chaque valeur (dates, sexe,
oui/non…), le FINESS et le numéro d’exclusion. Une ligne en anomalie passe en erreur et n’est pas intégrée ; ses anomalies s’affichent dans le tableau de pré-validation et dans le fichier annoté. Dansadicap_codesetsnomed_codes, chaque code séparé par|est contrôlé : un code ADICAP de 4 à 12 caractères (lettres, chiffres, point), un couple SNOMEDT-xxxxx M-yyyyydans cet ordre. Un autre séparateur (,, espace) met la ligne en erreur. Le code n’est pas confronté au référentiel ADICAP à ce stade. - Transcodage et mise en qualité - il éclate les codes ADICAP/SNOMED, les traduit en CIM-O-3 (topographie + morphologie) et en déduit les groupes IARC topographique et morphologique.
- Enregistrement - les lignes valides deviennent des signalements, avec leurs tables filles de codes.
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 »- Tables filles : les codes packés alimentent deux tables 1:N -
report_acp_adicap_codes(un code = une ligne) etreport_acp_snomed_codes(un couple T/M = une ligne). Le SI éclate lui-même la cellule packée. - Déduplication : clé =
structure_finess+source_exam_id. Au sein d’un même CR, le SI collapse automatiquement les codes ADICAP/SNOMED strictement identiques → ne pas dédupliquer côté data manager. - Réimport (export typiquement sur 2 mois glissants) : un même N° de CR → même hash → la ligne en doublon est ignorée (skip), pas réinsérée. La mise à jour d’un CR amendé (relu/complété) n’est pas encore implémentée - stratégie à définir.
- Transcodage : ADICAP D3 → CIM-O-3 topo, D45678 → CIM-O-3 morpho ; SNOMED via les tables
ref_snomed_to_cimo3_*. Codes hémato GFHC reconnus mais non transcodés.
Points d’attention
Section intitulée « Points d’attention »- Ligne en erreur à la pré-validation :
patient_last_nameousource_exam_idabsent ou vide ; valeur illisible dans n’importe quelle colonne, obligatoire ou non (date horsJJ/MM/AAAA, sexe horsM/F,can_create_*horsoui/non,lateralityhorsG/D/B/M, code ADICAP ou couple SNOMED mal formé…) ; date de naissance postérieure au jour du dépôt ; FINESS mal formé ou inconnu ;excludedautre qu’un nombre, ou numéro d’exclusion inconnu du catalogue. La ligne n’est pas intégrée : corriger le fichier et le redéposer. - Séparateur packé :
;dansadicap_codes/snomed_codescasse le parsing (interprété comme fin de colonne). Toujours|. - ADICAP non normalisé : code de 10 caractères non tronqué → lésion introuvable, pas de morphologie CIM-O-3. Code de moins de 4 caractères (organe seul non préfixé par
XX) → ligne en erreur à la pré-validation. - Codes ADICAP/SNOMED hors référentiel : aucun contrôle de référentiel, ni à la pré-validation ni à l’intégration. Un code inconnu des tables de transcodage est enregistré sans que rien ne le signale.
- Codes hémato
H…: reconnus mais droppés du transcodage (pas de morpho CIM-O-3) → ces lignes n’auront pas de morphologie tant que la correspondance n’est pas livrée. - Codes non-cancer non filtrés : le SI ne les écarte pas → ils créent du bruit (voire des tumeurs parasites). Filtrage obligatoire en amont, en conservant dysplasies/borderline.
- Topo CIM-O-3 inconnue : fallback
C80(site primitif inconnu) - vérifier que la topographie est bien codée si on veut éviter ce fallback. - Clé instable : si
source_exam_idchange entre deux exports pour le même CR (ex. clé reconstruite non reproductible), le réimport crée un doublon au lieu d’être ignoré. - Latéralité unique : une seule latéralité par ligne s’applique à tous les codes - si une ligne mêle deux organes de côtés différents, scinder en deux lignes (deux
source_exam_idou clés distinctes).