Aller au contenu

Fiche pratique - Dépistage organisé

Nom technique : depistage

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

Le signalement « Dépistage organisé » enregistre les tests des trois programmes nationaux : sein (breast), colorectal (colorectal) et col de l’utérus (cervix), issus des CRCDC (format Santé publique France). Ce n’est pas une déclaration de cancer : un test, même positif, n’est pas un diagnostic. L’intérêt registre est le cancer d’intervalle (cancer survenant ≤ 2 ans après un test négatif) : on rattache l’historique de dépistage à un patient déjà connu.

Une ligne = un test de dépistage (plusieurs lignes par personne, le dépistage étant récurrent).

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.

Colonne (csvKey)LibelléFormat attenduObligatoireNature
screening_programProgrammeenum - breast / colorectal / cervixouifourni
screening_numberN° de dépistagecode (mis en majuscules, points/espaces retirés) - N° SpF, 14 car.ouifourni
test_dateDate du testdate (JJ/MM/AAAA ou AAAA-MM-JJ)ouifourni
previous_test_dateDate du test précédentdate (JJ/MM/AAAA ou AAAA-MM-JJ)-fourni
screening_roundRang / vagueentier-fourni
test_resultRésultat du testenum - negative / positive / not_analysable / unknown-fourni
final_diagnosisSituation finaleenum - normal / benign / suspect / polyp_low_risk / polyp_high_risk / cancer / pending / lost_to_followup / unknown-fourni
complementary_exam_resultRésultat examen complémentairevaleur packée / texte libre (narration du bilan : coloscopie, ACR, colposcopie…)-fourni
patient_last_nameNomtexte (nom marital)ouifourni
patient_first_namePrénomtexte-fourni
patient_birth_nameNom naissancetexte-fourni
patient_birth_dateDate naissancedate (JJ/MM/AAAA ou AAAA-MM-JJ)-fourni
patient_sexSexetexte (1 car. : F / M)-fourni
patient_secuN° Sécu (NIR)NIR - seuls les 10 premiers chiffres sont conservés-fourni
patient_addressAdressetexte-fourni
patient_postal_codeCode postalcode postal (zéros de tête restaurés)-fourni
patient_cityVilletexte-fourni
residence_insee_codeCode INSEE de résidencetexte (5 car.)-fourni
finessFINESScode (mis en majuscules, points/espaces retirés)-fourni
prescriber_namePrescripteurtexte-fourni
prescriber_addressAdresse prescripteurtexte-fourni
prescriber_postal_codeCP prescripteurcode postal (zéros de tête restaurés)-fourni
prescriber_cityVille prescripteurtexte-fourni
prescriber_rppsRPPS prescripteurcode (mis en majuscules, points/espaces retirés)-fourni
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 registre)-contrôle d’import

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

Le data manager transforme son export CRCDC/SpF (sein, colorectal ou col de l’utérus - formats natifs distincts) vers ce format canonique unique. Check-list :

  1. Périmètre. Ne garder que les trois programmes couverts : sein, colorectal et col de l’utérus. Tout autre dépistage organisé (peau, prostate…) est hors périmètre et à écarter en amont.
  2. screening_program (obligatoire) : forcer la valeur d’enum exacte breast / colorectal / cervix selon le fichier source traité.
  3. screening_number (obligatoire) : reporter le N° de dépistage SpF. C’est la clé de déduplication - sans lui la ligne est rejetée.
  4. test_result et final_diagnosis : mapper les codes source vers les valeurs d’enum lors du prétraitement - ces deux colonnes doivent arriver déjà normalisées. Tout résultat illisible ou non mappable → unknown côté test_result ; situation finale inconnue → unknown côté final_diagnosis.
  5. Dates (test_date, previous_test_date, patient_birth_date) : normaliser en JJ/MM/AAAA (ou AAAA-MM-JJ).
  6. 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.
  7. Bilan / examen complémentaire : verser la narration libre (résultat coloscopie, ACR, colposcopie, histologie) dans complementary_exam_result.
  8. Prescripteur : renseigner prescriber_name et, si dispo, l’adresse/ville/CP/RPPS. La provenance du prescripteur (ville vs hôpital vs labo) est utile à l’enquête ARC.
  9. Contrôles d’import (can_create_patient, can_create_tumor, excluded) : laisser vides dans le cas général (cf. Comportement par défaut à l’import). Les renseigner seulement pour surcharger une ligne précise.

