# Requirements — ClientHub v2.0 Business Operations Suite

## Dashboard Cliente (v1)

| ID | Requirement | Status |
|----|-------------|--------|
| DASH-01 | Ogni cliente ha un URL segreto univoco (nessun login richiesto) | Pending |
| DASH-02 | La dashboard mostra nome cliente, nome brand, brief del progetto e stato attuale | Pending |
| DASH-03 | Il piano è strutturato per fasi con milestone e task all'interno di ogni fase | Pending |
| DASH-04 | I task hanno stato visibile (da fare / in corso / fatto) | Pending |
| DASH-05 | Il cliente può approvare i deliverable dalla sua area | Pending |
| DASH-06 | Il cliente può lasciare commenti su task e deliverable | Pending |
| DASH-07 | Il cliente vede solo il totale del preventivo accettato (non i prezzi dei singoli servizi) | Pending |
| DASH-08 | Il cliente vede lo stato dei pagamenti: acconto 50% (da saldare / inviata / saldato) e saldo 50% (da saldare / inviata / saldato) | Pending |
| DASH-09 | Link a documenti e file (Google Drive, PDF, deliverable) | Pending |
| DASH-10 | Storico note e decisioni prese nel tempo | Pending |

## Area Amministratore (v1)

| ID | Requirement | Status |
|----|-------------|--------|
| ADMIN-01 | Vista di tutti i clienti con stato sintetico | Pending |
| ADMIN-02 | Gestione completa di ogni cliente: fasi, task, documenti, pagamenti | Pending |
| ADMIN-03 | Preventivo completo con dettaglio servizi (non visibile al cliente) | Pending |

## Catalogo Servizi (v1)

| ID | Requirement | Status |
|----|-------------|--------|
| CAT-01 | File/database dei servizi con prezzi e cosa è incluso | Pending |
| CAT-02 | Usato come base per la generazione assistita dei preventivi | Pending |

## Progetti Multi-Project (Phase 4)

| ID | Requirement | Status |
|----|-------------|--------|
| PROJ-01 | Ogni cliente può avere N progetti; ogni progetto ha workspace indipendente (fasi, pagamenti, preventivo, timer) | Pending |
| PROJ-02 | La dashboard cliente mostra tabs per 2+ progetti; con 1 progetto mostra direttamente il workspace senza selettore | Pending |
| PROJ-03 | La pagina /admin/projects elenca tutti i progetti con €/h reale e timer; /admin/projects/[id] è il workspace progetto | Pending |
| PROJ-04 | Il link cliente supporta slug personalizzabile (/c/mario-rossi) con fallback al token esistente | Pending |
| PROJ-05 | Analytics profittabilità per progetto: ore lavorate, accepted_total, €/h reale vs target_hourly_rate globale | Pending |

## Offer System (Phase 5)

| ID | Requirement | Status |
|----|-------------|--------|
| OFFER-01 | Admin può creare macro-offerte (es. Entry Offer, Signature Offer, Retainer) con nome interno, nome pubblico e promessa di trasformazione macro | Pending |
| OFFER-02 | Ogni macro-offerta ha micro-offerte figlie (es. Entry A/B/C) con nome interno, nome pubblico, promessa di trasformazione micro e durata in mesi | Pending |
| OFFER-03 | Admin può creare servizi con nome, prezzo e descrizione della trasformazione; ogni servizio è assegnabile a più micro-offerte via multi-select (many-to-many) | Pending |
| OFFER-04 | Admin può assegnare una o più micro-offerte a un progetto; admin vede le offerte attive per ogni progetto e cliente | Pending |
| OFFER-05 | La dashboard cliente mostra le offerte attive con nome pubblico, prezzo cumulativo dei servizi inclusi e prezzo finale accettato in evidenza; se ha più offerte le vede tutte | Pending |
| OFFER-06 | Admin ha una vista revenue forecast dei 12 mesi successivi basata su offerte attive, durata e accepted_total; breakdown mensile con totale fatturato per mese | Pending |

## Catalogo Unificato & Offer Builder (Phase 7–8)

