Přeskočit na hlavní obsah

Klientské reporty

Klientské reporty jsou editovatelné CRM dokumenty s odpracovanými hodinami, které posíláte klientovi pro odsouhlasení nebo informaci. Liší se od faktur — report je prezentace práce, faktura je daňový doklad.

Karel persona

Typický uživatel: account manager / projektový manažer (Karel). Pracuje s reportem v 5 krocích:

  1. Vybere klienta a období (např. Březen 2026).
  2. Otevře editor — uvidí raw výkazy z týmu.
  3. Post-edituje řádky — sloučí "Schůzky + Telefonáty + E-maily" do jediné řádky "Komunikace s klientem 5h", upraví popisky pro klienta.
  4. Pošle report e-mailem (PDF příloha) — klient vidí 8 čistých prezentačních řádků místo 30 raw výkazů.
  5. Pokud klient požádá o úpravu, vytvoří revizi (v2).

Životní cyklus reportu

StavPopisLze upravit?
Draft (koncept)Karel připravuje, edituje řádky✅ Ano
Sent (odesláno)Report poslán klientovi❌ Ne — pouze přes revizi
Revision (revize)Nová verze (v2, v3, …) odeslaného reportu✅ Ano (do dalšího odeslání)

Po odeslání je report immutable — chrání to integritu dat odeslaných klientovi (pokud byste ho upravili po odeslání, klient by měl jiný PDF než vy).

Co může report obsahovat

  • Časové výkazy (time_entries) — odpracované hodiny týmu.
  • Náklady (expenses) — fakturovatelné položky z modulu Náklady (Sprint 84). Náklady mají em-dash () místo hodinové sazby a označení "Náklad" v badge.
  • Karel může řádky slučovat (merge) do agregovaných řádků pro klienta.

Vytvoření reportu

  1. Sidebar → Klientské reporty+ Nový report.
  2. Vyberte klienta a období.
  3. Volitelné: zaškrtnete "Zahrnout fakturovatelné náklady" (Sprint 84 Wave G).
  4. Klikněte Vytvořit — otevře se editor.

V editoru můžete:

  • Upravit popisek řádku (text pro klienta).
  • Sloučit řádky drag-and-drop nebo přes kontextové menu.
  • Smazat řádek (data v time_entries zůstávají — pouze se nezobrazí v reportu).
  • Zobrazit jména pracovníků (toggle v hlavičce).

Odeslání reportu

  1. V editoru klikněte Odeslat klientovi.
  2. Vyplňte e-mail a předmět zprávy.
  3. PDF se vygeneruje a připojí jako příloha.
  4. Status se změní na Sent, řádky jsou zafixované.
Sprint 91 — report sent NEznamená uzavření výkazů

Před Sprint 91 odeslání reportu automaticky flipnulo time_entries.status='invoiced' (Sprint 75 closure flow A1). Sprint 91 to změnil: odeslání reportu přidá pouze marker "Reportováno klientovi" badge, ALE NE-uzavře výkazy. Closure (uzavření) je separate flow přes Uzávěrky — finance concept (Michala persona), ne CRM concept (Karel persona).

Revize odeslaného reportu

Pokud klient požádá o úpravu, klikněte na sent report → Revidovat:

  1. Vytvoří se draft v2 se zkopírovanými řádky.
  2. Původní v1 zůstává immutable (klient stále má originální PDF).
  3. Editujete v2 → odešlete → status se změní na Sent revision number 2.

Verze jsou propojené přes revisionOfId self-FK. V seznamu reportů uvidíte badge v2, v3 vedle čísla.

Sprint 92 — faktura z reportu

Po Sprint 92 můžete vystavit fakturu, která zrcadlí klientský report 1:1. Více v Faktura z klientského reportu.

Workflow Karel + Michala
  • Karel post-edituje report (8 prezentačních řádků z 30 raw výkazů) → pošle.
  • Michala (CFO/účetní) vidí dashboard widget "Reportováno klientovi, čeká na fakturaci" → otevře /invoicing → klikne + Nová faktura → smart-default zvolí source="Z klientského reportu" → vidí preview → submit → faktura má přesně 8 řádků jako report.
  • Klient dostane fakturu identickou s reportem = žádný "wtf moment".

Prevence duplicit (Sprint 91.5)

Sprint 91.5 přidal 3-vrstvou ochranu proti duplicitním sent reportům per (klient × overlapping period):

  1. Klient-side: dialog při vytvoření blokuje "Vytvořit nový" pokud existuje překrývající sent report — jediný forward path je Revidovat poslední.
  2. Server-side: detectOverlapWithSentReports helper vrací CONFLICT chybu s odkazem na existující report.
  3. Database UNIQUE index: client_reports_unique_sent_per_period zajišťuje hard constraint na úrovni DB.
Proč duplicate prevention?

Před Sprint 91.5 měl uživatel ACME × Březen 2026 = 4 duplicate sent reports v DB. Klient by mohl dostat 4 různé PDFs pro stejné období — záleželo by jen na tom, které otevřel. Sprint 91.5 to zafixoval: 1 sent non-revision report per period.

Přístup

Klientské reporty má každý plán (Free, Starter, Business, Custom). Role:

  • Owner / Admin: plný přístup ke všem reportům v org.
  • Manager / Accountant: scoped přes client_assignments (vidí jen reporty pro své klienty).
  • HR / Worker: žádný přístup.