cassionAnalyse de données

Leçon 7 sur 8

Unité · Quelqu'un d'autre l'exécute

Écrit pour quelqu'un qui a votre poste et rien de votre contexte

Une passation n'est pas une description du code. C'est la liste de ce que vous savez et qui ne figure nulle part dans le dépôt — pourquoi cette colonne est écartée, à qui écrire quand l'export s'arrête, et quel nombre du rapport sera contesté.

PythonR135 minCritères d'évaluation du CAD de l'OCDENorme humanitaire fondamentale (CHS)Définitions d'indicateurs de l'UNICEF

À quoi sert une passation

Pas à dire « voici le code » — le code est dans le dépôt et un successeur compétent sait le lire. Une passation est la part qui n’est pas dans le dépôt, et c’est presque entièrement une liste de décisions et de relations.

Le test : votre successeur reçoit l’export mensuel, il paraît faux, et il doit décider quoi faire. Tout ce dont il a besoin pour cela est ce que contient le document.

Les sept sections

# Handover: nutrition surveillance analysis
Written 2026-03-14 by [name], for whoever holds this next.

## 1. What this produces, and who reads it
A quarterly GAM estimate by commune, in the cluster report and the district
health office's monthly pack. The cluster coordinator reads the commune table
first and asks about anything above 10%.

## 2. Run it
    uv sync && uv run python run.py
Takes about four minutes. Outputs land in outputs/ and are safe to delete.

## 3. Where the data comes from, and who to ask
data/raw/muac-screening-YYYY-MM.csv — exported from the screening database on
the 5th of each month by [name, role, email]. If it does not arrive by the
10th, that is who to chase; it has been late three times in two years and the
cause was a permissions change each time.

## 4. Decisions that are not obvious from the code
- Commune names arrive spelled four ways. Normalisation is in src/clean.py.
  Ungrouped, the worst commune splits into four fragments and none looks
  alarming, which is how this went unnoticed for two rounds.
- Children with no age recorded (about 2%) are excluded from the age-
  disaggregated table but kept in the total. The cluster agreed this in
  March 2025; the alternative was excluding them everywhere, which moved the
  headline by 0.4 points.
- MUAC is the case definition, not weight-for-height. This is a screening
  dataset and there are no heights.

## 5. What breaks, and what it looks like
- A new water_source code stops the pipeline with "Unknown water_source
  values". It is usually a form change; map it in src/clean.py and tell
  [name].
- A row count outside 2,000-3,000 stops it. Usually a truncated download.
- If the report renders but a commune is missing, screening did not happen
  there; that is real and should be stated in the narrative.

## 6. What gets challenged
The commune ranking. Eleven of eleven adjacent communes have overlapping
intervals, so the chart supports "these three are above the district median"
and does not support ranking one commune against its neighbour. The caption
says so; keep it there, because it comes up every quarter.

## 7. What I would do next
The screening register has no follow-up measurement, so the MUAC 125mm
eligibility threshold cannot be evaluated as a discontinuity design. Adding
an eight-week re-measurement on a sample of children just above the cut-off
would make it estimable. I raised this in January; it is not funded.

Les sections 4 et 6 sont celles qu’on ne peut pas reconstituer. Tout le reste, un successeur le retrouverait en une semaine.

Pourquoi la section 4 est tout le document

Chaque exclusion, recodage et seuil de la chaîne était une décision, et le code enregistre ce qui a été décidé en perdant le pourquoi. Un successeur qui lit df = df[df.age <= 20] sait ce que cela fait et ignore s’il a le droit de le changer.

# Excluded: 14 children with recorded ages above 20 years in an under-5
# screening. These are data-entry errors (the age field accepts free text).
# Agreed with the screening lead 2025-03; they are excluded everywhere rather
# than corrected, because we cannot tell 2 from 20 from 12.
survey = survey[survey["age_months"] <= 60]
# The comment is the handover. Write it when you make the decision.

