4.7 KiB
4.7 KiB
AGENTS.md
État des lieux opérationnel du projet SIRH (backend + frontend), mis à jour après les évolutions sur heures/absences/validations.
1) Stack et structure
- Backend: Symfony + API Platform + Doctrine ORM
- Frontend: Nuxt 4 + Vue 3 + TypeScript + Tailwind
- Exécution locale: Docker via
makefile
Arborescence clé:
src/: domaine, API resources, state providers/processors, servicestests/: TU backend (PHPUnit)frontend/: app Nuxt (pages, composants, composables, services)migrations/: migrations Doctrine
2) Commandes utiles
- Démarrer stack:
make start - Tests backend:
make test - Build frontend:
cd frontend && npm run build - Dev frontend:
make dev-nuxt
3) Domaine métier (résumé)
Contrats
- Entité:
Contract - Champs principaux:
name,trackingMode,weeklyHours,isActive,type trackingMode:TIME: suivi en heuresPRESENCE: suivi en demi-journées/journées
- Enums backend:
App\Enum\TrackingModeApp\Enum\ContractType(FORFAIT,THIRTY_FIVE_HOURS,THIRTY_NINE_HOURS,INTERIM,CUSTOM)
- Historique de contrat par employé:
- table
employee_contract_periods - résolu par
App\Service\Contracts\EmployeeContractResolver
- table
Heures / absences
- Les absences sont stockées en lignes journalières (découpage automatique dans
AbsenceWriteProcessor). - Les absences
countAsWorkedHours=truecréditent:- minutes (contrats TIME)
- unités de présence (contrats PRESENCE)
- Les absences AM/PM effacent les plages horaires concernées.
4) Validations (important)
Validation RH (admin)
- Champ:
work_hours.is_valid - Endpoint API Platform standard:
PATCH /api/work_hours/{id} - Gérée côté front par
updateWorkHourValidation.
Validation site (chef de site)
- Champ:
work_hours.is_site_valid - Endpoint dédié:
PATCH /api/work_hours/{id}/site-validation - Processor:
src/State/WorkHourSiteValidationProcessor.php - Autorisé uniquement aux utilisateurs "Sites" (ni
ROLE_ADMIN, niROLE_SELF) dans leur scope site.
Règles de verrouillage
is_valid=true: ligne verrouillée pour tout le monde (admin inclus pour saisie heures/absence; peut toujours décocher validation RH).is_site_valid=true:- non-admin: ligne verrouillée (heures + absences)
- admin: ligne éditable
- Toute modification de ligne (heures/présence/absence) remet:
is_site_valid=falseis_valid=false
5) Page Heures (front)
- Page:
frontend/pages/hours.vue - Composable principal:
frontend/composables/useHoursPage.ts - Composants:
frontend/components/hours/HoursToolbar.vuefrontend/components/hours/HoursDayView.vuefrontend/components/hours/HoursWeekView.vue
Comportement par profil (vue jour)
- Admin:
- colonne RH avec checkbox
- badge
Site validéaffiché près du site
- Chef de site:
- colonne
Validation siteavec checkbox - colonne RH en lecture (
Validé/-)
- colonne
- Employé:
- colonne
Validation siteen lecture - colonne RH en lecture
- colonne
6) Résumé hebdo / calculs
- Provider:
src/State/WorkHourWeeklySummaryProvider.php - DTOs:
src/Dto/WorkHours/WeeklySummaryRow.phpsrc/Dto/WorkHours/WeeklyDaySummary.php
- Inclut: contrat résolu par jour, absences, crédits, jour/nuit/total, majorations, récup.
Règles majorations:
- Contrats <= 35h: +25% de 35h à 43h, +50% au-delà
- Contrats >= 39h: +25% de 39h à 43h, +50% au-delà
INTERIM: pas de 25% / 50% / récup
7) Migrations sensibles
migrations/Version20260226183000.php- ajoute
work_hours.is_site_valid BOOLEAN NOT NULL DEFAULT FALSE - non destructive (pas de perte de données)
- ajoute
8) Points de vigilance prod
- Toujours exécuter migration avant déploiement code backend/front lié.
- Après déploiement backend, si route manquante côté runtime:
php bin/console cache:clear && php bin/console cache:warmup
- Vérifier présence route:
/api/work_hours/{id}/site-validation(PATCH)
9) Conventions techniques
- Favoriser DTO explicites plutôt que tableaux associatifs.
- Garder règles métier dans backend (providers/processors/services), front orienté affichage/interaction.
- Maintenir alignement backend DTO PHP / frontend DTO TS (
frontend/services/dto/*). - Mettre à jour TU si signature constructor/service change.
10) Fichiers à lire avant modification
src/State/WorkHourBulkUpsertProcessor.phpsrc/State/AbsenceWriteProcessor.phpsrc/State/WorkHourSiteValidationProcessor.phpsrc/State/WorkHourWeeklySummaryProvider.phpsrc/Service/WorkHours/WorkedHoursCreditPolicy.phpfrontend/composables/useHoursPage.tsfrontend/components/hours/HoursDayView.vuefrontend/components/hours/HoursWeekView.vue