14. Pravidelné fakturace (Recurring invoices)

Šablony pro automatické generování faktur v pravidelných intervalech. Hodí se pro paušální platby (hosting, předplatné, retainer …), kde se fakturuje stále stejná částka stejnému klientovi.

Šablona drží konfiguraci (periodicita, položky, klient, dodavatel) a cron cron-generate-recurring-invoices.php (běží denně) podle ní vytváří nové faktury. Volitelně je rovnou vystaví (přidělí číslo faktury) a/nebo odešle klientovi e-mailem.

14.1 Kdy použít

Pro jednorázové znovuvystavení stávající faktury (např. „udělej ze faktury 5/2026 fakturu 6/2026") slouží klasický klon faktury v detailu faktury — ne pravidelná šablona.

14.2 Vytvoření šablony

V menu Systém → Pravidelné fakturace klikni + Nová šablona, nebo v detailu existující faktury tlačítko Vytvořit šablonu z této faktury (předvyplní klienta, položky, měnu, jazyk i payment method).

14.2.1 Sekce „Periodicita"

14.2.2 Sekce „Faktura"

Tady nastavíš metadata, která se zkopírují na každou vygenerovanou fakturu:

14.2.3 Položky

Položky šablony se 1:1 kopírují na každou vygenerovanou fakturu (popis, mn., cena/j, sazba DPH). DPH sazba se v okamžiku generování přebíjí aktuální hodnotou z číselníku (vat_rates) — pokud stát mezitím změní sazby, šablona se sama přizpůsobí.

14.2.4 Sekce „Automatizace"

Default pro nové šablony je obojí zapnuté → plně automatická pravidelná fakturace.

14.3 Lifecycle šablony

Šablona má tři stavy:

V seznamu šablon je u každé tlačítko Pozastavit / Obnovit a Vygenerovat teď (jednorázový manuál run — užitečné pro testování nastavení).

14.4 Cron

Skript api/bin/cron-generate-recurring-invoices.php — spouštěj ho jednou denně:

0 6 * * * cd /var/www/myinvoice.cz && php api/bin/cron-generate-recurring-invoices.php

Pro testy se hodí --dry-run (vypíše, co by se vygenerovalo, ale nic nevytvoří).

Catch-up: pokud cron několik dní nešel, generuje jen jednu fakturu za cyklus a posune o jeden krok — zbytek backlog se doplní postupně další dny. Tím se zabrání tomu, aby po výpadku cron vygeneroval naráz 30 faktur za poslední měsíc.

14.5 Kill-switch (Nastavení → Dodavatel)

V Nastavení → Můj dodavatel je přepínač „Generovat pravidelné fakturace cronem". Pokud je vypnutý, cron tohoto dodavatele úplně přeskočí — všechny šablony se zastaví, dokud ho zase nezapneš. Manuální tlačítko Vygenerovat teď funguje nezávisle.

14.6 Vazba na vygenerované faktury

Každá faktura vytvořená šablonou má vazbu recurring_template_id (sloupec v invoices). V detailu faktury se zobrazí badge ↻ Pravidelná s odkazem na šablonu, ze které pochází.

Když šablonu smažeš, vygenerované faktury zůstanou (databáze má ON DELETE SET NULL — vazba se vyčistí, faktura zůstane platná).

14.7 Activity log

Vše se zaznamenává:

14.8 REST API

Pravidelné fakturace mají vlastní REST endpointy pod /api/recurring/*:

EndpointAkce
GET /api/recurringseznam (filtry: client_id, status)
POST /api/recurringvytvořit šablonu
GET /api/recurring/{id}detail
PUT /api/recurring/{id}update
DELETE /api/recurring/{id}smazat
POST /api/recurring/{id}/pausepozastavit
POST /api/recurring/{id}/resumeobnovit
POST /api/recurring/{id}/run-nowmanuální spuštění (volitelně issue_date)

Detailní schémata viz /api/reference (Redoc) nebo /api/docs (Swagger UI, Try it out).