Écrivez le commentaire au moment de la décision, non au moment de la passation. Au moment de la passation, vous vous souviendrez des décisions et non des raisons, ce qui est exactement l’inverse de ce qu’il faut.

La section 6, et pourquoi elle n’est pas défensive

Nommez les nombres qui sont contestés et quelle est la réponse. Toute analyse récurrente en a deux ou trois, et un successeur qui les ignore capitulera devant une contestation déjà tranchée ou rouvrira une discussion déjà close.

C’est de la mémoire institutionnelle, et c’est la première chose perdue dans une passation. C’est aussi la moins coûteuse à écrire : trois puces.

La passation n’est pas un document, c’est une période

Le document est nécessaire et il ne suffit pas.

Faites-leur l’exécuter pendant que vous êtes encore là. Non pas vous regarder l’exécuter — l’exécuter eux-mêmes, depuis un clone neuf, sur leur propre machine, avec vous disponible. Tout ce qui échoue est une lacune du dépôt ou du document, et c’est le seul moyen de trouver ces lacunes.

Faites-leur produire une vraie sortie. Le prochain rapport mensuel, non un essai. Un successeur qui a produit un rapport a fait le travail une fois.

Laissez le canal de questions ouvert pendant un cycle. Un trimestre, un mois, selon la cadence. L’essentiel de ce qu’ils auront besoin de demander arrive au moment où cela casse pour la première fois.

Ce qu’il faut écrire au fil de l’eau

Le document de passation est bien plus facile s’il n’est pas écrit au moment de la passation.

Écrivez-le Quand
Le commentaire de décision Au moment de la décision
L’entrée « ce qui casse » La première fois que cela casse
L’entrée « ce qui est contesté » La première fois que c’est contesté
Le contact et la cadence Au moment où vous les mettez en place
Le « ce que je ferais ensuite » Dès que vous y pensez

Gardez-le dans le dépôt, dans HANDOVER.md, en gestion de versions. Une passation dans la boîte mail de quelqu’un est une passation à une seule personne.

Le README et la passation sont deux documents différents

README Passation
Pour quiconque ouvre le dépôt Pour la personne qui le reprend
Ce qu’il produit, comment l’exécuter Pourquoi il est ainsi
Reste court Peut être long
Mis à jour avec le code Mis à jour quand une décision est prise

Un README devenu une passation a cessé d’être lu, ce qui fait perdre les deux.

Rapportez-le en entier

Continuity

  HANDOVER.md documents the analysis decisions, the upstream contacts and
  cadence, the known failure modes, and the findings that are routinely
  challenged. It is version-controlled and was last reviewed 2026-03-14.

  Every exclusion and recode in src/ carries a comment giving the reason and
  the date it was agreed.

  The incoming analyst ran the March cycle end-to-end from a fresh clone,
  with the outgoing analyst available. Two gaps were found and closed: the
  screening database export permission, and an undocumented commune-name
  variant.

Le dernier paragraphe est la preuve que la passation a eu lieu. Un document de passation que personne n’a exécuté est un document jamais testé, et les deux lacunes qu’il a trouvées sont ce pour quoi il existe.

La suite

La dernière leçon retourne le cours sur cette plateforme. Chaque affirmation qu’il a faite — données brutes en lecture seule, environnement figé, sortie déterministe, vérifications qui échouent bruyamment, un modèle pour plusieurs sorties — se vérifie dans ce dépôt, et la leçon est une visite guidée de l’endroit où.

Animer cette leçon

La leçon en diaporama, la prose étant reléguée dans les notes du présentateur plutôt que projetée. Produit à partir de cette page, dont il ne peut donc pas s'écarter.

Lancer le diaporamaLire les diapositives

Le PDF ne requiert aucun logiciel et se projette depuis n'importe quel poste. Le fichier PowerPoint est fait pour être modifié : appliquez la charte de votre organisation, retirez une section pour une séance plus courte, ou fusionnez deux leçons en atelier.