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.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 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.查看完整 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é.