| ID | Requirement | Status |
|----|-------------|--------|
| CAT-U-01 | Un'unica tabella `services` unifica `service_catalog` + `offer_services`; migrazione zero data loss con audit trail (`migrated_from`) | Phase 7 |
| CAT-U-02 | Admin `/admin/catalog` list/add/edit/soft-delete per i servizi singoli (nome, prezzo_unitario, attivo) | Phase 7 |
| OFFER-B-01 | Offer = nome + tag tipo (Entry/Signature/Retainer/custom) + fasi ordinate; fasi indipendenti l'una dall'altra (es. Signature A/B/C non ereditate) | Phase 8 |
| OFFER-B-02 | `/admin/offers/[id]/edit` two-column builder: left colonna servizi (ricerca), right colonna fasi con drag&drop tra fasi e dentro fase (reorder) | Phase 8 |
| OFFER-B-03 | Drag&drop salva per singolo drop con optimistic update client-side + validazione server; versioning previene race condition da multi-tab edit | Phase 8 |

## Quote Builder & Public Proposal Pages (Phase 9)

| ID | Requirement | Status |
|----|-------------|--------|
| QUOTE-01 | `/admin/quotes/new`: select cliente + 1-3 offerte + override prezzo per ciascuna offerta + genera link pubblico `/quote/[token]` | Phase 9 |
| QUOTE-02 | Public `/quote/[token]` pagina multistep (Zod validazione): Step 1 (overview) → Step 2 (tier A/B/C selection + prezzi + fasi) → Step 3 (summary + accept/decline) | Phase 9 |
| QUOTE-03 | Accept CTA → POST `/api/public/quote/accept?token=X` con cattura email (opzionale) + note opzionali; registra timestamp accepted_at immutabile | Phase 9 |
| QUOTE-04 | Quote token: nanoid 21 char (~122 bits), unico, validato in proxy come `/client/[token]` (nessun login sessione); rate limit 3 views/min per IP | Phase 9 |
| QUOTE-05 | Mai esporre `quote_items` (prezzi per servizio) via public API; client API vede solo `accepted_total` (server-side ClientView type enforces) | Phase 9 |

## CRM Pipeline & Activity Logging (Phase 10)

| ID | Requirement | Status |
|----|-------------|--------|
| CRM-01 | Lead CRUD: `/admin/leads` list table (name, email, company, status, last_contact_date, next_action) con create/edit/delete | Phase 10 |
| CRM-02 | Lead detail page `/admin/leads/[id]`: full profilo, activity log (reverse chronological), quote(s) sent, actions menu (log activity, send quote, mark won) | Phase 10 |
| CRM-03 | Pipeline stages: Contacted → Qualified → Proposal Sent → Negotiating → Won / Lost; transizioni via dropdown (manual di default) | Phase 10 |
| CRM-04 | Activity logging: tipi (call, email, meeting, note); ogni attività: type, date, durata (opz), notes; auto-aggiorna lead.last_contact_date | Phase 10 |
| CRM-05 | "Log activity" modal: <10 sec UX (type dropdown, date picker, notes textarea, save) — bassa tolleranza per data entry lunghi | Phase 10 |
| CRM-06 | Follow-up reminders widget in dashboard: "Follow up today" (leads dove last_contact_date < oggi - 7 giorni); click → jump lead detail | Phase 10 |
| CRM-07 | "Send Quote" button in lead detail: select existing quote o crea nuovo; update lead.last_quote_sent + status → "Proposal Sent" | Phase 10 |

## Auto-Onboarding on Win (Phase 11)

| ID | Requirement | Status |
|----|-------------|--------|
| WIN-01 | "Mark as Won" button in lead detail (o auto-triggered da public quote accept); idempotency: call 2 volte = idempotent, stesso client token | Phase 11 |
| WIN-02 | winLead(leadId, quoteId): crea client (name da lead, token = nanoid), crea project (name = company/offer name), copia offer fasi → project fasi | Phase 11 |
| WIN-03 | 1-4 pagamenti: user sceglie split template (50/50, 3-part, 4-part, custom); registra importo accepted_total da quote | Phase 11 |
| WIN-04 | Generate client dashboard link (`/client/[token]`), invia via email al lead (copy-paste OK, email automation deferred Phase 12+) | Phase 11 |
| WIN-05 | Quote accept da public link `/quote/[token]` auto-aggiorna lead.status → "Proposal Sent" + trigga win (auto-onboarding) | Phase 11 |
| WIN-06 | Copy offer phases → project phases: tutte le fasi copiate con status = "upcoming", le fasi modificabili dopo (template immutabile, instance editable) | Phase 11 |

