# Sprint Plan

## Sprint 0 - Cloture

Statut: termine

- Backend Symfony en place avec JWT et roles.
- Frontend React TypeScript initialise avec routing et garde d'authentification.
- Base de donnees initiale migree avec fixtures.
- Documentation OpenAPI disponible via `/api/doc` et `/api/doc.json`.
- Stack Docker locale operationnelle avec ports non standards.

## Sprint 1 - Stock et Services

Statut: termine

- CRUD produits et services livre (API + UI back-office).
- Gestion de stock (mouvements in/out/adjust) avec tracabilite.
- Recherche multi-criteres, tri, pagination.
- Tests backend Sprint 1 en place et verts.

## Sprint 2 - Caisse POS et Fiche Client

Statut: pre-cloture (validation CI ajoutee, execution attendue)

### Developpement realise

- Migration POS livree: `Version20260429000100.php`.
- Entites POS: `Sale`, `SaleItem`, `SuspendedTicket`, `Payment`.
- Endpoints POS backend:
  - creation ticket,
  - suspension / reprise,
  - encaissement,
  - historique client pagine.
- Moteur de calcul centralise (`SaleCalculator`) pour sous-total, remises, taxes, total.
- UI caisse disponible sur `/backoffice/pos`.
- Client API frontend POS (`frontend/src/api/pos.ts`).
- Jeu de donnees d'illustration enrichi (plus de 20 donnees distinctes).

### Qualite et tests

- Tests d'integration POS:
  - `PosFlowTest`,
  - `PosBusinessRulesTest`.
- Test unitaire calcul:
  - `SaleCalculatorTest`.
- Scenario E2E Cypress POS ajoute:
  - `frontend/cypress/e2e/pos.cy.ts`.

### Validation du 30/04/2026

- Documentation de pilotage a jour: OK (`docs/SPRINT_PLAN.md`).
- Backend: OK (`php bin/phpunit` -> 19 tests, 48 assertions).
- Frontend build: OK (`npm run build`).
- E2E Cypress POS: KO (blocage outillage local Cypress).
  - erreur observee: `Cypress.exe: bad option: --smoke-test --ping=...`
  - impact: impossible de produire un run E2E vert dans cet environnement malgre reinstall/cache clear.

### Condition restante de cloture officielle

- Obtenir un run vert du workflow CI `Sprint 2 Validation` (incluant Cypress POS).

## Sprint 3 - Planning Interne Complet

Statut: termine (dev + validation locale)

### Developpement realise

- Migration planning livree: `Version20260430000100.php`.
- Entites planning: `Appointment`, `AppointmentService`, `EmployeeAvailability`.
- Endpoints backend planning:
  - listing multi-vues (jour/semaine/mois/annee),
  - creation / modification / annulation de rendez-vous,
  - gestion des disponibilites employe,
  - listing des employes pour l'UI.
- Moteur de validation temporelle centralise (`PlanningValidator`):
  - refus des chevauchements,
  - validation du creneau dans les disponibilites employe,
  - recalcul de duree finale a partir des services.
- UI planning disponible sur `/backoffice/planning`:
  - vue planning,
  - creation RDV,
  - edition/deplacement RDV,
  - annulation RDV,
  - gestion des disponibilites.

### Qualite et tests

- Tests backend planning:
  - `PlanningValidatorTest`,
  - `PlanningApiTest`.
- Scenario E2E Cypress planning ajoute:
  - `frontend/cypress/e2e/planning.cy.ts`.

### Validation du 30/04/2026

- Migrations: OK (`Version20260430000100` appliquee).
- Backend: OK (`php vendor/bin/phpunit` -> 22 tests, 64 assertions).
- Frontend build: OK (`npm run build`).

## Sprint 4 - E-commerce + Paiement Securise

Statut: pre-cloture (validation hors E2E terminee)

### Developpement realise

- Migration e-commerce livree: `Version20260501000100.php`.
- Entites e-commerce: `Cart`, `Order`, `OrderItem`, `PaymentEvent`.
- Services backend:
  - `EcommerceService` (panier, checkout, calculs),
  - `StripeService` (PaymentIntent + verification signature webhook).
- Endpoints backend:
  - catalogue client public,
  - panier (ajout/modif/suppression),
  - checkout + creation PaymentIntent,
  - suivi commandes client,
  - webhook Stripe idempotent.
- Synchronisation stock:
  - decrement uniquement sur `payment_intent.succeeded` valide,
  - garde-fou anti-survente dans la transaction commande/stock.
- Frontend client:
  - pages `catalog`, `cart`, `checkout`, `orders`, `order detail`,
  - parcours retrait magasin (slot/note),
  - affichage statut de commande.

