Guide de bout en bout — De l'upload au tarif en base
Ce guide enchaîne les étapes complètes d'un import magazine, de la réception du PDF jusqu'à la facturation automatique des publicités détectées. Il consolide les manuels existants en un parcours linéaire.
flowchart LR
A[1. Upload PDF] --> B[2. Identification magazine]
B --> C[3. Détection IA]
C --> D[4. Review & validation]
D --> E[5. Export / facturation]
C -.-> F[Rate Card Sandbox]
F -.-> D
D -.-> G[Proposer nouveau format]Étape 1 · Upload du PDF
Écran : /imports → bouton « + Nouveau »
Drag & drop un PDF magazine. Taille max : 50 Mo. Le système détecte immédiatement :
- Le titre du magazine (via Claude Vision sur la couverture)
- ISSN, éditeur, année si visibles
→ Manuel détaillé : Identification magazine à l'upload
Étape 2 · Identification + correction
Avant le lancement effectif, le système affiche les candidats trouvés dans le catalogue Magazine avec un score de confiance :
| Badge | Confiance | Action recommandée |
|---|---|---|
| 🟢 Vert ≥ 85 % | Match fiable | Valider directement |
| 🟠 Ambre 60–84 % | Match probable | Vérifier puis valider |
| ⚪ Gris < 60 % | Aucun match | Choisir dans dropdown OU créer nouveau magazine |
Si le magazine n'existe pas → bouton « Créer ce magazine dans le catalogue » ouvre Backstage avec le titre pré-rempli.
Étape 3 · Détection IA des publicités
Une fois l'import lancé, le pipeline tourne en arrière-plan :
- Split PDF → images page
- Classify (Claude Haiku) → isAd ? layout ?
- Extract (Claude Sonnet 4.6) → détection pubs + bounding boxes
- Post-processing → dédup, validation surfaces
- Color analysis → palette + contraste WCAG
- Persist → base
ads+ index Méditathèque
Prompt utilisé : extract v3 (stable) avec bloc <catalog> injecté si le magazine a des AdFormats actifs → chaque pub détectée est automatiquement rattachée au format tarifé.
Si aucune pub détectée
Deux options sur la page /imports/{id}/verify :
- Bouton « Voir le prompt » (depuis la liste Imports) → drawer avec le prompt actif et le catalogue injecté. Utile pour debug.
- Bouton violet « Re-analyser en mode deep » (sur la page verify) → relance avec prompt 5-passes agressif (canvas → strips → inserts → cover → legal-only). Durée 5–10 min.
→ Manuels : Détection ciblée · Prompt Studio
Étape 4 · Review & validation
Écran : /imports/{id}/verify
Bannières contextuelles (en tête de page)
Selon l'état du magazine, jusqu'à 3 bannières peuvent apparaître :
| Bannière | Condition | CTA |
|---|---|---|
| 🟠 Magazine inconnu | Import.magazine = NULL | « Créer un magazine » → Backstage |
| 🔵 Magazine sans tarifs | Magazine existe mais 0 AdFormat actif | « Importer les tarifs » → Sandbox |
| ✨ Pubs non classées | Ads avec proposed_new_format_data | Card éditable + « Valider le format (N) » |
Actions sur chaque publicité
- ✅ Approve — valide telle quelle
- ✏️ Edit — corriger company/produit/molécule/bbox avant validation
- ❌ Reject — pub fausse positive, avec raison
Raccourcis clavier : A = approve, R = reject, flèches = navigation pub suivante/précédente.
Propositions IA de nouveaux formats
Dans le panel « Pubs non classées », chaque proposition regroupe les ads avec le même label (surface/position similaire). Tu peux :
- Éditer le label / position / surface avant validation
- Valider le format (N) → crée un
AdFormatdraft rattaché au magazine, les N ads sont liées +formatUnknownest levé - Ignorer → la proposition est masquée pour la session
Étape 5 · Import des tarifs (Rate Card Sandbox)
Si le magazine n'a pas encore de grille tarifaire, on la crée depuis un PDF/XLSX/HTML/CSV fourni par la régie.
Écran : /backstage/rate-cards/sandbox
Déroulé
- Upload du fichier grille tarifaire (jusqu'à 25 Mo)
- Analyse Claude Opus 4.7 : extraction exhaustive via 2-passes avec cache Anthropic
- Accept/Reject par ligne : chaque tarif est validé individuellement (✓/✗)
- Bouton « Importer la sélection » → wizard 3 étapes :
- Régie (autocomplete existantes ou créer)
- Compléter les champs manquants par magazine (publisher, périodicité…)
- Confirmer : année(s) d'application, conflit strategy (merge/replace/skip), bouton « Importer maintenant »
- Résultat : régie + magazines + AdFormats tarifés créés en 1 transaction
Les magazines déjà existants sont détectés → propose merge (upsert par code+validFrom), replace (écrase l'année ciblée) ou skip (ignorer).
Pour les fichiers Excel avec plusieurs magazines en colonne (type John Libbey) : détection auto + liste ; propositions IA via web search si manque ISSN/périodicité.
Pour les fichiers « grille générique sans magazine nommé » (EDIMARK, AXIS LEN) : web search pour trouver les publications de la régie + possibilité d'ajouter manuellement chaque magazine qui reçoit la grille.
→ Manuel : Sandbox rate card
Étape 6 · Facturation automatique
Une fois les AdFormats du magazine tarifés (priceGrossCents / priceNetCents) :
- Chaque publicité détectée avec
match_confidence ≥ 0.60est reliée à unAdFormatviaad_format_ref_id - Les pubs apparaissent dans la Médiathèque (
/mediatheque) avec leur tarif calculé - Export possible via Bibliothèque ou SuperFilter pour alimenter la facturation client
Modèles IA utilisés
| Tâche | Modèle | Raison |
|---|---|---|
| Identification magazine | Sonnet 4.6 Vision | Tâche simple, coût faible |
| Classify page | Haiku 4.5 | Rapide, binaire |
| Extract pubs normal | Sonnet 4.6 Vision | Précision bbox + structured output |
| Extract pubs deep | Sonnet 4.6 Vision | Même modèle, prompt 5-passes |
| Extraction rate card PDF | Opus 4.7 | Vision complexe + contexte long |
| Extraction rate card Excel/HTML | Sonnet 4.6 | Texte structuré, 5× moins cher |
Permissions requises (RBAC)
import.create: uploader un PDFimport.view: voir la liste + drawer promptsad.view/ad.edit/ad.validate: review des pubsadformat.manage.structure: créer un format depuis proposition IAadformat.manage.pricing: sandbox rate card + commit cascade
Troubleshooting rapide
| Symptôme | Cause probable | Solution |
|---|---|---|
| 0 pubs détectées | Magazine sans catalog OU classify trop strict | Bouton « Re-analyser en mode deep » |
| Bounding box décalés | Modèle Opus utilisé (imprécis spatial) | Sonnet est utilisé par défaut depuis v0.18 |
| Magazine inconnu à l'upload | 1ère page sans titre lisible | Choisir dans dropdown ou créer manuellement |
| « Réponse Claude non-JSON » Sandbox | Document trop volumineux, tronqué | Split par régie / par année |
| Régie déjà existante | Match slug/nom | Choisir « Link » dans wizard étape 1 |
→ Troubleshooting détaillé : docs-cms.plan-net.co/backstage/troubleshooting
Glossaire
- Régie publicitaire : éditeur/mandataire commercial (ex. John Libbey Eurotext, EDIMARK). Peut publier plusieurs magazines.
- Magazine : titre de presse individuel (ex. Annales de Biologie Clinique).
- AdFormat : spécification d'un emplacement publicitaire sur un magazine (ex. « 1/2 page quadri intérieur »), avec prix brut/net/validité.
- Ad : publicité concrète détectée sur une page d'un import.
- Catalog block : liste des AdFormats actifs d'un magazine injectée dans le prompt Claude Vision pour guider la classification des pubs détectées.
- Proposition IA : suggestion d'un nouveau format catalogue lorsque Claude détecte une pub qui ne matche aucun AdFormat existant.