Metadata-Version: 2.4
Name: openfisca-czechia
Version: 0.1.1
Summary: OpenFisca Rules as Code model for Czechia.
Project-URL: Homepage, https://github.com/vlki/openfisca-czechia
Project-URL: Repository, https://github.com/vlki/openfisca-czechia
Project-URL: Issues, https://github.com/vlki/openfisca-czechia/issues
Project-URL: Changelog, https://github.com/vlki/openfisca-czechia/blob/main/CHANGELOG.md
Author-email: Jan Vlcek <jan.vlcek@vlki.cz>
License-Expression: AGPL-3.0-only
License-File: LICENSE
Keywords: benefit,czechia,microsimulation,rac,rules-as-code,tax
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Requires-Python: >=3.9
Requires-Dist: numpy<2.5.0,>=1.26.0
Requires-Dist: openfisca-core[web-api]<45,>=44.0.0
Description-Content-Type: text/markdown

# OpenFisca-Czechia

[![PyPi](https://img.shields.io/pypi/v/openfisca-czechia.svg?style=flat)](https://pypi.python.org/pypi/openfisca-czechia)

## [EN] Introduction

OpenFisca is a versatile simulation and microsimulation free software. This repository contains the OpenFisca model of the Czech tax and benefit system. Therefore, the working language here is Czech. You can however check the [general OpenFisca documentation](https://openfisca.org/doc/) in English.

## [CS] Introduction

OpenFisca je svobodný software pro simulace a mikrosimulace. Tento repozitář obsahuje OpenFisca model českého daňového a dávkového systému. Dále najdete instrukce k použití modelu, doporučujeme ale nejdřív projít [obecnou dokumentaci k OpenFisca](https://openfisca.org/doc/).

## Co model obsahuje

Model aktuálně obsahuje:

* výpočet DSSP (dávky státní sociální pomoci) podle legislativy platné k červenci 2026 (bez majetkového testu)
* výpočet daně z příjmu fyzických osob

Soubory modelu najdete ve složce `openfisca_czechia`.

* Parametry použité v modelu jsou v podsložce `parameters`
* Vstupy a výpočty jsou v podsložce `variables`
* Testy pro výpočty najdete v podsložce `tests`

## Plán dalšího vývoje

- [ ] Slevy DPFO
- [ ] Zdravotní a sociální odvody z pracovního příjmu
- [ ] Exekuční a insolvenční srážky
- [ ] Změny DSSP s plánovanou platností k 1. říjnu 2026 (normativy podle okresů)
- [ ] Majetkový test DSSP
- [ ] Příjmy z podnikání (OSVČ)

## Použití jako balíček v Python skriptech

Doporučujeme použít nástroj [uv](https://docs.astral.sh/uv/) pro správu verzí Pythonu a virtuálního prostředí.

Pokud nemáte připravený projekt pomocí uv, pak v nové složce nejdříve spusťte následující příkaz, který i nainstaluje vhodnou verzi Pythonu. Doporučená verze je 3.13, nejnižší podporovaná je 3.9.

```sh
uv init --python 3.13
```

Následně přidejte do projektu balíček `openfisca-czechia`.

```sh
uv add openfisca-czechia
```

A pak použijte balíček například pomocí následujícího kódu ([dokumentace k Python API](https://openfisca.org/doc/simulate/run-simulation.html)):

```python
from openfisca_core.simulation_builder import SimulationBuilder
from openfisca_czechia import CountryTaxBenefitSystem

TEST_CASE = {
    "osoby": {
        "dospely1": {
            "cisty_prijem_osoby": {"2026-01": 8000},
            "dssp_je_osoba_pracovne_aktivni": {"2026-01": True},
            "dssp_je_osoba_zranitelna": {"2026-01": True},
        },
        "dite1": {
            "vek": {"2026-01": 2},
            "je_nezaopatrene_dite": {"2026-01": True},
            "dssp_je_osoba_zranitelna": {"2026-01": True},
        },
    },
    "domacnosti": {
        "domacnost1": {
            "clenove": ["dospely1", "dite1"],
            "typ_bydleni": {"2026-01": "byt_nebo_rodinny_dum"},
            "vztah_k_nemovitosti": {"2026-01": "najemni_podnajemni"},
            "dssp_velikost_obce_bydliste": {"2026-01": "praha_a_brno"},
            "naklady_na_najemne": {"2026-01": 12000},
            "dalsi_poplatky_spojene_s_bydlenim": {"2026-01": 2000},
            "naklady_na_energie": {"2026-01": 5000},
        }
    },
}


def main():
    tax_benefit_system = CountryTaxBenefitSystem()

    simulation_builder = SimulationBuilder()
    simulation = simulation_builder.build_from_entities(tax_benefit_system, TEST_CASE)

    dssp = simulation.calculate("dssp", "2026-01")

    slozka_na_bydleni = simulation.get_array("dssp_slozka_na_bydleni", "2026-01")
    slozka_na_zivobyti = simulation.get_array("dssp_slozka_na_zivobyti", "2026-01")
    bonus_na_dite = simulation.get_array("dssp_bonus_na_dite", "2026-01")
    pracovni_bonus = simulation.get_array("dssp_pracovni_bonus", "2026-01")

    print(f"DSSP: {dssp}")
    print(f"- slozka na bydleni: {slozka_na_bydleni}")
    print(f"- slozka na zivobyti: {slozka_na_zivobyti}")
    print(f"- bonus na dite: {bonus_na_dite}")
    print(f"- pracovni bonus: {pracovni_bonus}")


if __name__ == "__main__":
    main()
```

Pokud je kód v souboru `main.py`, pak ho spustíte následujícím způsobem:

```sh
uv run main.py
```

## Použití přes webové API

Balíček jde spustit jako webový server například pomocí [uv](https://docs.astral.sh/uv/) následujícím způsobem:

```sh
uv run --python 3.13 --with openfisca-core --with openfisca-czechia openfisca serve
```

To spustí webový server na lokálním portu 5000, tj. http://localhost:5000.

Pak jde spustit simulaci před webové API ([dokumentace k webovému API](https://openfisca.org/doc/openfisca-web-api/index.html)) například pomocí Node.js:

```js
const input = {
  osoby: {
    dospely1: {
      cisty_prijem_osoby: { "2026-01": 8000 },
      dssp_je_osoba_pracovne_aktivni: { "2026-01": true },
      dssp_je_osoba_zranitelna: { "2026-01": true },
    },
    dite1: {
      vek: { "2026-01": 2 },
      je_nezaopatrene_dite: { "2026-01": true },
      dssp_je_osoba_zranitelna: { "2026-01": true },
    },
  },
  domacnosti: {
    domacnost1: {
      clenove: ["dospely1", "dite1"],
      typ_bydleni: { "2026-01": "byt_nebo_rodinny_dum" },
      vztah_k_nemovitosti: { "2026-01": "najemni_podnajemni" },
      dssp_velikost_obce_bydliste: { "2026-01": "praha_a_brno" },
      naklady_na_najemne: { "2026-01": 12000 },
      dalsi_poplatky_spojene_s_bydlenim: { "2026-01": 2000 },
      naklady_na_energie: { "2026-01": 5000 },

      // Proměnné, které pošleme s null se dopočítají
      dssp: { "2026-01": null },
      dssp_slozka_na_bydleni: { "2026-01": null },
      dssp_slozka_na_zivobyti: { "2026-01": null },
      dssp_bonus_na_dite: { "2026-01": null },
      dssp_pracovni_bonus: { "2026-01": null },
    },
  },
};

fetch("http://localhost:5000/calculate", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify(input),
})
  .then((response) => response.json())
  .then((output) => {
    const domacnost1 = output.domacnosti.domacnost1;

    console.log("Výše DSSP pro zadanou domácnost:", {
      dssp: domacnost1.dssp,
      slozka_na_bydleni: domacnost1.dssp_slozka_na_bydleni,
      slozka_na_zivobyti: domacnost1.dssp_slozka_na_zivobyti,
      bonus_na_dite: domacnost1.dssp_bonus_na_dite,
      pracovni_bonus: domacnost1.dssp_pracovni_bonus,
    });
  });
```

## Licence

Kód je dostupný pod [licencí AGPLv3](LICENSE)
