Uploader une grille tarifaire régie
Ce manuel s'adresse aux SUPER_ADMIN qui intègrent une nouvelle grille tarifaire annuelle envoyée par une régie partenaire. Il couvre la totalité du workflow, des formats acceptés jusqu'au commit idempotent vers le catalogue AdFormat.
Pourquoi cette feature
Onboarder une régie implique historiquement la saisie manuelle de 50 à 100 formats dans l'écran Catalogue > Formats publicitaires, soit plusieurs heures de travail par régie avec un risque d'erreur élevé sur les prix et les dimensions. La fonction d'upload automatise cette saisie :
- Extraction LLM pour les PDF libres (mise en page, scan, brochure commerciale) via Claude Vision.
- Parser déterministe pour les CSV et XLSX respectant un template strict publié par MedGuru.
- Review ligne par ligne avant commit, avec dropdowns Magazine / Format / Canonique.
- Upsert idempotent sur la clé naturelle
(magazine_id, code, valid_from): re-uploader la même grille ne crée jamais de doublons.
À savoir
Seuls les comptes SUPER_ADMIN munis de la permission adformat.manage.pricing ont accès à l'écran Grilles tarifaires d'une régie. La gouvernance voit les formats créés mais ne peut pas intervenir sur les prix.
Workflow détaillé
1. Accéder à l'écran d'upload
Depuis le menu latéral, ouvrez Organisation > Régies, sélectionnez Plan-net SA, puis l'onglet Grilles tarifaires. Cliquez sur Uploader une grille.

2. Choisir le format de fichier
Trois formats sont acceptés :
| Format | Extraction | Taille max | Cas d'usage |
|---|---|---|---|
| Claude Vision (LLM) | 25 Mo | Grille commerciale envoyée par la régie, mise en page libre | |
| CSV | Parser déterministe | 5 Mo | Export depuis un CRM ou saisie interne, template strict |
| XLSX | Parser déterministe (PhpSpreadsheet) | 10 Mo | Classeur multi-onglets éventuellement, premier onglet lu |
Pour CSV et XLSX, téléchargez d'abord le template officiel depuis le bouton Télécharger le template. Les colonnes sont imposées :
magazine_slug, format_code, format_label, canonical_code,
width_mm, height_mm, surface_pct, position_type, is_premium,
price_gross_cents, price_net_cents, valid_from, valid_untilTemplate strict
Toute colonne manquante ou mal orthographiée provoque un rejet immédiat du fichier avec le message Schema invalide. Les en-têtes sont sensibles à la casse et au snake_case.
3. Lancer l'extraction
Déposez le fichier dans la dropzone et cliquez sur Extraire. Pour un PDF, l'extraction Claude Vision prend environ 30 à 90 secondes selon le nombre de pages. Un RateCardDraft est créé avec le statut pending_review et l'ensemble des lignes extraites.

4. Réviser le mapping ligne par ligne
La table de review affiche une ligne par format détecté. Chaque ligne porte un score de confiance (de 0 à 1) et trois dropdowns :
- Magazine : liste des magazines rattachés à la régie, ex.
Le Quotidien Médical. - Format : création d'un nouveau
AdFormatou rattachement à un existant (clécode). - Canonique : proposé par Claude, ex.
FULL_PAGE_QUADRI, modifiable manuellement.
Les champs Période (valid_from, valid_until), Prix brut et Prix net sont éditables inline. Les lignes au statut rouge (champ obligatoire manquant, code en conflit) bloquent le commit tant qu'elles ne sont pas résolues.

5. Valider et committer
Cliquez sur Valider le mapping pour ouvrir la modale de résumé. Vous voyez le nombre de formats à créer (created), à mettre à jour (updated) et à ignorer (skipped). Le commit applique l'upsert en transaction unique et passe le draft en statut committed.

Idempotence
Le commit utilise la clé naturelle (magazine_id, code, valid_from). Re-uploader exactement la même grille produit 0 created / 0 updated ; modifier seulement deux prix produit 0 created / 2 updated. Vous pouvez re-uploader sans craindre de duplications.
6. Vérifier le résultat
L'écran Catalogue > Formats publicitaires affiche immédiatement les formats actifs avec leur période de validité. L'historique de la régie conserve la trace de chaque draft (statut, fichier source stocké 90 jours en S3, utilisateur, date).

Cas limites
Ligne sans magazine résolvable
Si le champ magazine_slug (CSV/XLSX) ou magazineHint (PDF) ne correspond à aucun magazine rattaché à la régie, la ligne s'affiche avec un badge Magazine à choisir. Sélectionnez manuellement dans le dropdown ou créez d'abord le magazine via Organisation > Magazines.
Code en conflit
Si deux lignes d'une même grille portent le même code pour le même magazine_id et la même valid_from, le commit est refusé avec Duplicate key. Éditez manuellement l'une des deux pour désambigüiser (ex. FULL_PAGE_QUADRI_A / FULL_PAGE_QUADRI_B).
Période qui chevauche une grille existante
Si vous committez une grille valid_from=2026-01-01 alors qu'une grille valid_until=2026-06-30 existe déjà pour le même format, les deux cohabitent. L'IA et le SuperFilter pioche le format actif à la date du numéro : aucune rupture sur les détections en cours.
Fichier PDF scanné basse qualité
Si Claude Vision retourne un score de confiance < 0.5 sur plus de 30 % des lignes, un bandeau Qualité d'extraction dégradée s'affiche. Préférez alors un ré-upload au format CSV ou XLSX selon le template.
FAQ
Puis-je re-uploader la même grille sans risque ?
Oui, l'upsert est idempotent. Vous pouvez aussi envoyer une grille partiellement corrigée : seules les lignes modifiées produiront updated.
Que devient le fichier source après commit ?
Le PDF / CSV / XLSX est stocké en S3 sous rate-cards/{regieId}/{uuid}-{filename} pendant 90 jours, puis purgé automatiquement. Le RateCardDraft reste en base indéfiniment pour l'audit.
Comment gérer une grille qui couvre plusieurs magazines ?
Un seul upload suffit. La colonne magazine_slug (CSV/XLSX) ou le champ magazineHint (PDF) permet de dispatcher les lignes vers les bons magazines de la régie.
L'IA apprend-elle les nouveaux formats immédiatement ?
Non. Les formats deviennent sélectionnables dans F06 Verify et dans le prompt Claude Vision dès le commit, mais le modèle ne devient vraiment performant sur ces formats qu'après plusieurs dizaines de corrections via la queue Triage (voir le manuel Triage IA).
Puis-je annuler un commit ?
Pas en un clic. Vous pouvez en revanche archiver les formats créés via Catalogue > Formats publicitaires (toggle Statut → archived). Les détections historiques conservent leur rattachement.
Quelles devises sont supportées ?
EUR par défaut, USD et CHF disponibles dans le dropdown. Les prix sont toujours stockés en cents (entier), HT.
Liens utiles
- Cataloguer un format publicitaire — saisie manuelle équivalente
- Créer une régie — prérequis structurel
- Queue tarifs à compléter — gérer les formats sans prix après upload
- Triage IA — traiter les ads
format_unknownliées à un nouveau catalogue