# CLAUDE.md — Pricing Check (VivaSon)

## Projet

Application web interne pour VivaSon (~100 centres audioprothèse en France). Vérifie que les prix facturés par 3 fournisseurs (Signia, ReSound, Starkey) correspondent aux prix négociés annuellement. Génère des mails de réclamation si écarts.

## Stack

- Next.js 14 (App Router) + TypeScript
- shadcn/ui + Tailwind CSS
- Supabase (PostgreSQL, Paris eu-west-3)
- Claude API Sonnet (matching flou + extraction PDF + génération mail)
- xlsx (parsing Excel)
- Déploiement : VPS Hostinger classique

## Repo & paths

- GitHub : github.com/hany8787/vivason-price-analyzer
- Local : /Users/hd/Desktop/VIVASON IA/Price Analyzer/Price Analyzer

## Structure du projet

```
src/
├── app/
│   ├── page.tsx                    # Dashboard accueil
│   ├── layout.tsx                  # Layout avec sidebar mois
│   ├── [month]/page.tsx            # Page mensuelle (upload + résultats)
│   └── database/page.tsx           # Gestion base tarifaire + mappings
├── components/
│   ├── sidebar.tsx                 # Navigation par mois
│   ├── upload-zone.tsx             # Drop zone fichier (EDI ou PDF)
│   ├── analysis-summary.tsx        # Cartes résumé par fournisseur
│   ├── analysis-detail.tsx         # Table détail des écarts
│   ├── email-generator.tsx         # Génération + copie mail réclamation
│   └── pdf-upload.tsx              # Upload multi-PDF franchisés
├── lib/
│   ├── supabase.ts                 # Client Supabase
│   ├── claude.ts                   # Client Claude API (matching + PDF + mail)
│   ├── parsers/
│   │   ├── signia.ts               # Parser EDI Signia (.xlsx)
│   │   ├── resound.ts              # Parser EDI ReSound (.xlsx)
│   │   └── starkey.ts              # Parser EDI Starkey (.csv latin-1)
│   ├── pdf-extractor.ts            # Claude Vision → extraction lignes PDF
│   ├── matching.ts                 # Logique matching 3 niveaux
│   ├── filters.ts                  # Filtrage lignes (famille, exclusions, SUC)
│   └── utils.ts
├── types/
│   └── index.ts
└── config/
    └── suppliers.ts                # Config fournisseurs + acronymes
```

## Commandes

```bash
npm run dev          # Dev server
npm run build        # Build production
npm run start        # Start production
npm run lint         # ESLint
```

## Env vars (.env.local)

```
NEXT_PUBLIC_SUPABASE_URL=https://acsgmroysxqzbiklsraa.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<anon_key>
SUPABASE_SERVICE_ROLE_KEY=<service_role_key>
ANTHROPIC_API_KEY=<claude_api_key>
```

## Base de données Supabase

Projet : vivason-pricing-check (ID: acsgmroysxqzbiklsraa, Paris eu-west-3)

6 tables dans le schema public :
- `reference_prices` (277 lignes) — prix négociés (v6 + v2 anciennes réf.)
- `product_mappings` (16 seed) — correspondance code article → produit, s'enrichit auto
- `centre_codes` (67) — codes centres SUC par fournisseur
- `analyses` — une entrée par mois × fournisseur
- `analysis_lines` — détail ligne par ligne, `discrepancy` calculé auto (invoiced - negotiated)
- `email_drafts` — mails de réclamation générés

## Logique métier clé

### Parsing EDI
- Signia : .xlsx, col `Famille`=`PR`, prix dans `PrixUnitaireNet`
- ReSound : .xlsx, col `Famille`=`CONTOUR`, prix dans `PrixUnitaireBrut`
- Starkey : .csv latin-1 séparateur `;`, pas d'en-têtes, col 6=`PR`, col 10=taux remise×100

### Matching (3 niveaux)
1. Lookup exact dans `product_mappings` par (supplier, code_article)
2. Normalisation + mots-clés (NX→Nexia, VB→Vibrant, RU→Omnia, EQ→Enzo Q, etc.)
3. Claude API Sonnet en dernier recours → résultat sauvé dans product_mappings

### Extraction PDF (franchisés)
Claude Vision reçoit le PDF en base64, retourne JSON structuré avec les lignes facture.
Formats : Signia (WS Audiology), ReSound (GN Hearing), Starkey.

### Filtrage
- Appareils : Signia PR, ReSound CONTOUR, Starkey col6 PR
- Exclure : éco-taxe, port, réparations, garanties, avoirs (négatifs)
- Alerte : remise=0% et montant>500€
- SUC/franchisé : filtrage via table centre_codes

### Mail réclamation
- Copier-coller (pas d'envoi auto)
- Adresser à "Monsieur"
- Listing des écarts + demande d'avoir

## Design

Couleurs VivaSon : pink #E6007E, navy #1D1D3C, fond #F8F5F7
Typo : Inter
Icônes : Material Symbols Outlined
Référence HTML : fichiers Stitch dans /design-reference/

## Données de test

Dans /data/samples/ :
- 15 fichiers EDI (oct-déc 2025 + jan-fév 2026, 3 fournisseurs)
- 6 factures PDF exemples (2 par fournisseur)
- Plaquettes tarifaires v6 et v2
- Codes centres (3 fichiers Excel)
- Instructions Phacet (3 fichiers)

## Points d'attention

- ReSound : les codes centres sont des noms ("VivaSon Gamma Lille"), pas des codes numériques
- Starkey col 10 : taux de remise ×100 (6800 = 68%), PAS un prix
- Les prix négociés peuvent changer en cours d'année (rétroactifs au 1er janvier) → versioning via valid_from/valid_to
- Le fichier Marcelo v6 ne contient PAS les codes articles fournisseurs → matching repose sur les libellés
- La v2 contient 81 anciennes références absentes de la v6 (anciens modèles encore facturés)
