fix : affichage des absences dans les heures vue semaine + refacto
This commit is contained in:
105
AGENTS.md
Normal file
105
AGENTS.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# AGENTS.md
|
||||
|
||||
État des lieux opérationnel du projet SIRH (backend + frontend), à utiliser comme base sur les prochaines interventions.
|
||||
|
||||
## 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, services
|
||||
- `tests/`: 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`
|
||||
- `trackingMode`:
|
||||
- `TIME`: suivi par heures
|
||||
- `PRESENCE`: suivi présence demi-journées/journées
|
||||
- Enums backend:
|
||||
- `App\Enum\TrackingMode`
|
||||
- `App\Enum\ContractType` (`FORFAIT`, `35H`, `39H`, `INTERIM`, `CUSTOM`)
|
||||
- `Contract::getType()` est exposé en API (`contract:read`, `employee:read`)
|
||||
|
||||
### Heures / absences
|
||||
- Les absences sont découpées en enregistrements journaliers (pas de période unique stockée).
|
||||
- Une ligne d’heures validée est verrouillée côté métier.
|
||||
- Règles de crédit absence (`countAsWorkedHours=true`) gérées dans `WorkedHoursCreditPolicy`:
|
||||
- contrats présence: crédit en unités de présence
|
||||
- contrats temps: crédit en minutes selon règles contrat (35h, 39h, 4h, fallback)
|
||||
|
||||
## 4) Écrans principaux
|
||||
|
||||
### Page Heures (`frontend/pages/hours.vue`)
|
||||
- Vue Jour + Vue Semaine (semaine réservée admin)
|
||||
- Toolbar dédiée: `frontend/components/hours/HoursToolbar.vue`
|
||||
- Vue jour: `frontend/components/hours/HoursDayView.vue`
|
||||
- Vue semaine: `frontend/components/hours/HoursWeekView.vue`
|
||||
- Logique page: `frontend/composables/useHoursPage.ts`
|
||||
|
||||
### Points UX déjà en place
|
||||
- Toolbar semaine: raccourcis semaine précédente / actuelle / suivante
|
||||
- Légende absences affichée dans la toolbar (admin + vue semaine)
|
||||
- Cellules semaine avec absence: couleur du type d’absence (plus rouge fixe)
|
||||
- Pour user non-admin: restrictions d’édition selon validations/absences
|
||||
|
||||
## 5) API / calculs hebdo
|
||||
|
||||
- Provider: `src/State/WorkHourWeeklySummaryProvider.php`
|
||||
- DTOs:
|
||||
- `src/Dto/WorkHours/WeeklySummaryRow.php`
|
||||
- `src/Dto/WorkHours/WeeklyDaySummary.php`
|
||||
- Le résumé hebdo renvoie notamment:
|
||||
- `trackingMode`
|
||||
- `contractName`
|
||||
- `contractType`
|
||||
- détails journaliers (jour/nuit/total, présence, absence label/couleur)
|
||||
|
||||
### Heures supp
|
||||
- Règles métier:
|
||||
- contrats <= 35h: tranche 25% de 35h à 43h, puis 50% au-delà
|
||||
- contrats >= 39h: tranche 25% de 39h à 43h, puis 50% au-delà
|
||||
- contrats `INTERIM`: pas de bonus 25/50 ni récup
|
||||
|
||||
## 6) Conventions techniques
|
||||
|
||||
- Favoriser DTO explicites plutôt que tableaux associatifs bruts.
|
||||
- Utiliser les interfaces repository dans providers/processors testés.
|
||||
- Centraliser les règles métier dans services/providers backend plutôt que dupliquer côté front.
|
||||
- Front: éviter les calculs métier lourds; consommer les champs API déjà calculés.
|
||||
|
||||
## 7) Tests et qualité
|
||||
|
||||
- Les TU backend passent actuellement via `make test`.
|
||||
- Le build frontend passe via `npm run build`.
|
||||
- À chaque évolution métier:
|
||||
- mettre à jour les tests provider/processor/service impactés
|
||||
- maintenir la cohérence des DTO TypeScript (`frontend/services/dto/*`)
|
||||
|
||||
## 8) Fichiers sensibles (à lire avant modif)
|
||||
|
||||
- `src/State/WorkHourWeeklySummaryProvider.php`
|
||||
- `src/Service/WorkHours/WorkedHoursCreditPolicy.php`
|
||||
- `src/State/AbsenceWriteProcessor.php`
|
||||
- `src/State/WorkHourBulkUpsertProcessor.php`
|
||||
- `frontend/composables/useHoursPage.ts`
|
||||
- `frontend/components/hours/HoursWeekView.vue`
|
||||
|
||||
## 9) Décisions de conception actuelles
|
||||
|
||||
- Les absences sont stockées par jour (facilite verrouillage/édition fine).
|
||||
- Les règles de calcul (crédits, majorations, récup) sont portées côté backend.
|
||||
- Le front reste centré sur l’affichage/interaction et réutilise les données enrichies de l’API.
|
||||
Reference in New Issue
Block a user