Přeskočit na hlavní obsah

Revize klientského reportu

Pokud klient požádá o úpravu už odeslaného reportu, vytvoříte revizi. Originální verze (v1) zůstává nedotčená — klient ji má v e-mailu — a vy editujete novou verzi (v2, v3, …).

Proč revize a ne přímá úprava?

Sent report je immutable ze dvou důvodů:

  1. Důvěra klienta: PDF, které jste poslali, musí odpovídat tomu, co máte v systému. Kdybyste ho upravili po odeslání, klient by měl jiné PDF než vy.
  2. Audit trail: Můžete kdykoli zpětně doložit, co přesně bylo odesláno — důležité při sporných fakturách.

Jak vytvořit revizi

  1. Klientské reporty → najděte sent report.
  2. Klikněte na Revidovat (nebo otevřete report a klikněte tlačítko v hlavičce).
  3. Systém vytvoří draft v2 s identickými řádky jako v1.
  4. Editujete v2 (sloučíte/upravíte/přidáte/smažete řádky).
  5. Klikněte Odeslat klientovi — v2 se stane sent.

Po odeslání:

  • v1 zůstává sent, immutable, dohledatelná v seznamu.
  • v2 je sent revision number 2.
  • v seznamu reportů vidíte badge v2 vedle čísla (např. "FV-Acme-březen 2026 — v2").

Co se zkopíruje do v2

  • Všechny řádky z v1 (description, durationMinutes, amount, projectName, sortOrder, entityType).
  • Source pointers (source_entry_ids, source_expense_ids).
  • Klientské metadata (název, období, e-mail příjemce).

Co se NEzkopíruje: stav sent + sent_at + sent_to (v2 začíná jako draft).

Řetězec revizí

Verze jsou propojené přes self-FK revisionOfId:

v1 (sent) ← revisionOfId ← v2 (sent) ← revisionOfId ← v3 (draft)

revision_number je v client_reports.revision_number integer (default 1, increment per revision). Latest revision je dohledatelná přes max(revision_number) v chain.

Sprint 91.5 — revize jsou exempt z duplicate gate

Sprint 91.5 zavedl 3-vrstvou ochranu proti duplicitním sent reportům per (klient × overlapping period). Revize jsou explicitně exempt — můžete vytvořit v2/v3/v4 pro stejné období, protože jsou propojené přes revisionOfId chain.

Sprint 92 — co se stane když Karel revidoval report po vystavení faktury

Pokud máte:

  1. Sent report v1 → vystavili jste fakturu (Sprint 92 invoice from client report).
  2. Karel teď revidoval report → vznikla v2 (draft).

Faktura stále zrcadlí v1 (snapshot). Sprint 92 je snapshot, ne continuous mirror — proto faktura zůstává konzistentní s tím, co klient dostal.

Pokud chcete fakturu aktualizovat na v2:

  1. Otevřete fakturu v /invoicing.
  2. V sekci "Vytvořeno z reportu" klikněte Aktualizovat z reportu.
  3. Confirm dialog — řádky se přepíší podle latest revision (v2).
  4. Faktura má teď řádky podle v2.
Refresh není automatický

Snapshot pattern znamená, že karel může revidovat report bez vlivu na fakturu. Refresh je explicit user action — Michala (účetní) vědomě rozhodne, zda fakturu upravit podle revize, nebo nechat originální verzi.