MedGuru Docsv0.17.0 Voir le changelog
Skip to content

Sandbox rate card — analyse d'une grille tarifaire

La sandbox permet de tester l'extraction IA d'une grille tarifaire éditeur avant tout import en base. Rien n'est persisté : c'est un dry-run pour valider la qualité avant de lancer l'import cascade.

Accès

Backstage → Catalogue & Tarifs → Sandbox rate card

URL directe : /backstage/rate-cards/sandbox

Requiert la permission adformat.manage.pricing (ROLE_ADMIN).

Formats supportés

FormatTraitement
PDFClaude Vision lit directement (multi-pages, scans inclus)
XLSX / XLSConversion en tableau Markdown côté serveur (PhpSpreadsheet)
HTML / HTMStrip des tags, préservation des tableaux
CSV / TXTEnvoi brut

Taille max : 10 Mo. Modèle : Claude Opus 4.7 (16 384 tokens max).

Déroulé

1 · Upload

Glisse-dépose un fichier ou clique pour sélectionner. Une fois sélectionné, clique sur « Analyser ».

2 · Loader progressif

Pendant que Claude Opus traite le document, un loader affiche les étapes en temps réel :

  1. 📄 Lecture du fichier
  2. 🚀 Envoi à Claude Opus 4.7
  3. 🤖 Analyse du document par l'IA
  4. 🔍 Extraction des magazines et tarifs
  5. ✨ Finalisation

Durée typique : 8 à 25 secondes selon la taille du document.

3 · Résultat

Le résultat s'affiche sous forme de fiches :

  • Régie détectée (nom officiel + hint brut + année + devise + nombre de magazines) avec badge de confiance
  • Summary décisions : compteur acceptées / rejetées / en attente
  • Une carte par magazine avec :
    • Métadonnées (périodicité, ISSN, éditeur)
    • Boutons bulk « Tout accepter » / « Tout rejeter »
    • Tableau des lignes tarifaires

4 · Illustration du placement

Chaque ligne tarifaire affiche une illustration SVG du placement :

  • 2ᵉ couverture : page gauche du magazine (intérieur avant)
  • 3ᵉ couverture : page gauche (intérieur arrière)
  • 4ᵉ couverture : page droite (dos du magazine)
  • Page intérieure : page droite, format courant

La zone publicitaire est surlignée en bleu avec le label « AD ».

5 · Décision ligne par ligne

Pour chaque ligne, deux boutons :

  • ✓ vert : accepter (ligne sera importée)
  • ✗ rouge : rejeter (ligne ignorée)

Cliquer une seconde fois annule la décision (retour à « en attente »).

La ligne change de couleur de fond :

  • Vert clair → acceptée
  • Rouge clair + opacité réduite → rejetée

6 · Logs d'analyse

Panneau « Logs d'analyse » ouvert par défaut avec :

  • Diagnostics : modèle, taille fichier, tokens in/out, durée HTTP + totale
  • Logs horodatés : chaque étape serveur avec contexte JSON

Utile pour debug si l'extraction rate.

7 · JSON brut + réponse LLM brute

Deux accordéons supplémentaires pour :

  • Voir le JSON final (structure ExtractedRateCard)
  • Voir la réponse brute Claude (avant parsing)

Cas d'usage

CasAction recommandée
Nouvelle régie presse jamais importéeTélécharger la grille PDF 2026, analyser, valider le mapping régie + magazines
Grille Excel reçue par e-mailUploader le .xlsx, vérifier la conversion Markdown, accepter les lignes correctes
Page HTML du site régieCopier le HTML (DevTools → copy outerHTML d'un tableau), uploader
Extraction partielle (confiance < 0.6)Rejeter les lignes douteuses, garder les évidentes

Prochaine étape : import cascade

Une fois les décisions validées, le bouton « Importer » (feature #516) créera en une transaction :

  • La régie (si nouvelle)
  • Les magazines rattachés
  • Les formats (dédupés via canonical_formats)
  • Les lignes tarifaires uniquement pour les lignes acceptées

Cette feature est en cours de développement (DDT + plan mergés dans #517).

Limitations

  • Pas de streaming : le loader est simulé côté frontend (timer basé sur stages typiques). La réponse Claude arrive en bloc.
  • Pas de cache : chaque upload relance une extraction complète (facture Anthropic).
  • Pas d'édition des lignes : uniquement accept/reject. Pour éditer un prix erroné, il faudra passer par l'écran d'import cascade (#516).
  • Dédup magazines : non gérée côté sandbox. L'écran d'import cascade proposera de lier à un magazine existant.

Debug

Si l'analyse échoue :

  1. Vérifier le panneau Logs d'analyse : l'erreur Anthropic y apparaît
  2. Vérifier les logs serveur : docker compose logs -f data-api
  3. En cas d'erreur 422 « ANTHROPIC_API_KEY non configurée » : vérifier .env sur le VPS

Références

  • Ticket origine : #512
  • Logs d'analyse : #520
  • Sandbox v2 (ce manuel) : #521
  • Cascade creation (next) : #516

Version v0.17.0 — Changelog