Skip to content

Doklady a účetnictví

Nový modul v exportu z 19. 8. 2026. V předchozí verzi existovala jen entita Invoice a generování faktur za dokončené termíny; nyní jde o samostatnou účetní vrstvu s vlastními pravidly a exportem do Pohody.

Kde v kódu: base44/shared/ (1 142 řádků) + funkce generatePurchaseDocument, getPublicInvoice, processRefund, onServiceRealized, onLateCancellation, syncPohodaExport, pohodaTestRun, batchGenerateInvoices.

Pravidla vzniku dokladu

Ověřený fakt — z komentáře a kódu shared/documentGeneration.ts:

Situace Co vznikne Exportuje se do Pohody?
Terapie placená kartou / online / převodem (NEO) daňový doklad (tax_invoice) ano
Terapie placená na recepci (cashdesk_*) nic — doklad vystavuje pokladní systém ne
Terapie čerpaná z balíčku nebo voucheru nic — daňový příjem vznikl už při prodeji ne
Terapie čerpaná z kreditu stopa čerpání (no_doc) ne
Prodej balíčku nebo voucheru daňový doklad k nákupu (advance_invoice / tax_invoice) ano
Dobití kreditu nedaňové potvrzení o přijetí platby (non_tax_confirmation) ne
Uskutečnění služby (completed) vznik výnosu (revenue), případně doklad k dodávce ano
Pozdní storno (cancelled_late) storno poplatek (penalty, není plněním DPH) ano
Nedostavení u pojišťovny (no_show_insurance) storno poplatek k úhradě klientem ano
Vratka hotovostí nebo přes bránu dobropis (credit_note) vázaný na původní doklad ano
Vratka na kredit nebo do balíčku bez dobropisu — nejde o daňovou změnu ne
Kampaňový voucher marketingový náklad (marketing_expense) ano

Dvě fáze účetního toku

Změna logiky: peněžní tok a výnos jsou oddělené v čase.

flowchart LR
    P[Přijetí platby] -->|accounting_phase = payment_receipt| D1[Doklad k přijaté platbě / záloha]
    R[Uskutečnění služby] -->|accounting_phase = realization| D2[Vznik výnosu / doklad k dodávce]
    D1 --> POH[Export do Pohody]
    D2 --> POH
  • Klient zaplatí předem (kredit, balíček, voucher) → přijatá záloha, bez výnosu
  • Služba se uskuteční (status = completed) → automat onServiceRealized zaúčtuje výnos
  • U dokladu k dodávce s odpočtem zálohy je total_amount = 0 Kč k úhradě

Identifikátory a idempotence

Pole K čemu je
event_id UUID účetní události — sdílené mezi Invoice, PaymentLog a CreditTransaction; slouží ke korelaci a deduplikaci exportu
purchase_id Samostatný nákup mimo rezervaci (kredit, balíček, voucher)
variable_symbol Číslo dokladu + ID klienta; u klienta jinak client_number
invoice_token Náhodné UUID pro veřejný odkaz /invoice?token=…
accounting_source reservation / standalone_purchaseodvozuje se, nezadává se ručně
accounting_phase payment_receipt / realization — rovněž odvozené

Export do Pohody

Ověřený faktsyncPohodaExport (admin only):

  1. Načte Invoice s pohoda_export_status = 'pending', export_to_pohoda = true a tax_document_flag = true
  2. Po dávkách po 20 sestaví dataPack XML (shared/pohodaXml.ts) a POSTne ho na pohoda_api_url
  3. Z responsePack uloží pohoda_external_id, nebo chybu do pohoda_export_error
  4. Doklad označí jako exported / failed

Přepínače (SystemSettings): pohoda_export_enabled, pohoda_test_mode (dry-run), pohoda_new_rules_enabled (nová pravidla — operationMeta tagy a vazba na původní platbu; zapínat až po testu).

Testovací režimpohodaTestRun projde 10 reprezentativních scénářů, nic nepersistuje a neodesílá, jen loguje výsledek a kontroluje idempotenci.

Riziko: doklady ve stavu failed nikdo znovu nezkouší — viz R18. Účetní zápisy navíc vznikají bez transakcí (Base44 NoSQL) — viz R17.

Kdo k tomu má přístup

  • generatePurchaseDocument — role admin nebo finance
  • syncPohodaExport — pouze admin
  • getPublicInvoice — bez přihlášení, výhradně přes token dokladu

Související