sysnet-persons-model 1.2.7__tar.gz → 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. sysnet_persons_model-1.3.0/PKG-INFO +51 -0
  2. sysnet_persons_model-1.3.0/README.md +31 -0
  3. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/individual.py +2 -1
  4. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/person_entity.py +2 -1
  5. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/pyproject.toml +1 -1
  6. sysnet_persons_model-1.3.0/sysnet_persons_model.egg-info/PKG-INFO +51 -0
  7. sysnet_persons_model-1.2.7/PKG-INFO +0 -188
  8. sysnet_persons_model-1.2.7/README.md +0 -168
  9. sysnet_persons_model-1.2.7/sysnet_persons_model.egg-info/PKG-INFO +0 -188
  10. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/LICENSE +0 -0
  11. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/__init__.py +0 -0
  12. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/common.py +0 -0
  13. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/config.py +0 -0
  14. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/context.py +0 -0
  15. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/country.py +0 -0
  16. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/legal_form.py +0 -0
  17. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/role.py +0 -0
  18. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/persons_model/tag.py +0 -0
  19. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/requirements.txt +0 -0
  20. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/setup.cfg +0 -0
  21. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/sysnet_persons_model.egg-info/SOURCES.txt +0 -0
  22. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/sysnet_persons_model.egg-info/dependency_links.txt +0 -0
  23. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/sysnet_persons_model.egg-info/requires.txt +0 -0
  24. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/sysnet_persons_model.egg-info/top_level.txt +0 -0
  25. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_common.py +0 -0
  26. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_config.py +0 -0
  27. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_context.py +0 -0
  28. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_country.py +0 -0
  29. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_individual.py +0 -0
  30. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_legal_form.py +0 -0
  31. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_person_entity.py +0 -0
  32. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_role.py +0 -0
  33. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_scope.py +0 -0
  34. {sysnet_persons_model-1.2.7 → sysnet_persons_model-1.3.0}/tests/test_tag.py +0 -0
