Une instance neuve passait par le seed pour être utilisable. Or le seed installe une fiction : « Maison Rivage », des salariés inventés, quatre semaines de planning, des absences. Sur une instance de travail, ces noms se confondent avec de vrais salariés dans l'annuaire et au registre du personnel. Le trou qu'il bouchait était réel : après les migrations, une instance avait le schéma et rien à quoi l'accrocher. Aucun type d'absence, donc aucune demande saisissable. Aucune étiquette, donc aucun créneau nommé. Aucune convention, donc un moteur de règles muet qui laisse passer une semaine de soixante heures sans rien dire. L'écran d'installation pose donc désormais les référentiels : les douze étiquettes, cinq types d'absence, la convention d'amorce IDCC 1517 avec l'origine de chacun de ses paramètres, les durées de conservation et les jours fériés des deux prochaines années. Ce ne sont pas des exemples mais des minima, tous modifiables ensuite depuis les réglages. Trois choses restent délibérément absentes. Aucun dimanche du maire : la liste vient d'un arrêté municipal, et en inventer rendrait opposable un quota que personne n'a accordé. Aucun code Silae sur les types d'absence : la correspondance appartient au dossier du client. Aucun salarié, aucun créneau, aucune absence. Le seed devient `prisma/seed-demo.ts`, réservé au harnais Playwright. `db:seed` disparaît au profit de `db:seed:demo` : il n'y a plus rien à semer pour démarrer, et un nom qui le dit vaut mieux qu'un commentaire qui l'explique. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
72 lines
1.7 KiB
JSON
72 lines
1.7 KiB
JSON
{
|
|
"name": "planflow",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"packageManager": "pnpm@10.33.0",
|
|
"engines": {
|
|
"node": ">=22"
|
|
},
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "eslint .",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:e2e": "playwright test",
|
|
"db:generate": "prisma generate",
|
|
"db:migrate": "prisma migrate dev",
|
|
"db:deploy": "prisma migrate deploy",
|
|
"db:studio": "prisma studio",
|
|
"mfa:reset": "tsx scripts/mfa-reset.ts",
|
|
"retention:purge": "tsx scripts/retention-purge.ts",
|
|
"verify": "pnpm typecheck && pnpm lint && pnpm test",
|
|
"db:seed:demo": "tsx prisma/seed-demo.ts"
|
|
},
|
|
"prisma": {
|
|
"seed": "tsx prisma/seed.ts"
|
|
},
|
|
"dependencies": {
|
|
"@node-rs/argon2": "2.0.2",
|
|
"@prisma/adapter-pg": "7.9.1",
|
|
"@prisma/client": "7.9.1",
|
|
"next": "16.3.0",
|
|
"nodemailer": "^9.0.5",
|
|
"pdf-lib": "^1.17.1",
|
|
"pg": "8.22.0",
|
|
"qrcode": "^1.5.4",
|
|
"react": "19.2.8",
|
|
"react-dom": "19.2.8",
|
|
"zod": "4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "1.62.1",
|
|
"@tailwindcss/postcss": "4.3.3",
|
|
"@types/node": "22.19.4",
|
|
"@types/nodemailer": "^8.0.1",
|
|
"@types/pg": "8.20.4",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/react": "19.2.18",
|
|
"@types/react-dom": "19.2.4",
|
|
"dotenv": "^17.4.2",
|
|
"eslint": "9.39.1",
|
|
"eslint-config-next": "16.3.0",
|
|
"prisma": "7.9.1",
|
|
"tailwindcss": "4.3.3",
|
|
"tsx": "4.20.6",
|
|
"typescript": "5.9.3",
|
|
"vitest": "4.1.10"
|
|
},
|
|
"pnpm": {
|
|
"onlyBuiltDependencies": [
|
|
"@prisma/client",
|
|
"@prisma/engines",
|
|
"esbuild",
|
|
"prisma",
|
|
"unrs-resolver"
|
|
]
|
|
}
|
|
}
|