## Flusso Claude (v3 — deferred to Phase 13+)

| ID | Requirement | Status |
|----|-------------|--------|
| CLAUDE-01 | Onboarding guidato step-by-step via chat per aggiungere un nuovo cliente | Deferred |
| CLAUDE-02 | Generazione del piano a fasi basato dal brief | Deferred |
| CLAUDE-03 | Generazione preventivo assistita (Claude suggerisce struttura offerta, tu approvi) | Deferred |

## Out of Scope (v2.0)

- Fatturazione e invio fatture (solo stato pagamenti)
- App mobile nativa (solo web responsive)
- Multi-utente con team (solo admin singolo)
- Prezzi singoli visibili al cliente (solo totale accettato)
- Email automation (manual copy-paste OK per MVP)
- Lead scoring / predictive analytics
- Team collaboration
- Lead de-duplication (manual link on Win)
- Proposal expiry logic (open indefinitely)
- BullMQ persistent reminders (in-app computed, persistent deferred Phase 12+)

## Traceability

| Requirement | Phase | Status |
|-------------|-------|--------|
| DASH-01 | Phase 1 | Pending |
| DASH-02 | Phase 1 | Pending |
| DASH-03 | Phase 1 | Pending |
| DASH-04 | Phase 1 | Pending |
| DASH-07 | Phase 1 | Pending |
| DASH-08 | Phase 1 | Pending |
| DASH-09 | Phase 1 | Pending |
| DASH-10 | Phase 1 | Pending |
| ADMIN-01 | Phase 2 | Pending |
| ADMIN-02 | Phase 2 | Pending |
| DASH-05 | Phase 2 | Pending |
| DASH-06 | Phase 2 | Pending |
| CAT-01 | Phase 3 | Pending |
| CAT-02 | Phase 3 | Pending |
| ADMIN-03 | Phase 3 | Pending |
| PROJ-01 | Phase 4 | Pending |
| PROJ-02 | Phase 4 | Pending |
| PROJ-03 | Phase 4 | Pending |
| PROJ-04 | Phase 4 | Pending |
| PROJ-05 | Phase 4 | Pending |
| OFFER-01 | Phase 5 | Pending |
| OFFER-02 | Phase 5 | Pending |
| OFFER-03 | Phase 5 | Pending |
| OFFER-04 | Phase 5 | Pending |
| OFFER-05 | Phase 5 | Pending |
| OFFER-06 | Phase 5 | Pending |
| CAT-U-01 | Phase 7 | Phase 7 |
| CAT-U-02 | Phase 7 | Phase 7 |
| OFFER-B-01 | Phase 8 | Phase 8 |
| OFFER-B-02 | Phase 8 | Phase 8 |
| OFFER-B-03 | Phase 8 | Phase 8 |
| QUOTE-01 | Phase 9 | Phase 9 |
| QUOTE-02 | Phase 9 | Phase 9 |
| QUOTE-03 | Phase 9 | Phase 9 |
| QUOTE-04 | Phase 9 | Phase 9 |
| QUOTE-05 | Phase 9 | Phase 9 |
| CRM-01 | Phase 10 | Phase 10 |
| CRM-02 | Phase 10 | Phase 10 |
| CRM-03 | Phase 10 | Phase 10 |
| CRM-04 | Phase 10 | Phase 10 |
| CRM-05 | Phase 10 | Phase 10 |
| CRM-06 | Phase 10 | Phase 10 |
| CRM-07 | Phase 10 | Phase 10 |
| WIN-01 | Phase 11 | Phase 11 |
| WIN-02 | Phase 11 | Phase 11 |
| WIN-03 | Phase 11 | Phase 11 |
| WIN-04 | Phase 11 | Phase 11 |
| WIN-05 | Phase 11 | Phase 11 |
| WIN-06 | Phase 11 | Phase 11 |
| CLAUDE-01 | Phase 13 (v3) | Deferred |
| CLAUDE-02 | Phase 13 (v3) | Deferred |
| CLAUDE-03 | Phase 13 (v3) | Deferred |