Note sur les négatifs de patients inconnus : par défaut, un test négatif rattaché à un patient qui n’est pas déjà connu du registre n’est pas conservé ; la ligne reste orpheline, sans création de patient. Les négatifs ne sont conservés que pour un patient déjà connu.

Cette typologie est en rattachement seul : par défaut can_create_patient = false et can_create_tumor = false. Raison métier : on importe négatifs et positifs sans filtre clinique, et un test n’étant pas un diagnostic, le dépistage ne doit ni créer un nouveau patient ni ouvrir une tumeur - il se rattache à un patient déjà connu, sinon la ligne reste orpheline.

Le data manager surcharge par ligne via les colonnes can_create_patient / can_create_tumor (oui / non). Forcer can_create_tumor = oui ne crée jamais de tumeur sur un dépistage non cancéreux : un garde-fou empêche la création de tumeur dès que final_diagnosis ≠ cancer (detected_cancer = false).

Colonne excluded :

  • 0 ou vide = ligne non exclue ;
  • 1 (ou une valeur vraie sans numéro : oui/x/true) = 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.

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

  1. Validation - champs obligatoires (screening_program, screening_number, test_date, patient_last_name) et formats. Une ligne invalide est rejetée, motif affiché dans l’aperçu avant import.
  2. Mise en qualité - il dérive la topographie CIM-O-3 directement du programme (sein → C50, colorectal → C18, col → C53) et déduit detected_cancer de la situation finale. Pas de transcodage morphologique : un test n’est pas un diagnostic.
  3. Enregistrement - les lignes valides deviennent des signalements ; un même test re-livré met à jour la ligne existante (upsert).

Le rapprochement avec un patient (identito-vigilance) ne se déclenche pas automatiquement pour le dépistage : l’identité créée à l’import reste orpheline en attendant un rattachement ultérieur. Rien à préparer pour ça dans le CSV.

  • Déduplication / réimport : la clé d’un test est screening_number + test_date + screening_program. test_date est volontairement dans la clé - deux tests d’une même personne à des dates différentes ne sont pas des doublons et restent tous deux visibles. Seul le même test re-livré dans une vague CRCDC ultérieure entre en collision : il est alors upserté, ce qui permet de compléter une situation finale arrivée dans une vague suivante. Robuste aux livraisons cumulatives comme incrémentales.
  • Transcodage propre : pas de transcodage CIM-O-3 ; la topographie cimo3_topo_code est dérivée en dur du programme (indication d’organe, sans morphologie). Le transcodage des résultats/situations est à la charge du data manager (cf. Préparer son CSV).
  • Champs particuliers : screening_number requis à l’import (rare pour un identifiant source) ; previous_test_date propre au calcul du cancer d’intervalle.
  • screening_number manquant → ligne rejetée (et clé de dédup ambiguë). Idem pour les autres obligatoires : screening_program, test_date, patient_last_name.
  • screening_program hors enum (peau, prostate, valeur libre) → ligne rejetée. Filtrer peau/prostate en amont.
  • test_result / final_diagnosis non normalisés : une valeur hors enum n’est pas devinée. Mapper soi-même ; à défaut, unknown.
  • Forcer can_create_tumor = oui sur un non-cancer reste sans effet : le garde-fou bloque la création de tumeur si final_diagnosis ≠ cancer. detected_cancer est calculé, jamais importé.
  • Même test re-livré : c’est un upsert, pas un doublon.