### Validation hors E2E (01/05/2026)

- Backend: OK (`php vendor/bin/phpunit` -> 25 tests, 83 assertions).
- Frontend build: OK (`npm run build`).
- Migrations: OK (`doctrine:migrations:status` -> a jour sur `Version20260501000100`).

### Tests ajoutes

- Backend:
  - `EcommerceApiTest`,
  - `StripeWebhookTest`.
- Frontend E2E:
  - `frontend/cypress/e2e/ecommerce.cy.ts`.

### Condition restante pour cloture officielle

- Obtenir un run E2E e-commerce vert (`frontend/cypress/e2e/ecommerce.cy.ts`).

## Sprint 5 - Booking Client En Ligne + Espace Client

Statut: implemente (tests ecrits, execution non lancee)

### Developpement realise

- Migration Sprint 5 livree: `Version20260502000100.php`.
- Modele de donnees booking ajoute:
  - colonnes booking/paiement dans `appointments`,
  - table `booking_sessions`,
  - table `appointment_status_history`.
- Service metier centralise `BookingService`:
  - disponibilites publiques par creneaux,
  - ouverture/confirmation de session de reservation,
  - anti-conflit au moment de confirmation,
  - regles de replanification et annulation cote client,
  - ecriture de l historique de statut.
- API Sprint 5 (`ClientBookingController`):
  - endpoint public de creneaux (`/api/v1/public/booking/slots`),
  - endpoint public employes reservables (`/api/v1/public/booking/employees`),
  - ouverture/confirmation de sessions de booking,
  - espace client rendez-vous (liste, detail + historique, replanification, annulation).
- Frontend client:
  - page reservation (`/client/booking`),
  - page rendez-vous client (`/client/appointments`),
  - integration navigation et API front dediee (`frontend/src/api/booking.ts`).

### Tests ajoutes (non executes)

- Backend integration:
  - `BookingApiTest`,
  - `BookingBusinessRulesTest`.

### Verification technique effectuee

- PHP lint sur nouveaux fichiers Sprint 5: OK.
- Build frontend (`npm run build`): OK.

## Sprint 6 - Fidelite, Campagnes, Cadeaux, Rappels

Statut: implemente (tests ecrits, execution non lancee)

### Developpement realise

- Migration CRM livree: `Version20260502000200.php`.
- Nouvelles entites CRM:
  - `LoyaltyAccount`, `LoyaltyEvent`,
  - `Campaign`,
  - `GiftVoucher`,
  - `ReminderRule`,
  - `NotificationLog`.
- Service metier centralise `CrmService`:
  - attribution / consommation de points fidelite,
  - emission / consommation de bons cadeaux,
  - lancement de campagnes avec journalisation des envois,
  - execution des rappels planifies avec garde-fou d idempotence.
- API CRM back-office (`CrmController`):
  - fidelite: comptes + evenements,
  - campagnes: creation + lancement + suivi,
  - cadeaux: creation + consommation + solde,
  - rappels: regles + execution manuelle,
  - logs de notifications.
- Frontend back-office:
  - page `CRM` (`/backoffice/crm`) avec gestion des 4 blocs Sprint 6.

### Qualite et verification

- Lint PHP sur nouveaux fichiers CRM: OK.
- Build frontend (`npm run build`): OK.
- Test d integration ajoute: `CrmApiTest` (non execute).

## Sprint 7 - Statistiques, Stabilisation Finale et Livraison

Statut: valide hors E2E

### Developpement realise

- API statistiques Sprint 7:
  - `GET /api/v1/stats/overview`
  - `GET /api/v1/stats/timeseries`
  - controle d acces: `ROLE_EMPLOYEE` minimum.
- Service metier `StatsService`:
  - aggregation du chiffre d affaires global (POS + e-commerce),
  - calcul du panier moyen, volumes produits/services, taxes,
  - serie temporelle parametree (`day`, `week`, `month`),
  - validation robuste des filtres de periode.
- Dashboard back-office remplace:
  - `BackOfficeHomePage` affiche KPI + evolution CA,
  - filtres date debut/fin + granularite,
  - gestion des etats vide/erreur/chargement.
- Optimisation SQL (migration `Version20260502000300.php`):
  - index `orders(status, created_at)`,
  - index `sales(payment_status, created_at)`,
  - index `order_items(order_id)`,
  - index `sale_items(sale_id)`.

### Verification technique effectuee

- Build frontend (`npm run build`): OK.
- Migrations: OK (a jour sur `Version20260502000300`).
- Tests backend (`php vendor/bin/phpunit`): OK (29 tests, 115 assertions).
