Architektonické rozhodnutí — všechny enumerace a číselníky jako DB referenční tabulky
gavel
Proč referenční tabulky?
ISPV (Informační systém o průměrném výdělku) je povinné statistické šetření ze zákona (zákon č. 89/1995 Sb.).
Kódy vzdělání, klasifikace zaměstnání CZ-ISCO, okresy pracoviště LAU1 a statusy zaměstnání CZ-ICSE musí být udržované a aktualizovatelné
bez deploymentu aplikace. Proto žádné hardcoded TypeScript enumy — vše v PostgreSQL jako ref_* tabulky
s FK constrainty, timestampy a is_active flagem pro soft-deprecation.
Společná struktura každé ref_* tabulky
CREATE TABLE ref_<name> (
code varchar(...) PRIMARY KEY, -- hodnota v hlavních tabulkách
label_cs text NOT NULL, -- český název
label_en text, -- anglický název
pamica_value varchar(100), -- XSD hodnota (pokud se liší)
sort_order integer NOT NULL DEFAULT 0,
is_active boolean NOT NULL DEFAULT true, -- false = zrušeno
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now() -- auto-trigger
);
key code jako PK
Hlavní tabulky ukládají přímo kód (varchar). Žádné zbytečné JOINy pro zobrazení — JOIN jen pro label.
link FK constrainty
ON UPDATE CASCADE ON DELETE RESTRICT — kód nelze smazat, pokud ho používá záznam. Pouze deaktivovat.
visibility_off is_active flag
Zrušené hodnoty (pojišťovny 217, 222...) se nezobrazují ve formulářích, ale historické záznamy zůstávají validní.
monitoring
Celkový přehled
Souhrn číselníkové architektury v číslech
25
Referenčních tabulek (24 + 1 cache)
16 672
Seedovaných záznamů celkem
30+
FK constraintů z hlavních tabulek
0
Hardcoded TypeScript enumů
category
Tři kategorie číselníků
Podle zdroje dat a mechanismu údržby
A XSD enumeracez Pamica empType.xsd
16 tabulek
~144 záznamů | Aktualizace: při nové verzi XSD
ref_sex3
ref_marital_status6
ref_education_level14
ref_health_insurance_company13
ref_employment_kind~25
ref_pension6
ref_tax_premium_type~40
ref_schedule_type7
ref_product_type7
ref_wage_type4
ref_payment_method2
ref_deduction_kind4
ref_identity_document_type4
ref_tax_identification_type4
ref_insurance_holder_spec3
ref_wage_kind2
B Excel číselníkyz Pamica + ČSÚ
5 tabulek
~10 048 záznamů | Aktualizace: ročně (ČSÚ)
ref_isco7 966
ref_country~250
ref_nace1 741
ref_district78
ref_employment_status13
CZ-ISCO autocomplete: GIN trigram index + search_isco() RPC funkce pro fuzzy vyhledávání v 7 966 záznamech.
C Obory vzděláníAPI obory-vzdelani.cz
3 + cache
~6 480 záznamů | Aktualizace: TTL 30 dní (API)
ref_municipality6 402
ref_education_field66
ref_study_type12
ref_education_cache1/rok
Kaskádní výběr: Místo studia → Rok → Typ školy → Obec → Škola → Obor → kód BASO
A
XSD enumerace — 16 tabulek
Zdrojová data z Pamica empType.xsd | Seedováno při deploymentu | Aktualizace při nové verzi XSD
#
Tabulka
Záznamů
PK typ
FK z hlavní tabulky
Extra sloupce
1
ref_sex
3
varchar(10)
employees.sex
—
2
ref_marital_status
6
varchar(20)
employees.marital_status
—
3
ref_education_level
14
varchar(2)
employees.ispv_education
ISPV povinné
4
ref_health_insurance_company
13
integer
employee_health_insurances.insurance_company
abbreviation, cancelled_date
5
ref_employment_kind
~25
varchar(5)
employments.kind
category (PP/DPC/DPP)
6
ref_pension
6
varchar(2)
employees.ossz_pension
—
7
ref_deduction_kind
4
varchar(15)
employee_wage_deductions.deduction_kind
—
8
ref_identity_document_type
4
varchar(20)
employees.fg_identity_doc_type
—
9
ref_tax_identification_type
4
varchar(30)
employees.fg_ins_tax_id_type
—
10
ref_insurance_holder_spec
3
varchar(10)
employees.fg_ce_insurance_holder
—
11
ref_wage_kind
2
varchar(12)
employment_wage_elements.kind
—
12
ref_schedule_type
7
varchar(35)
employments.schedule_type
—
13
ref_product_type
7
varchar(30)
employee_life_insurances.product
—
14
ref_tax_premium_type
~40
varchar(60)
employee_tax_items.type
category (discount/benefit/…)
15
ref_wage_type
4
varchar(20)
employments.type
—
16
ref_payment_method
2
varchar(10)
employees.supplement_payment_method
—
B
Externí číselníky z Excelu — 5 tabulek
Zdrojová data z Pamica Excel exportů a ČSÚ | Seedováno při deploymentu | Aktualizace ročně nebo při změně
#
Tabulka
Záznamů
Zdrojový soubor
FK z hlavní tabulky
Extra sloupce
17
ref_isco
7 966
Podklady/pamBB4F.xlsx
employments.ispv_isco_class
level, parent_code, search_vector + GIN trigram
18
ref_country
~250
Podklady/pam653C.xlsx
9 FK (citizenship, fg_*, addresses)
alpha_3, numeric_code, is_eu
19
ref_district
78
Podklady/pam898D.xlsx
employments.ispv_work_place
region_code, region_name
20
ref_nace
1 741
Podklady/pam93B4.xlsx
organizations (budoucí)
level, parent_code, section, search_vector
21
ref_employment_status
13
Podklady/pamBA24.xlsx
employments.ispv_employment_status
—
info
CZ-ISCO autocomplete (7 966 záznamů)
Uživatel píše „účetní" do vyhledávacího pole — systém nabídne odpovídající povolání díky GIN trigram indexu (pg_trgm)
a RPC funkci search_isco(query, max_results). Odezva pod 100 ms bez aplikačního cachování.
C
Obory vzdělání — 3 tabulky + cache
Zdrojová data z API obory-vzdelani.cz + lokální JSON cache | Dynamická data s TTL 30 dní
#
Tabulka
Záznamů
Zdrojový soubor / API
Účel
22
ref_education_field
66
data/obory-vzdelani/seznam-oboru-baso.json
BASO kategorie oborů
23
ref_study_type
12
data/obory-vzdelani/inicializacni-data.json
Typy studia (SSB, SSS, VOS, VS…)
24
ref_municipality
6 402
data/obory-vzdelani/seznam-obci.json
Obce ČR pro kaskádní výběr
—
ref_education_cache
1/rok
schools-and-fields.json (JSONB)
Cache kaskádních dat, TTL 30 dní
account_tree Kaskádní výběr oboru vzdělání
Místo studia ČR / Zahraničíarrow_forwardRok ukončení 1945–2026arrow_forwardTyp školy 12 typůarrow_forwardObec 6 402 obcíarrow_forwardŠkola dynamickyarrow_forwardObor → kód BASO
share
FK mapa — hlavní tabulky → ref_* tabulky
30+ foreign key constraintů propojujících datové tabulky s referenčními číselníky
Jak často a jakým mechanismem se jednotlivé číselníky aktualizují
Číselník
Frekvence
Mechanismus
Kdo zodpovídá
Poznámka
XSD enumerace (16 tabulek)
Při nové verzi Pamica
Admin UI nebo migrace
Platform admin
Pamica XSD se mění velmi zřídka (1× za roky)
ref_isco
Ročně
Admin import (Excel)
Platform admin
Aktualizace ČSÚ klasifikace zaměstnání
ref_country
Vzácně
Admin import
Platform admin
Změna ISO 3166-1 (nový stát, přejmenování)
ref_district
Vzácně
Admin import
Platform admin
Změna LAU1 kódů (reorganizace okresů)
ref_nace
Ročně
Admin import (Excel)
Platform admin
Aktualizace ČSÚ ekonomických činností
ref_employment_status
Při změně ČSÚ
Admin import
Platform admin
CZ-ICSE kódy (13 hodnot)
Obory vzdělání (3 tabulky)
TTL 30 dní
Background job (API)
Automaticky
API obory-vzdelani.cz, JSON fallback
ref_health_insurance_company
Legislativní změna
Admin UI (is_active flag)
Platform admin
Zrušení/založení pojišťovny — jen přepnutí flagu
tips_and_updates
Jak aktualizovat číselník?
1. Malá změna (přidání/deaktivace hodnoty): Admin UI — INSERT nový záznam nebo UPDATE is_active = false.
2. Větší aktualizace (nová verze CZ-ISCO od ČSÚ): Platform admin importuje nový Excel — Python skript převede na SQL, aplikuje se migrace.
3. Automatická obnova (obory vzdělání): Background edge function kontroluje TTL cache a stahuje nová data z API.
security
Bezpečnost a compliance
Legislativní požadavky, ochrana dat, přístupová práva a audit
gavel
ISPV je povinné ze zákona — zákon č. 89/1995 Sb. o státní statistické službě. Zaměstnavatelé s 10+ zaměstnanci musí vykazovat
data o průměrném výdělku včetně kódů vzdělání, CZ-ISCO klasifikace, LAU1 pracoviště a CZ-ICSE statusu. Nesprávné nebo chybějící kódy
= nesplnění zákonné povinnosti.
verified_user
GDPR — žádná osobní data
Referenční tabulky (ref_*) obsahují pouze kódy a labely (např. „A = Bez vzdělání", „CZ = Česká republika").
Žádné osobní údaje zaměstnanců — žádné zvláštní GDPR opatření pro tyto tabulky.
admin_panel_settings
Přístupová práva (RLS)
Čtení: všichni autentizovaní uživatelé (formuláře potřebují číselníky). Zápis: pouze platform admin (is_platform_admin = true).
Žádný tenant nemůže modifikovat globální číselníky.
history
Audit log
Každá změna v ref_* tabulkách je logována v audit_logs
(kdo, kdy, stará/nová hodnota). Zpětná dohledatelnost pro kontroly.
block
FK RESTRICT — ochrana integrity
ON DELETE RESTRICT — pokud je kód používán záznamem zaměstnance, nelze ho smazat z číselníku.
Pouze deaktivovat (is_active = false).
visibility_off
Soft-delete (is_active)
Zrušené pojišťovny (217, 222, 227, 228) mají is_active = false.
Ve formulářích se nezobrazují, ale historické záznamy zaměstnanců zůstávají validní.
schedule
Timestampy
Každá tabulka: created_at + updated_at (auto-trigger).
Lze kdykoliv zjistit, kdy byl číselník naposledy aktualizován a zda je aktuální.