@@ -0,0 +1,51 @@
1
+ Metadata-Version: 2.4
2
+ Name: sysnet-persons-model
3
+ Version: 1.3.0
4
+ Summary: SYSNET Persons Data Model
5
+ Author-email: Data Developer <info@sysnet.cz>
6
+ License-Expression: LicenseRef-SYSNET-FreeForHomeUse
7
+ Project-URL: Homepage, https://github.com/SYSNET-CZ/models/tree/main/persons
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Natural Language :: Czech
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Topic :: Software Development :: Libraries
14
+ Requires-Python: >=3.10
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: sysnet-pyutils>=1.7.0
18
+ Requires-Dist: pydantic[email]>=2.11.4
19
+ Dynamic: license-file
20
+
21
+ # sysnet-persons-model
22
+
23
+ Data model pro entity a osoby v ekosystému SYSNET. Postaveno na Pydantic v2.
24
+
25
+ ## Instalace
26
+
27
+ ```bash
28
+ pip install sysnet-persons-model
29
+ ```
30
+
31
+ ## Hlavní vlastnosti
32
+ - Podpora pro fyzické osoby (`IndividualType`) i právnické subjekty (`PersonEntityType`).
33
+ - Integrace s číselníky RPP (právní formy).
34
+ - Standardizovaná metadata životního cyklu (vytvoření, modifikace, smazání).
35
+ - **Opaque extension slot** (`agenda`) pro agendově specifická data.
36
+
37
+ ## Verze
38
+ - **1.3.0**: Přidání atributu `agenda` (opaque extension slot) do `IndividualBaseType` a `PersonEntityBaseType`. Viz [AGENDA_GUIDE.md](docs/AGENDA_GUIDE.md).
39
+ - **1.2.8**: Interní verze, přidání atributu `agenda` (špatná cesta k docs).
40
+ - **1.2.7**: Přidání aliasu `metadata` pro pole `document` (Redmine #9850).
41
+ - **1.2.5**: Přidání `ScopeType` pro definici rozsahu působnosti subjektu.
42
+ - **1.1.2**: Původní stabilní verze s podporou Pydantic v2.
43
+
44
+ ## Použití atributu agenda
45
+ Atribut `agenda` slouží pro data specifická pro konkrétní aplikace (HNVO, IPPC, CITES), která nepatří do společného jádra.
46
+
47
+ ```python
48
+ # Příklad čtení dat pro agendu HNVO
49
+ hnvo_data = person.agenda.get("hnvo", {})
50
+ ```
51
+ Podrobnosti naleznete v [dokumentaci k agendám](docs/AGENDA_GUIDE.md).
@@ -0,0 +1,31 @@
1
+ # sysnet-persons-model
2
+
3
+ Data model pro entity a osoby v ekosystému SYSNET. Postaveno na Pydantic v2.
4
+
5
+ ## Instalace
6
+
7
+ ```bash
8
+ pip install sysnet-persons-model
9
+ ```
10
+
11
+ ## Hlavní vlastnosti
12
+ - Podpora pro fyzické osoby (`IndividualType`) i právnické subjekty (`PersonEntityType`).
13
+ - Integrace s číselníky RPP (právní formy).
14
+ - Standardizovaná metadata životního cyklu (vytvoření, modifikace, smazání).
15
+ - **Opaque extension slot** (`agenda`) pro agendově specifická data.
16
+
17
+ ## Verze
18
+ - **1.3.0**: Přidání atributu `agenda` (opaque extension slot) do `IndividualBaseType` a `PersonEntityBaseType`. Viz [AGENDA_GUIDE.md](docs/AGENDA_GUIDE.md).
19
+ - **1.2.8**: Interní verze, přidání atributu `agenda` (špatná cesta k docs).
20
+ - **1.2.7**: Přidání aliasu `metadata` pro pole `document` (Redmine #9850).
21
+ - **1.2.5**: Přidání `ScopeType` pro definici rozsahu působnosti subjektu.
22
+ - **1.1.2**: Původní stabilní verze s podporou Pydantic v2.
23
+
24
+ ## Použití atributu agenda
25
+ Atribut `agenda` slouží pro data specifická pro konkrétní aplikace (HNVO, IPPC, CITES), která nepatří do společného jádra.
26
+
27
+ ```python
28
+ # Příklad čtení dat pro agendu HNVO
29
+ hnvo_data = person.agenda.get("hnvo", {})
30
+ ```
31
+ Podrobnosti naleznete v [dokumentaci k agendám](docs/AGENDA_GUIDE.md).
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from datetime import datetime
4
- from typing import List, Optional
4
+ from typing import Any, List, Optional
5
5
 
6
6
  from pydantic import BaseModel, Field, SecretStr, StrictBool, AliasChoices
7
7
  from sysnet_pyutils.models.general import LocationType, ListTypeBase, MetadataEssentialType
@@ -26,6 +26,7 @@ class IndividualBaseType(BaseModel):
26
26
  birthdate: Optional[datetime] = Field(default=None, description="Datum narození")
27
27
  gdpr: Optional[StrictBool] = Field(default=True, description="Udělen souhlas se zpracováním dat GDPR")
28
28
  note: Optional[str] = Field(default=None, description='Libovolná poznámka')
29
+ agenda: Optional[dict[str, dict[str, Any]]] = Field(default=None, description='Agendově specifická data. Klíč = kód agendy (hnvo, ippc, cites). Hodnota = libovolný objekt parsovaný konzumentem.')
29
30
 
30
31
 
31
32
  class IndividualEntryType(BaseModel):
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from datetime import datetime
4
- from typing import TYPE_CHECKING, List, Optional, Union
4
+ from typing import TYPE_CHECKING, Any, List, Optional, Union
5
5
 
6
6
  from pydantic import BaseModel, Field, StrictBool, AliasChoices
7
7
  from sysnet_pyutils.models.general import LocationType, PersonTypeEnum, ListTypeBase, MetadataEssentialType
@@ -64,6 +64,7 @@ class PersonEntityBaseType(BaseModel):
64
64
  note: Optional[str] = Field(default=None, description="Poznámka")
65
65
  issuing: Optional[List[Optional[IssuingType]]] = Field(default=None, description="Osoba je autoritou vydávající nějaké dokumenty")
66
66
  scope: Optional[ScopeType] = Field(default=None, description="Rozsah působnosti subjektu")
67
+ agenda: Optional[dict[str, dict[str, Any]]] = Field(default=None, description="Agendově specifická data. Klíč = kód agendy (hnvo, ippc, cites). Hodnota = libovolný objekt parsovaný konzumentem.")
67
68
 
68
69
  def set_legal_form(self, code: Union[LegalFormEnum, str]) -> "PersonEntityBaseType":
69
70
  """Nastaví atribut legal_form podle kódu právní formy.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sysnet-persons-model"
7
- version = "1.2.7"
7
+ version = "1.3.0"
8
8
  authors = [
9
9
  { name="Data Developer", email="info@sysnet.cz" },
10
10
  ]
@@ -0,0 +1,51 @@
1
+ Metadata-Version: 2.4
2
+ Name: sysnet-persons-model
3
+ Version: 1.3.0
4
+ Summary: SYSNET Persons Data Model
5
+ Author-email: Data Developer <info@sysnet.cz>
6
+ License-Expression: LicenseRef-SYSNET-FreeForHomeUse
7
+ Project-URL: Homepage, https://github.com/SYSNET-CZ/models/tree/main/persons
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Natural Language :: Czech
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Topic :: Software Development :: Libraries
14
+ Requires-Python: >=3.10
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: sysnet-pyutils>=1.7.0
18
+ Requires-Dist: pydantic[email]>=2.11.4
19
+ Dynamic: license-file
20
+
21
+ # sysnet-persons-model
22
+
23
+ Data model pro entity a osoby v ekosystému SYSNET. Postaveno na Pydantic v2.
24
+
25
+ ## Instalace
26
+
27
+ ```bash
28
+ pip install sysnet-persons-model
29
+ ```
30
+
31
+ ## Hlavní vlastnosti
32
+ - Podpora pro fyzické osoby (`IndividualType`) i právnické subjekty (`PersonEntityType`).
33
+ - Integrace s číselníky RPP (právní formy).
34
+ - Standardizovaná metadata životního cyklu (vytvoření, modifikace, smazání).
35
+ - **Opaque extension slot** (`agenda`) pro agendově specifická data.
36
+
37
+ ## Verze
38
+ - **1.3.0**: Přidání atributu `agenda` (opaque extension slot) do `IndividualBaseType` a `PersonEntityBaseType`. Viz [AGENDA_GUIDE.md](docs/AGENDA_GUIDE.md).
39
+ - **1.2.8**: Interní verze, přidání atributu `agenda` (špatná cesta k docs).
40
+ - **1.2.7**: Přidání aliasu `metadata` pro pole `document` (Redmine #9850).
41
+ - **1.2.5**: Přidání `ScopeType` pro definici rozsahu působnosti subjektu.
42
+ - **1.1.2**: Původní stabilní verze s podporou Pydantic v2.
43
+
44
+ ## Použití atributu agenda
45
+ Atribut `agenda` slouží pro data specifická pro konkrétní aplikace (HNVO, IPPC, CITES), která nepatří do společného jádra.
46
+
47
+ ```python
48
+ # Příklad čtení dat pro agendu HNVO
49
+ hnvo_data = person.agenda.get("hnvo", {})
50
+ ```
51
+ Podrobnosti naleznete v [dokumentaci k agendám](docs/AGENDA_GUIDE.md).
@@ -1,188 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: sysnet-persons-model
3
- Version: 1.2.7
4
- Summary: SYSNET Persons Data Model
5
- Author-email: Data Developer <info@sysnet.cz>
6
- License-Expression: LicenseRef-SYSNET-FreeForHomeUse
7
- Project-URL: Homepage, https://github.com/SYSNET-CZ/models/tree/main/persons
8
- Classifier: Development Status :: 4 - Beta
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Intended Audience :: Developers
11
- Classifier: Natural Language :: Czech
12
- Classifier: Operating System :: OS Independent
13
- Classifier: Topic :: Software Development :: Libraries
14
- Requires-Python: >=3.10
15
- Description-Content-Type: text/markdown
16
- License-File: LICENSE
17
- Requires-Dist: sysnet-pyutils>=1.7.0
18
- Requires-Dist: pydantic[email]>=2.11.4
19
- Dynamic: license-file
20
-
21
- # sysnet-persons-model
22
-
23
- **Sdílený datový model Registru osob SYSNET**
24
-
25
- [![Python](https://img.shields.io/badge/python-%E2%89%A53.10-blue)](https://www.python.org/)
26
- [![Pydantic](https://img.shields.io/badge/pydantic-%E2%89%A52.11.4-red)](https://docs.pydantic.dev/)
27
- [![PyPI](https://img.shields.io/badge/PyPI-sysnet--persons--model-orange)](https://pypi.org/project/sysnet-persons-model/)
28
-
29
- Čistá Python knihovna — **bez FastAPI, bez MongoDB**. Slouží jako sdílená datová vrstva
30
- importovaná dalšími službami SYSNET.
31
-
32
- ---
33
-
34
- ## Instalace
35
-
36
- ```bash
37
- pip install sysnet-persons-model
38
- ```
39
-
40
- ---
41
-
42
- ## Rychlý start
43
-
44
- ```python
45
- from persons_model.individual import IndividualType
46
- from persons_model.person_entity import PersonEntityType
47
- from persons_model.role import RoleType
48
- from persons_model.common import RegistryType, MembershipEnum, MemberType
49
- from persons_model.tag import TagType, TagItemType
50
-
51
- # Vytvoření jednotlivce
52
- person = IndividualType(
53
- identifier="550e8400-e29b-41d4-a716-446655440000",
54
- name="Jan Novák",
55
- username="jnovak",
56
- )
57
-
58
- # Přidání tagu
59
- person.tags = TagType()
60
- person.tags.add_tag(TagItemType(tag="aktivni", color="#00FF00"))
61
- ```
62
-
63
- ---
64
-
65
- ## Moduly
66
-
67
- ### `common` — Společné typy
68
-
69
- | Třída / Enum | Popis |
70
- |---|---|
71
- | `RegistryEnum` | Identifikační registry (`CRZP`, `EMPTY`) |
72
- | `RegistryType` | Reference na identifikační údaje (uuid, uri, other) |
73
- | `MembershipEnum` | Typ členství: admin, representative, employee, department, general, other |
74
- | `MemberType` | Členský záznam |
75
- | `ContactType` | Kontaktní údaje osoby |
76
- | `RedundantType` | Redundantní záznam (name, code, location, note) |
77
- | `DepartmentType` | Útvar organizace (rozšiřuje `RedundantType` o `parent`) |
78
- | `IssuingType` | Údaje pro vydávání dokladů |
79
- | `ScopeType` | Definice rozsahu působnosti (Global, Regional, Local) |
80
-
81
- ### `individual` — Jednotlivci (uživatelé)
82
-
83
- | Třída | Popis |
84
- |---|---|
85
- | `IndividualBaseType` | Základní atributy: jméno, username, DN, heslo, kontakty, adresy, GDPR |
86
- | `IndividualEntryType` | Zkrácená položka pro seznam |
87
- | `IndividualType` | Plný záznam osoby (rozšiřuje Base o identifier, pid, registry, tags, document) |
88
- | `IndividualListType` | Stránkovaný seznam osob |
89
-
90
- ### `person_entity` — Subjekty
91
-
92
- | Třída | Popis |
93
- |---|---|
94
- | `PersonEntityLinkType` | Odkaz na navázaný subjekt |
95
- | `PersonEntityEntryType` | Položka subjektu v kontextu |
96
- | `PersonEntityBaseType` | Základní atributy subjektu (včetně `scope`) |
97
- | `PersonEntityType` | Plný záznam (fyzická / právnická osoba) |
98
- | `PersonEntityListType` | Stránkovaný seznam subjektů |
99
-
100
- ### `role` — Role
101
-
102
- | Třída / Enum | Popis |
103
- |---|---|
104
- | `RoleCategoryEnum` | `individual`, `personal`, `security`, `other` |
105
- | `RoleCategoryType` | Boolean příznaky kategorií |
106
- | `RoleBaseType` | Základ role (code, name, categories, note) |
107
- | `RoleEntryType` | Položka seznamu rolí (rozšiřuje Base o identifier) |
108
- | `RoleType` | Plná role s holders, admins, tags, document |
109
- | `RoleListType` | Stránkovaný seznam rolí |
110
-
111
- ### `context` — Uživatelský kontext
112
-
113
- | Třída | Popis |
114
- |---|---|
115
- | `ContextRolesType` | Role uživatele/subjektu (admin, holder) |
116
- | `ContextPersonsType` | Subjekty uživatele (admin, contact, member, representative) |
117
- | `ContextIndividualType` | Kompletní kontext konkrétního uživatele |
118
-
119
- ### `tag` — Tagy
120
-
121
- | Třída | Popis |
122
- |---|---|
123
- | `TagItemType` | Jedna značka (tag, color) |
124
- | `TagType` | Seznam tagů s metodami `has_tag`, `add_tag`, `remove_tag` |
125
- | `TagListType` | Stránkovaný seznam tagů |
126
-
127
- ### `country` — Země (ISO 3166-1)
128
-
129
- | Třída | Popis |
130
- |---|---|
131
- | `CountryType` | Stát: kódy n3/a2/a3, název česky a anglicky |
132
- | `CountryListType` | Stránkovaný seznam zemí |
133
- | `CountryMapType` | Seznam ve formátu code/value |
134
-
135
- ### `config` — Konfigurace
136
-
137
- | Třída | Popis |
138
- |---|---|
139
- | `ConfigType` | Minimální konfigurace (`cache: Optional[StrictBool]`) |
140
-
141
- ---
142
-
143
- ## Vývoj
144
-
145
- Viz [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md) pro podrobnou vývojovou příručku.
146
-
147
- ```powershell
148
- # Klonování a nastavení prostředí
149
- cd D:\development\git\models\persons
150
- .venv\Scripts\python.exe -m pip install -e .
151
-
152
- # Spuštění testů
153
- .venv\Scripts\python.exe -m pytest
154
-
155
- # Spuštění testů s pokrytím
156
- .venv\Scripts\python.exe -m pytest --cov=persons_model --cov-report=term-missing
157
- ```
158
-
159
- ---
160
-
161
- ## Technický stack
162
-
163
- | Vrstva | Technologie | Verze |
164
- |---|---|---|
165
- | Datové modely | Pydantic v2 | ≥ 2.11.4 |
166
- | Utility | sysnet-pyutils | ≥ 1.7.0 |
167
- | Python | CPython | ≥ 3.10 |
168
- | Testy | pytest + pytest-cov | 9.x / 7.x |
169
-
170
- ---
171
-
172
- ## Architektura
173
-
174
- Viz [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md).
175
-
176
- Všechny modely dodržují konzistentní vzor:
177
- 1. `BaseType` — základní atributy bez identifikátoru
178
- 2. `EntryType` — zkrácená položka pro seznamy
179
- 3. plný `Type` — rozšiřuje Base o `identifier`, `pid`, `registry`, `tags`, `document`
180
- 4. `ListType` — obálka pro stránkované výsledky (`hits`, `entries`)
181
-
182
- ---
183
-
184
- ## Verze
185
-
186
- Aktuální verze: **1.2.0**
187
-
188
- Repozitář: https://github.com/SYSNET-CZ/models/tree/main/persons
@@ -1,168 +0,0 @@
1
- # sysnet-persons-model
2
-
3
- **Sdílený datový model Registru osob SYSNET**
4
-
5
- [![Python](https://img.shields.io/badge/python-%E2%89%A53.10-blue)](https://www.python.org/)
6
- [![Pydantic](https://img.shields.io/badge/pydantic-%E2%89%A52.11.4-red)](https://docs.pydantic.dev/)
7
- [![PyPI](https://img.shields.io/badge/PyPI-sysnet--persons--model-orange)](https://pypi.org/project/sysnet-persons-model/)
8
-
9
- Čistá Python knihovna — **bez FastAPI, bez MongoDB**. Slouží jako sdílená datová vrstva
10
- importovaná dalšími službami SYSNET.
11
-
12
- ---
13
-
14
- ## Instalace
15
-
16
- ```bash
17
- pip install sysnet-persons-model
18
- ```
19
-
20
- ---
21
-
22
- ## Rychlý start
23
-
24
- ```python
25
- from persons_model.individual import IndividualType
26
- from persons_model.person_entity import PersonEntityType
27
- from persons_model.role import RoleType
28
- from persons_model.common import RegistryType, MembershipEnum, MemberType
29
- from persons_model.tag import TagType, TagItemType
30
-
31
- # Vytvoření jednotlivce
32
- person = IndividualType(
33
- identifier="550e8400-e29b-41d4-a716-446655440000",
34
- name="Jan Novák",
35
- username="jnovak",
36
- )
37
-
38
- # Přidání tagu
39
- person.tags = TagType()
40
- person.tags.add_tag(TagItemType(tag="aktivni", color="#00FF00"))
41
- ```
42
-
43
- ---
44
-
45
- ## Moduly
46
-
47
- ### `common` — Společné typy
48
-
49
- | Třída / Enum | Popis |
50
- |---|---|
51
- | `RegistryEnum` | Identifikační registry (`CRZP`, `EMPTY`) |
52
- | `RegistryType` | Reference na identifikační údaje (uuid, uri, other) |
53
- | `MembershipEnum` | Typ členství: admin, representative, employee, department, general, other |
54
- | `MemberType` | Členský záznam |
55
- | `ContactType` | Kontaktní údaje osoby |
56
- | `RedundantType` | Redundantní záznam (name, code, location, note) |
57
- | `DepartmentType` | Útvar organizace (rozšiřuje `RedundantType` o `parent`) |
58
- | `IssuingType` | Údaje pro vydávání dokladů |
59
- | `ScopeType` | Definice rozsahu působnosti (Global, Regional, Local) |
60
-
61
- ### `individual` — Jednotlivci (uživatelé)
62
-
63
- | Třída | Popis |
64
- |---|---|
65
- | `IndividualBaseType` | Základní atributy: jméno, username, DN, heslo, kontakty, adresy, GDPR |
66
- | `IndividualEntryType` | Zkrácená položka pro seznam |
67
- | `IndividualType` | Plný záznam osoby (rozšiřuje Base o identifier, pid, registry, tags, document) |
68
- | `IndividualListType` | Stránkovaný seznam osob |
69
-
70
- ### `person_entity` — Subjekty
71
-
72
- | Třída | Popis |
73
- |---|---|
74
- | `PersonEntityLinkType` | Odkaz na navázaný subjekt |
75
- | `PersonEntityEntryType` | Položka subjektu v kontextu |
76
- | `PersonEntityBaseType` | Základní atributy subjektu (včetně `scope`) |
77
- | `PersonEntityType` | Plný záznam (fyzická / právnická osoba) |
78
- | `PersonEntityListType` | Stránkovaný seznam subjektů |
79
-
80
- ### `role` — Role
81
-
82
- | Třída / Enum | Popis |
83
- |---|---|
84
- | `RoleCategoryEnum` | `individual`, `personal`, `security`, `other` |
85
- | `RoleCategoryType` | Boolean příznaky kategorií |
86
- | `RoleBaseType` | Základ role (code, name, categories, note) |
87
- | `RoleEntryType` | Položka seznamu rolí (rozšiřuje Base o identifier) |
88
- | `RoleType` | Plná role s holders, admins, tags, document |
89
- | `RoleListType` | Stránkovaný seznam rolí |
90
-
91
- ### `context` — Uživatelský kontext
92
-
93
- | Třída | Popis |
94
- |---|---|
95
- | `ContextRolesType` | Role uživatele/subjektu (admin, holder) |
96
- | `ContextPersonsType` | Subjekty uživatele (admin, contact, member, representative) |
97
- | `ContextIndividualType` | Kompletní kontext konkrétního uživatele |
98
-
99
- ### `tag` — Tagy
100
-
101
- | Třída | Popis |
102
- |---|---|
103
- | `TagItemType` | Jedna značka (tag, color) |
104
- | `TagType` | Seznam tagů s metodami `has_tag`, `add_tag`, `remove_tag` |
105
- | `TagListType` | Stránkovaný seznam tagů |
106
-
107
- ### `country` — Země (ISO 3166-1)
108
-
109
- | Třída | Popis |
110
- |---|---|
111
- | `CountryType` | Stát: kódy n3/a2/a3, název česky a anglicky |
112
- | `CountryListType` | Stránkovaný seznam zemí |
113
- | `CountryMapType` | Seznam ve formátu code/value |
114
-
115
- ### `config` — Konfigurace
116
-
117
- | Třída | Popis |
118
- |---|---|
119
- | `ConfigType` | Minimální konfigurace (`cache: Optional[StrictBool]`) |
120
-
121
- ---
122
-
123
- ## Vývoj
124
-
125
- Viz [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md) pro podrobnou vývojovou příručku.
126
-
127
- ```powershell
128
- # Klonování a nastavení prostředí
129
- cd D:\development\git\models\persons
130
- .venv\Scripts\python.exe -m pip install -e .
131
-
132
- # Spuštění testů
133
- .venv\Scripts\python.exe -m pytest
134
-
135
- # Spuštění testů s pokrytím
136
- .venv\Scripts\python.exe -m pytest --cov=persons_model --cov-report=term-missing
137
- ```
138
-
139
- ---
140
-
141
- ## Technický stack
142
-
143
- | Vrstva | Technologie | Verze |
144
- |---|---|---|
145
- | Datové modely | Pydantic v2 | ≥ 2.11.4 |
146
- | Utility | sysnet-pyutils | ≥ 1.7.0 |
147
- | Python | CPython | ≥ 3.10 |
148
- | Testy | pytest + pytest-cov | 9.x / 7.x |
149
-
150
- ---
151
-
152
- ## Architektura
153
-
154
- Viz [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md).
155
-
156
- Všechny modely dodržují konzistentní vzor:
157
- 1. `BaseType` — základní atributy bez identifikátoru
158
- 2. `EntryType` — zkrácená položka pro seznamy
159
- 3. plný `Type` — rozšiřuje Base o `identifier`, `pid`, `registry`, `tags`, `document`
160
- 4. `ListType` — obálka pro stránkované výsledky (`hits`, `entries`)
161
-
162
- ---
163
-
164
- ## Verze
165
-
166
- Aktuální verze: **1.2.0**
167
-
168
- Repozitář: https://github.com/SYSNET-CZ/models/tree/main/persons
@@ -1,188 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: sysnet-persons-model
3
- Version: 1.2.7
4
- Summary: SYSNET Persons Data Model
5
- Author-email: Data Developer <info@sysnet.cz>
6
- License-Expression: LicenseRef-SYSNET-FreeForHomeUse
7
- Project-URL: Homepage, https://github.com/SYSNET-CZ/models/tree/main/persons
8
- Classifier: Development Status :: 4 - Beta
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Intended Audience :: Developers
11
- Classifier: Natural Language :: Czech
12
- Classifier: Operating System :: OS Independent
13
- Classifier: Topic :: Software Development :: Libraries
14
- Requires-Python: >=3.10
15
- Description-Content-Type: text/markdown
16
- License-File: LICENSE
17
- Requires-Dist: sysnet-pyutils>=1.7.0
18
- Requires-Dist: pydantic[email]>=2.11.4
19
- Dynamic: license-file
20
-
21
- # sysnet-persons-model
22
-
23
- **Sdílený datový model Registru osob SYSNET**
24
-
25
- [![Python](https://img.shields.io/badge/python-%E2%89%A53.10-blue)](https://www.python.org/)
26
- [![Pydantic](https://img.shields.io/badge/pydantic-%E2%89%A52.11.4-red)](https://docs.pydantic.dev/)
27
- [![PyPI](https://img.shields.io/badge/PyPI-sysnet--persons--model-orange)](https://pypi.org/project/sysnet-persons-model/)
28
-
29
- Čistá Python knihovna — **bez FastAPI, bez MongoDB**. Slouží jako sdílená datová vrstva
30
- importovaná dalšími službami SYSNET.
31
-
32
- ---
33
-
34
- ## Instalace
35
-
36
- ```bash
37
- pip install sysnet-persons-model
38
- ```
39
-
40
- ---
41
-
42
- ## Rychlý start
43
-
44
- ```python
45
- from persons_model.individual import IndividualType
46
- from persons_model.person_entity import PersonEntityType
47
- from persons_model.role import RoleType
48
- from persons_model.common import RegistryType, MembershipEnum, MemberType
49
- from persons_model.tag import TagType, TagItemType
50
-
51
- # Vytvoření jednotlivce
52
- person = IndividualType(
53
- identifier="550e8400-e29b-41d4-a716-446655440000",
54
- name="Jan Novák",
55
- username="jnovak",
56
- )
57
-
58
- # Přidání tagu
59
- person.tags = TagType()
60
- person.tags.add_tag(TagItemType(tag="aktivni", color="#00FF00"))
61
- ```
62
-
63
- ---
64
-
65
- ## Moduly
66
-
67
- ### `common` — Společné typy
68
-
69
- | Třída / Enum | Popis |
70
- |---|---|
71
- | `RegistryEnum` | Identifikační registry (`CRZP`, `EMPTY`) |
72
- | `RegistryType` | Reference na identifikační údaje (uuid, uri, other) |
73
- | `MembershipEnum` | Typ členství: admin, representative, employee, department, general, other |
74
- | `MemberType` | Členský záznam |
75
- | `ContactType` | Kontaktní údaje osoby |
76
- | `RedundantType` | Redundantní záznam (name, code, location, note) |
77
- | `DepartmentType` | Útvar organizace (rozšiřuje `RedundantType` o `parent`) |
78
- | `IssuingType` | Údaje pro vydávání dokladů |
79
- | `ScopeType` | Definice rozsahu působnosti (Global, Regional, Local) |
80
-
81
- ### `individual` — Jednotlivci (uživatelé)
82
-
83
- | Třída | Popis |
84
- |---|---|
85
- | `IndividualBaseType` | Základní atributy: jméno, username, DN, heslo, kontakty, adresy, GDPR |
86
- | `IndividualEntryType` | Zkrácená položka pro seznam |
87
- | `IndividualType` | Plný záznam osoby (rozšiřuje Base o identifier, pid, registry, tags, document) |
88
- | `IndividualListType` | Stránkovaný seznam osob |
89
-
90
- ### `person_entity` — Subjekty
91
-
92
- | Třída | Popis |
93
- |---|---|
94
- | `PersonEntityLinkType` | Odkaz na navázaný subjekt |
95
- | `PersonEntityEntryType` | Položka subjektu v kontextu |
96
- | `PersonEntityBaseType` | Základní atributy subjektu (včetně `scope`) |
97
- | `PersonEntityType` | Plný záznam (fyzická / právnická osoba) |
98
- | `PersonEntityListType` | Stránkovaný seznam subjektů |
99
-
100
- ### `role` — Role
101
-
102
- | Třída / Enum | Popis |
103
- |---|---|
104
- | `RoleCategoryEnum` | `individual`, `personal`, `security`, `other` |
105
- | `RoleCategoryType` | Boolean příznaky kategorií |
106
- | `RoleBaseType` | Základ role (code, name, categories, note) |
107
- | `RoleEntryType` | Položka seznamu rolí (rozšiřuje Base o identifier) |
108
- | `RoleType` | Plná role s holders, admins, tags, document |
109
- | `RoleListType` | Stránkovaný seznam rolí |
110
-
111
- ### `context` — Uživatelský kontext
112
-
113
- | Třída | Popis |
114
- |---|---|
115
- | `ContextRolesType` | Role uživatele/subjektu (admin, holder) |
116
- | `ContextPersonsType` | Subjekty uživatele (admin, contact, member, representative) |
117
- | `ContextIndividualType` | Kompletní kontext konkrétního uživatele |
118
-
119
- ### `tag` — Tagy
120
-
121
- | Třída | Popis |
122
- |---|---|
123
- | `TagItemType` | Jedna značka (tag, color) |
124
- | `TagType` | Seznam tagů s metodami `has_tag`, `add_tag`, `remove_tag` |
125
- | `TagListType` | Stránkovaný seznam tagů |
126
-
127
- ### `country` — Země (ISO 3166-1)
128
-
129
- | Třída | Popis |
130
- |---|---|
131
- | `CountryType` | Stát: kódy n3/a2/a3, název česky a anglicky |
132
- | `CountryListType` | Stránkovaný seznam zemí |
133
- | `CountryMapType` | Seznam ve formátu code/value |
134
-
135
- ### `config` — Konfigurace
136
-
137
- | Třída | Popis |
138
- |---|---|
139
- | `ConfigType` | Minimální konfigurace (`cache: Optional[StrictBool]`) |
140
-
141
- ---
142
-
143
- ## Vývoj
144
-
145
- Viz [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md) pro podrobnou vývojovou příručku.
146
-
147
- ```powershell
148
- # Klonování a nastavení prostředí
149
- cd D:\development\git\models\persons
150
- .venv\Scripts\python.exe -m pip install -e .
151
-
152
- # Spuštění testů
153
- .venv\Scripts\python.exe -m pytest
154
-
155
- # Spuštění testů s pokrytím
156
- .venv\Scripts\python.exe -m pytest --cov=persons_model --cov-report=term-missing
157
- ```
158
-
159
- ---
160
-
161
- ## Technický stack
162
-
163
- | Vrstva | Technologie | Verze |
164
- |---|---|---|
165
- | Datové modely | Pydantic v2 | ≥ 2.11.4 |
166
- | Utility | sysnet-pyutils | ≥ 1.7.0 |
167
- | Python | CPython | ≥ 3.10 |
168
- | Testy | pytest + pytest-cov | 9.x / 7.x |
169
-
170
- ---
171
-
172
- ## Architektura
173
-
174
- Viz [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md).
175
-
176
- Všechny modely dodržují konzistentní vzor:
177
- 1. `BaseType` — základní atributy bez identifikátoru
178
- 2. `EntryType` — zkrácená položka pro seznamy
179
- 3. plný `Type` — rozšiřuje Base o `identifier`, `pid`, `registry`, `tags`, `document`
180
- 4. `ListType` — obálka pro stránkované výsledky (`hits`, `entries`)
181
-
182
- ---
183
-
184
- ## Verze
185
-
186
- Aktuální verze: **1.2.0**
187
-
188
- Repozitář: https://github.com/SYSNET-CZ/models/tree/main/persons