Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
Translation pending
Calcul de la valeur vénale des véhicules sinistrés
Translation pending
BusinessTypeScript · PLpgSQLGitHub @mbelloujsmaldi-langOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Premier module de la plateforme Sinistria. Ce Sprint pose le socle : authentification, 8 rôles hiérarchiques, table dossiers (centrale pour tous les futurs modules Sinistria), et le squelette du moteur de calcul de valeur vénale.Read the full README ↗
Premier module de la plateforme Sinistria. Ce Sprint pose le socle :
authentification, 8 rôles hiérarchiques, table dossiers (centrale pour
tous les futurs modules Sinistria), et le squelette du moteur de calcul
de valeur vénale.
supabase/migrations/0001_init.sql — schéma complet : rôles, profiles,
dossiers, vv_calculations, avec Row Level Security reflétant la
hiérarchie (Technicien → Directeur → Administrateur technique).lib/calcul-vv.ts — moteur de calcul (dégressif sur solde restant,
prorata mensuel, plafond VN), taux et référentiels validés contre les
documents officiels FMSAR 2019 et 2023 (voir section ci-dessous).app/login, app/dashboard — authentification et tableau de bord
minimal prouvant que Auth + rôles + RLS fonctionnent ensemble.middleware.ts — protection des routes.Créer un projet Supabase sur supabase.com (le plan gratuit suffit largement pour démarrer).
Dans l'éditeur SQL de Supabase, exécuter le contenu de
supabase/migrations/0001_init.sql.
Créer un premier compte utilisateur via Supabase Auth (tableau de bord
Supabase > Authentication > Add user), puis lui créer une ligne dans
profiles avec role = 'admin_technique'.
Copier .env.local.example en .env.local et renseigner l'URL et la
clé anon de votre projet (Project Settings > API).
Installer les dépendances et lancer le serveur :
npm install
npm run dev
Ouvrir http://localhost:3000 — vous serez
redirigé vers /login.
lib/calcul-vv.ts a été relu et vérifié chiffre par chiffre contre les
deux documents FMSAR officiels ("La valeur vénale à dire d'expert", Mai
2019 et Juin 2023, disponibles en PDF) :
lib/test-calcul-vv.ts (16/16 tests) valide, chiffre par chiffre, les 4
exemples illustratifs officiels du document 2023.Point encore ouvert : le plafond de ±15% sur le correctif λ est explicite dans le document 2023 ; le document 2019 ne mentionne aucun plafond pour λ. Le code applique ±15% aux deux versions par prudence métier — à confirmer si un dossier 2019 doit un jour dépasser ce seuil.
Écart identifié avec le prototype existant : le calculateur "Vv Expertise Auto" (Apps Script, en production avec des dossiers réels) applique encore le référentiel λ dépendant de la puissance fiscale même pour des calculs marqués "2023" — c'est-à-dire qu'il n'a pas été mis à jour suite à la simplification introduite par le document 2023. Ce n'est pas un bug de Sinistria-VV ; c'est une dette technique du prototype existant, à garder à l'esprit si les deux systèmes sont un jour comparés.
app/vv/nouveau/page.tsx + app/vv/nouveau/formulaire-vv.tsx — formulaire
de saisie (valeur à neuf, dates, catégorie, carburant, puissance fiscale,
correctifs optionnels entretien/kilométrage/commercial) branché sur
calculerValeurVenale(). Accessible depuis le bouton "Nouveau calcul de
valeur vénale" du tableau de bord.supabase/migrations/0002_vv_calculations_champs_complets.sql — étend
vv_calculations avec les paramètres d'entrée complets (carburant,
puissance_fiscale, kilometrage_total, type_kilometrage, entretien,
correctif_commercial_pct) et les résultats intermédiaires
(correctif_beta_pct/_montant, correctif_lambda_pct/_montant,
vvade_sans_correctif), pour qu'un calcul validé par un supérieur
hiérarchique reste rejouable à l'identique. À exécuter dans l'éditeur SQL
Supabase avant d'utiliser le formulaire.dossiers (décision architecturale)Sinistria-Site possède déjà un système de dossier complet et mature
(sociétaire, véhicule, sinistre, workflow proposition/décision/validation).
VV n'a pas besoin de dupliquer client_nom, vehicule_immatriculation,
statut, etc. — même en lecture seule, car cela rouvre le problème de
synchronisation que la vision "VV = service de calcul isolé" vise à éviter.
VV n'a besoin de connaître ni le nom du client ni l'immatriculation pour
faire ou rejouer un calcul.
supabase/migrations/0003_retrait_dossiers.sql — supprime la table
dossiers (et le type dossier_statut) de la base VV, retire
vv_calculations.dossier_id et le remplace par
reference_dossier_externe text : une référence texte libre fournie par
l'appelant (ex. Sinistria-Site), sans foreign key locale. Sert uniquement
de piste d'audit, sans que VV possède ou gère le dossier. À exécuter
dans l'éditeur SQL Supabase.profiles / les 8 rôles restent propres à VV — ce n'est pas la même
catégorie de problème : c'est la hiérarchie de validation interne du
calcul VV, pas une donnée de dossier partagée.supabase/migrations/0004_workflow_validation.sql ajoute le workflow
calcule → soumis → valide/rejeté, avec écart et justification, plus un
journal d'audit — les mêmes champs que le prototype Apps Script existant,
déjà validé sur 34+ dossiers réels. À exécuter dans l'éditeur SQL
Supabase.
vv_calculations gagne : statut, ecart_dh, ecart_pct,
justification_ecart, valide_le, motif_rejet, soumis_par,
soumis_le (valeur_definitive et validee_par existaient déjà depuis
0001_init.sql — réutilisés tels quels).vv_calculations_historique (qui, quoi, ancienne →
nouvelle valeur, observation, horodatage) — RLS : lecture pour tout
utilisateur authentifié, écriture uniquement pour l'auteur de la ligne.vv_calculations : le créateur peut soumettre
son propre calcul (calcule → soumis) ; les rôles Responsable et
au-dessus peuvent valider ou rejeter (soumis → valide/rejete).app/vv/page.tsx — liste des calculs avec statut, valeur calculée,
valeur définitive.app/vv/[id]/page.tsx + actions-vv.tsx — détail d'un calcul, historique,
et actions contextuelles selon le rôle : soumettre (créateur), valider
avec valeur définitive + justification, ou retourner pour correction avec
motif (Responsable+). L'application des droits réels se fait par RLS
côté serveur ; lib/roles.ts ne sert qu'à l'affichage.POST /api/calculer — appel serveur-à-serveur (Sinistria-Site en Apps
Script via UrlFetchApp, donc pas de session Supabase Auth). Authentifié
par une clé unique partagée (Authorization: Bearer <VV_API_KEY>), pas de
gestion multi-clés ni de rate limiting pour l'instant (un seul appelant).
supabase/migrations/0005_api_integration.sql — rend created_by
nullable sur vv_calculations. NULL a un sens unique dans tout le
système : "créé via l'API, pas par un humain authentifié" — toute
création manuelle passe par un userId réel, donc pas d'ambiguïté
possible. Conséquence naturelle : le bouton "Soumettre à validation" ne
s'affiche jamais pour ces lignes (comparaison userId === created_by
échoue toujours sur null) — aucun changement d'affichage nécessaire
ailleurs, vérifié (aucun autre endroit du code n'affiche "créé par" pour
un calcul). À exécuter dans l'éditeur SQL Supabase.ParametresCalcul (lib/calcul-vv.ts)
referenceDossierExterne (obligatoire pour un appel API — c'est la
seule trace du dossier Sinistria-Site). Validation stricte de chaque
champ (enums, nombres positifs, dates, cohérence dates, plafond
correctif commercial ±25% et restriction aux catégories
commerciales) — jamais de valeur par défaut silencieuse ; 400 avec
message clair sur le premier champ invalide.200 : le corps EST ResultatCalcul mis à plat (ageEnMois,
vvadeSansCorrectif, correctifBetaPct/Montant,
correctifLambdaPct/Montant, correctifCommercialMontant,
vvadeFinale, plafonneAVN), avec id ajouté en plus (id de la ligne
créée dans vv_calculations) — pas d'enveloppe { resultat: {...} },
conformément au contrat Sprint 4 et à ce qu'attend le code Apps Script
côté Sinistria-Site. Chaque appel réussi crée une ligne dans
vv_calculations (même traçabilité qu'une saisie manuelle), sans
entrer dans le workflow de validation interne VV.{ erreur: "message" } (400/401/500).lib/supabase/admin.ts — client service_role (bypass RLS), réservé
aux routes serveur sans session utilisateur. Nécessite
SUPABASE_SERVICE_ROLE_KEY en variable d'environnement (jamais exposée
au client).proxy.ts protégeait toutes les routes (y compris /api/*) par la
session Supabase Auth, donc un appel sans cookie de session était
redirigé vers (HTML) au lieu d'atteindre la route —
est maintenant exclu du matcher.GET /api/health — endpoint public (sans authentification), renvoie
{ "status": "ok" }. Sert à vérifier rapidement qu'un déploiement
répond, avant même de tester /api/calculer..env.local.example liste les 4 variables requises : URL et clé anon
Supabase, SUPABASE_SERVICE_ROLE_KEY, VV_API_KEY — c'est la référence
exacte à reporter dans Vercel.npm run build passe sans erreur ni warning bloquant (vérifié).*.vercel.app par
défaut suffit pour le premier test réel avec Sinistria-Site. Pas
d'authentification supplémentaire au-delà de VV_API_KEY.1. Pousser le code sur GitHub
Git n'est pas installé sur cette machine — installez-le d'abord :
git-scm.com/download/win (ou
winget install Git.Git dans un terminal). Redémarrez le terminal après
installation, puis :
git init
git add .
git commit -m "Sinistria-VV — Sprint 1 à 5"
Créez ensuite un dépôt vide sur github.com/new (sans README/gitignore générés automatiquement), puis :
git remote add origin https://github.com/<votre-compte>/<nom-du-repo>.git
git branch -M main
git push -u origin main
.gitignore exclut déjà .env.local et node_modules — vérifiez que
git status avant le commit ne liste aucun de ces deux.
2. Importer le projet sur Vercel
.env.local (mêmes noms, mêmes valeurs) :
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY,
SUPABASE_SERVICE_ROLE_KEY, VV_API_KEY.https://<nom-du-projet>.vercel.app.3. Vérifier
curl https://<votre-projet>.vercel.app/api/health
# {"status":"ok"}
Puis testez /api/calculer avec la même requête curl que celle validée
en local (voir section Sprint 4), en remplaçant localhost:3000 par
l'URL Vercel.
Tout git push sur la branche main redéploie automatiquement — aucune
action manuelle sur Vercel après la configuration initiale.
/login/api200 était enveloppée ({ id, resultat }) au lieu d'être
ResultatCalcul à plat comme spécifié — trouvé en comparant au code
Apps Script réel écrit côté Sinistria-Site, corrigé.created_by = null et reference_dossier_externe renseigné.