sysnet-persons-model 1.2.5__tar.gz → 1.2.7__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 (32) hide show
  1. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/PKG-INFO +2 -2
  2. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/README.md +1 -1
  3. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/individual.py +8 -2
  4. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/person_entity.py +10 -3
  5. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/role.py +8 -2
  6. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/pyproject.toml +1 -1
  7. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/sysnet_persons_model.egg-info/PKG-INFO +2 -2
  8. sysnet_persons_model-1.2.7/tests/test_person_entity.py +137 -0
  9. sysnet_persons_model-1.2.5/tests/test_person_entity.py +0 -333
  10. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/LICENSE +0 -0
  11. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/__init__.py +0 -0
  12. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/common.py +0 -0
  13. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/config.py +0 -0
  14. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/context.py +0 -0
  15. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/country.py +0 -0
  16. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/legal_form.py +0 -0
  17. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/persons_model/tag.py +0 -0
  18. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/requirements.txt +0 -0
  19. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/setup.cfg +0 -0
  20. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/sysnet_persons_model.egg-info/SOURCES.txt +0 -0
  21. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/sysnet_persons_model.egg-info/dependency_links.txt +0 -0
  22. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/sysnet_persons_model.egg-info/requires.txt +0 -0
  23. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/sysnet_persons_model.egg-info/top_level.txt +0 -0
  24. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/tests/test_common.py +0 -0
  25. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/tests/test_config.py +0 -0
  26. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/tests/test_context.py +0 -0
  27. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/tests/test_country.py +0 -0
  28. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/tests/test_individual.py +0 -0
  29. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/tests/test_legal_form.py +0 -0
  30. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/tests/test_role.py +0 -0
  31. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/tests/test_scope.py +0 -0
  32. {sysnet_persons_model-1.2.5 → sysnet_persons_model-1.2.7}/tests/test_tag.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sysnet-persons-model
3
- Version: 1.2.5
3
+ Version: 1.2.7
4
4
  Summary: SYSNET Persons Data Model
5
5
  Author-email: Data Developer <info@sysnet.cz>
6
6
  License-Expression: LicenseRef-SYSNET-FreeForHomeUse
@@ -93,7 +93,7 @@ person.tags.add_tag(TagItemType(tag="aktivni", color="#00FF00"))
93
93
  |---|---|
94
94
  | `PersonEntityLinkType` | Odkaz na navázaný subjekt |
95
95
  | `PersonEntityEntryType` | Položka subjektu v kontextu |
96
- | `PersonEntityBaseType` | Základní atributy subjektu |
96
+ | `PersonEntityBaseType` | Základní atributy subjektu (včetně `scope`) |
97
97
  | `PersonEntityType` | Plný záznam (fyzická / právnická osoba) |
98
98
  | `PersonEntityListType` | Stránkovaný seznam subjektů |
99
99
 
@@ -73,7 +73,7 @@ person.tags.add_tag(TagItemType(tag="aktivni", color="#00FF00"))
73
73
  |---|---|
74
74
  | `PersonEntityLinkType` | Odkaz na navázaný subjekt |
75
75
  | `PersonEntityEntryType` | Položka subjektu v kontextu |
76
- | `PersonEntityBaseType` | Základní atributy subjektu |
76
+ | `PersonEntityBaseType` | Základní atributy subjektu (včetně `scope`) |
77
77
  | `PersonEntityType` | Plný záznam (fyzická / právnická osoba) |
78
78
  | `PersonEntityListType` | Stránkovaný seznam subjektů |
79
79
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from datetime import datetime
4
4
  from typing import List, Optional
5
5
 
6
- from pydantic import BaseModel, Field, SecretStr, StrictBool
6
+ from pydantic import BaseModel, Field, SecretStr, StrictBool, AliasChoices
7
7
  from sysnet_pyutils.models.general import LocationType, ListTypeBase, MetadataEssentialType
8
8
 
9
9
  from persons_model.common import ContactType, RegistryType
@@ -46,7 +46,13 @@ class IndividualType(IndividualBaseType):
46
46
  pid: Optional[str] = Field(default=None, description="identifikátor PID")
47
47
  registry: Optional[RegistryType] = Field(default=None, description="Referenční registr")
48
48
  tags: Optional[TagType] = Field(default=None, description="Seznam tagů objektu")
49
- document: Optional[MetadataEssentialType] = Field(default=None, description="Metadata")
49
+ """Sekce metadat životního cyklu pod aliasem 'metadata' (Redmine #9850)."""
50
+ document: Optional[MetadataEssentialType] = Field(
51
+ default=None,
52
+ description='Metadata životního cyklu objektu (vytvoření, modifikace, smazání). Přístupné i jako alias "metadata".',
53
+ validation_alias=AliasChoices('document', 'metadata'),
54
+ serialization_alias='document',
55
+ )
50
56
 
51
57
 
52
58
  class IndividualListType(ListTypeBase):
@@ -3,10 +3,10 @@ from __future__ import annotations
3
3
  from datetime import datetime
4
4
  from typing import TYPE_CHECKING, List, Optional, Union
5
5
 
6
- from pydantic import BaseModel, Field, StrictBool
6
+ from pydantic import BaseModel, Field, StrictBool, AliasChoices
7
7
  from sysnet_pyutils.models.general import LocationType, PersonTypeEnum, ListTypeBase, MetadataEssentialType
8
8
 
9
- from persons_model.common import RedundantType, DepartmentType, ContactType, IssuingType, RegistryType, MemberType
9
+ from persons_model.common import RedundantType, DepartmentType, ContactType, IssuingType, RegistryType, MemberType, ScopeType
10
10
  from persons_model.legal_form import LegalFormEnum, LegalFormType, make_legal_form, person_type_from_legal_form
11
11
  from persons_model.tag import TagType
12
12
 
@@ -63,6 +63,7 @@ class PersonEntityBaseType(BaseModel):
63
63
  contacts: Optional[List[Optional[ContactType]]] = Field(default=None, description="Další kontaktní osoby")
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
+ scope: Optional[ScopeType] = Field(default=None, description="Rozsah působnosti subjektu")
66
67
 
67
68
  def set_legal_form(self, code: Union[LegalFormEnum, str]) -> "PersonEntityBaseType":
68
69
  """Nastaví atribut legal_form podle kódu právní formy.
@@ -115,4 +116,10 @@ class PersonEntityType(PersonEntityBaseType):
115
116
  members: Optional[List[Optional[MemberType]]] = Field(default=None, description="Členové subjektu")
116
117
  linked_persons: Optional[List[Optional[PersonEntityLinkType]]] = Field(default=None, description="Vazba na jiný subjekt")
117
118
  tags: Optional[TagType] = Field(default=None, description="Seznam tagů")
118
- document: Optional[MetadataEssentialType] = Field(default=None, description='Document metadata')
119
+ """Sekce metadat životního cyklu pod aliasem 'metadata' (Redmine #9850)."""
120
+ document: Optional[MetadataEssentialType] = Field(
121
+ default=None,
122
+ description='Metadata životního cyklu objektu (vytvoření, modifikace, smazání). Přístupné i jako alias "metadata".',
123
+ validation_alias=AliasChoices('document', 'metadata'),
124
+ serialization_alias='document',
125
+ )
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Optional, List
4
4
 
5
- from pydantic import BaseModel, Field, StrictBool
5
+ from pydantic import BaseModel, Field, StrictBool, AliasChoices
6
6
  from sysnet_pyutils.models.general import ListTypeBase, BaseEnum, MetadataEssentialType
7
7
 
8
8
  from persons_model.common import RegistryType
@@ -43,7 +43,13 @@ class RoleType(RoleBaseType):
43
43
  admins_individual: Optional[List[Optional[str]]] = Field(default=None, description="Správci role - jednotlivci")
44
44
  admins_personal: Optional[List[Optional[str]]] = Field(default=None, description="Správci role - osoby")
45
45
  tags: Optional[TagType] = Field(default=None, description="Seznam značek")
46
- document: Optional[MetadataEssentialType] = Field(default=None, description='Metadata')
46
+ """Sekce metadat životního cyklu pod aliasem 'metadata' (Redmine #9850)."""
47
+ document: Optional[MetadataEssentialType] = Field(
48
+ default=None,
49
+ description='Metadata životního cyklu objektu (vytvoření, modifikace, smazání). Přístupné i jako alias "metadata".',
50
+ validation_alias=AliasChoices('document', 'metadata'),
51
+ serialization_alias='document',
52
+ )
47
53
 
48
54
 
49
55
  class RoleEntryType(RoleBaseType):
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sysnet-persons-model"
7
- version = "1.2.5"
7
+ version = "1.2.7"
8
8
  authors = [
9
9
  { name="Data Developer", email="info@sysnet.cz" },
10
10
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sysnet-persons-model
3
- Version: 1.2.5
3
+ Version: 1.2.7
4
4
  Summary: SYSNET Persons Data Model
5
5
  Author-email: Data Developer <info@sysnet.cz>
6
6
  License-Expression: LicenseRef-SYSNET-FreeForHomeUse
@@ -93,7 +93,7 @@ person.tags.add_tag(TagItemType(tag="aktivni", color="#00FF00"))
93
93
  |---|---|
94
94
  | `PersonEntityLinkType` | Odkaz na navázaný subjekt |
95
95
  | `PersonEntityEntryType` | Položka subjektu v kontextu |
96
- | `PersonEntityBaseType` | Základní atributy subjektu |
96
+ | `PersonEntityBaseType` | Základní atributy subjektu (včetně `scope`) |
97
97
  | `PersonEntityType` | Plný záznam (fyzická / právnická osoba) |
98
98
  | `PersonEntityListType` | Stránkovaný seznam subjektů |
99
99
 
@@ -0,0 +1,137 @@
1
+ import pytest
2
+ from datetime import datetime
3
+ from typing import List, Optional
4
+ from pydantic import ValidationError
5
+ from sysnet_pyutils.models.general import LocationType, PersonTypeEnum
6
+ from persons_model.person_entity import (
7
+ PersonEntityLinkType,
8
+ PersonEntityEntryType,
9
+ PersonEntityListType,
10
+ PersonEntityBaseType,
11
+ PersonEntityType
12
+ )
13
+ from persons_model.legal_form import LegalFormEnum
14
+
15
+ @pytest.fixture
16
+ def sample_person_entity():
17
+ return PersonEntityEntryType(identifier="test-id", name="Sample")
18
+
19
+ class TestPersonEntityLinkType:
20
+ def test_prazdny(self):
21
+ l = PersonEntityLinkType()
22
+ assert l.identifier is None
23
+ assert l.name is None
24
+
25
+ def test_s_hodnotami(self):
26
+ l = PersonEntityLinkType(identifier="x", name="Test", link_type="parent")
27
+ assert l.identifier == "x"
28
+ assert l.link_type == "parent"
29
+
30
+
31
+ class TestPersonEntityEntryType:
32
+ def test_prazdny(self):
33
+ p = PersonEntityEntryType()
34
+ assert p.identifier is None
35
+ assert p.is_admin is False
36
+
37
+ def test_s_hodnotami(self):
38
+ p = PersonEntityEntryType(identifier="x", name="Test", is_admin=True)
39
+ assert p.identifier == "x"
40
+ assert p.is_admin == True
41
+
42
+
43
+ class TestPersonEntityType:
44
+ def test_prazdny(self):
45
+ p = PersonEntityType()
46
+ assert p.identifier is None
47
+
48
+ def test_serialization(self):
49
+ p = PersonEntityType(identifier="x", name="Test")
50
+ data = p.model_dump()
51
+ p2 = PersonEntityType.model_validate(data)
52
+ assert p2.identifier == "x"
53
+ assert p2.name == "Test"
54
+
55
+
56
+ class TestPersonEntityListType:
57
+ def test_prazdny(self):
58
+ lst = PersonEntityListType()
59
+ assert lst.hits is None
60
+ assert lst.entries is None
61
+
62
+ def test_s_polozkami(self):
63
+ entries = [
64
+ PersonEntityEntryType(identifier="pe1", name="Firma A"),
65
+ PersonEntityEntryType(identifier="pe2", name="Firma B"),
66
+ ]
67
+ lst = PersonEntityListType(hits=2, entries=entries)
68
+ assert lst.hits == 2
69
+ assert lst.entries[1].name == "Firma B"
70
+
71
+ def test_persons_list(self, sample_person_entity):
72
+ lst = PersonEntityListType(hits=1, entries=[sample_person_entity])
73
+ assert lst.hits == 1
74
+ assert len(lst.entries) == 1
75
+
76
+ def test_scope_in_base_type(self):
77
+ from persons_model.common import ScopeType, ScopeLevelEnum
78
+ entity = PersonEntityBaseType(
79
+ name="Test Subjekt",
80
+ scope=ScopeType(level=ScopeLevelEnum.GLOBAL)
81
+ )
82
+ assert entity.scope.level == ScopeLevelEnum.GLOBAL
83
+ assert entity.name == "Test Subjekt"
84
+
85
+
86
+ class TestPersonEntityBaseTypeSetLegalForm:
87
+ def test_set_legal_form_z_retezce(self):
88
+ """set_legal_form('112') nastaví legal_form s kódem PF_112 a českým názvem."""
89
+ p = PersonEntityBaseType(name="ACME s.r.o.")
90
+ result = p.set_legal_form("112")
91
+ assert result is p # vrací self
92
+ assert p.legal_form is not None
93
+ assert p.legal_form.code == LegalFormEnum.PF_112
94
+ assert p.legal_form.name == "Společnost s ručením omezeným"
95
+
96
+ def test_set_legal_form_z_enumu(self):
97
+ p = PersonEntityBaseType(name="Kraj JHC")
98
+ p.set_legal_form(LegalFormEnum.PF_804)
99
+ assert p.legal_form.code == LegalFormEnum.PF_804
100
+ assert p.legal_form.name == "Kraj"
101
+
102
+ def test_set_legal_form_vraci_self(self):
103
+ """Metoda vrací self pro method chaining."""
104
+ p = PersonEntityBaseType()
105
+ assert p.set_legal_form("112") is p
106
+
107
+ def test_neplatny_kod_vyhodi_chybu(self):
108
+ p = PersonEntityBaseType()
109
+ with pytest.raises(ValueError):
110
+ p.set_legal_form("999")
111
+
112
+
113
+ class TestPersonEntityBaseTypeSetPersonTypeFromLegalForm:
114
+ def test_legal_entity(self):
115
+ p = PersonEntityBaseType()
116
+ p.set_legal_form("112")
117
+ p.set_person_type_from_legal_form()
118
+ assert p.person_type == PersonTypeEnum.LEGAL_ENTITY
119
+
120
+ def test_individual_entrepreneur(self):
121
+ p = PersonEntityBaseType()
122
+ # Kód 100 jako příklad
123
+ p.set_legal_form("100")
124
+ p.set_person_type_from_legal_form()
125
+ assert p.person_type == PersonTypeEnum.BUSINESS_NATURAL_PERSON
126
+
127
+ def test_bez_legal_form_nic_nenastavi(self):
128
+ p = PersonEntityBaseType(person_type=None)
129
+ p.set_person_type_from_legal_form()
130
+ assert p.person_type is None
131
+
132
+ def test_neznamy_kod_nic_nenastavi(self):
133
+ p = PersonEntityBaseType(person_type=None)
134
+ # Použijeme validní kód, ale simulujeme situaci, kdy pt je None
135
+ # V tomto modelu jsou všechny enums validní, takže test je spíše formální
136
+ p.set_person_type_from_legal_form()
137
+ assert p.person_type is None
@@ -1,333 +0,0 @@
1
- """
2
- Testy pro modul persons_model.person_entity
3
- """
4
- import pytest
5
- from datetime import datetime, timezone
6
- from sysnet_pyutils.models.general import PersonTypeEnum, LocationType
7
-
8
- from persons_model.person_entity import (
9
- PersonEntityLinkType, PersonEntityEntryType,
10
- PersonEntityBaseType, PersonEntityType, PersonEntityListType,
11
- )
12
- from persons_model.common import (
13
- RegistryType, MemberType, MembershipEnum,
14
- ContactType, IssuingType, RedundantType, DepartmentType,
15
- )
16
- from persons_model.legal_form import LegalFormType, LegalFormEnum
17
- from persons_model.tag import TagType, TagItemType
18
-
19
-
20
- class TestPersonEntityLinkType:
21
- def test_prazdny(self):
22
- p = PersonEntityLinkType()
23
- assert p.identifier is None
24
- assert p.code is None
25
- assert p.name is None
26
- assert p.link_type is None
27
-
28
- def test_s_hodnotami(self):
29
- p = PersonEntityLinkType(
30
- identifier="pe-uuid", code="PE01",
31
- name="Vazba s.r.o.", link_type="subsidiary",
32
- )
33
- assert p.identifier == "pe-uuid"
34
- assert p.link_type == "subsidiary"
35
-
36
-
37
- class TestPersonEntityEntryType:
38
- def test_vychozi_hodnoty(self):
39
- e = PersonEntityEntryType()
40
- assert e.identifier is None
41
- assert e.is_admin is False
42
- assert e.membership is None
43
- assert e.tags is None
44
- assert e.ico is None
45
- assert e.headquarters is None
46
-
47
- def test_s_hodnotami(self):
48
- e = PersonEntityEntryType(
49
- identifier="pe-1",
50
- name="ACME s.r.o.",
51
- is_admin=True,
52
- membership="admin",
53
- )
54
- assert e.identifier == "pe-1"
55
- assert e.is_admin is True
56
-
57
- def test_ico(self):
58
- """Pole ico je přítomno a správně nastaveno."""
59
- e = PersonEntityEntryType(identifier="pe-2", name="Firma s.r.o.", ico="12345678")
60
- assert e.ico == "12345678"
61
-
62
- def test_ico_none(self):
63
- """Pole ico je Optional — default None."""
64
- e = PersonEntityEntryType(name="Fyzická osoba")
65
- assert e.ico is None
66
-
67
- def test_headquarters(self):
68
- """Pole headquarters přijme LocationType."""
69
- loc = LocationType(city="Praha", zip="11000")
70
- e = PersonEntityEntryType(name="ACME s.r.o.", headquarters=loc)
71
- assert e.headquarters is not None
72
- assert e.headquarters.city == "Praha"
73
- assert e.headquarters.zip == "11000"
74
-
75
- def test_headquarters_none(self):
76
- """Pole headquarters je Optional — default None."""
77
- e = PersonEntityEntryType(name="Firma")
78
- assert e.headquarters is None
79
-
80
- def test_plny_entry(self):
81
- """Všechna pole včetně ico a headquarters najednou."""
82
- loc = LocationType(city="Brno")
83
- e = PersonEntityEntryType(
84
- identifier="pe-3",
85
- person_type=PersonTypeEnum.LEGAL_ENTITY,
86
- ico="87654321",
87
- name="Beta a.s.",
88
- headquarters=loc,
89
- is_admin=False,
90
- membership="member",
91
- )
92
- assert e.identifier == "pe-3"
93
- assert e.person_type == PersonTypeEnum.LEGAL_ENTITY
94
- assert e.ico == "87654321"
95
- assert e.name == "Beta a.s."
96
- assert e.headquarters.city == "Brno"
97
-
98
- def test_serializace_ico_headquarters(self):
99
- """model_dump obsahuje ico a headquarters."""
100
- loc = LocationType(city="Ostrava")
101
- e = PersonEntityEntryType(ico="11223344", headquarters=loc)
102
- data = e.model_dump()
103
- assert data["ico"] == "11223344"
104
- assert data["headquarters"]["city"] == "Ostrava"
105
-
106
- def test_deserializace_ico_headquarters(self):
107
- """model_validate správně načte ico a headquarters."""
108
- data = {
109
- "identifier": "pe-4",
110
- "ico": "99887766",
111
- "name": "Gamma s.r.o.",
112
- "headquarters": {"city": "Plzeň"},
113
- }
114
- e = PersonEntityEntryType.model_validate(data)
115
- assert e.ico == "99887766"
116
- assert e.headquarters.city == "Plzeň"
117
-
118
-
119
- class TestPersonEntityBaseType:
120
- def test_prazdny(self):
121
- p = PersonEntityBaseType()
122
- assert p.code is None
123
- assert p.ico is None
124
- assert p.birthdate is None
125
- assert p.name is None
126
- assert p.full_name is None
127
- assert p.headquarters is None
128
- assert p.note is None
129
- assert p.legal_form is None
130
-
131
- def test_s_hodnotami(self):
132
- p = PersonEntityBaseType(
133
- code="PE001",
134
- ico="12345678",
135
- name="ACME s.r.o.",
136
- full_name="ACME spol. s ručením omezeným",
137
- )
138
- assert p.code == "PE001"
139
- assert p.ico == "12345678"
140
-
141
- def test_legal_form_sro(self):
142
- lf = LegalFormType(code=LegalFormEnum.PF_112, name="Společnost s ručením omezeným")
143
- p = PersonEntityBaseType(name="ACME s.r.o.", legal_form=lf)
144
- assert p.legal_form is not None
145
- assert p.legal_form.code == LegalFormEnum.PF_112
146
- assert p.legal_form.name == "Společnost s ručením omezeným"
147
-
148
- def test_legal_form_jen_code(self):
149
- p = PersonEntityBaseType(name="Kraj JHC", legal_form=LegalFormType(code=LegalFormEnum.PF_804))
150
- assert p.legal_form.code == LegalFormEnum.PF_804
151
- assert p.legal_form.name is None
152
-
153
- def test_legal_form_serializace(self):
154
- lf = LegalFormType(code=LegalFormEnum.PF_121, name="Akciová společnost")
155
- p = PersonEntityBaseType(name="Firma a.s.", legal_form=lf)
156
- data = p.model_dump()
157
- assert data["legal_form"]["code"] == "121"
158
- p2 = PersonEntityBaseType.model_validate(data)
159
- assert p2.legal_form.code == LegalFormEnum.PF_121
160
-
161
- def test_s_issuing(self):
162
- issuing = IssuingType(code="ORG01", authority="MZe")
163
- p = PersonEntityBaseType(issuing=[issuing])
164
- assert len(p.issuing) == 1
165
- assert p.issuing[0].authority == "MZe"
166
-
167
-
168
- class TestPersonEntityType:
169
- def test_vychozi_hodnoty(self):
170
- p = PersonEntityType()
171
- assert p.identifier is None
172
- assert p.pid is None
173
- assert p.registry is None
174
- assert p.admins is None
175
- assert p.members is None
176
- assert p.linked_persons is None
177
- assert p.tags is None
178
- assert p.document is None
179
-
180
- def test_plny_zaznam(self):
181
- reg = RegistryType(uuid="reg-uuid")
182
- member = MemberType(
183
- identifier="m1", name="Jan Novák",
184
- membership=MembershipEnum.EMPLOYEE,
185
- )
186
- link = PersonEntityLinkType(identifier="pe-2", name="Dcera s.r.o.")
187
- tag = TagType()
188
- tag.add_tag(TagItemType(tag="aktivni"))
189
- p = PersonEntityType(
190
- identifier="pe-uuid",
191
- pid="pid-001",
192
- code="PE001",
193
- name="Matka a.s.",
194
- registry=reg,
195
- admins=["admin-uuid"],
196
- members=[member],
197
- linked_persons=[link],
198
- tags=tag,
199
- )
200
- assert p.identifier == "pe-uuid"
201
- assert p.registry.identifier == "reg-uuid"
202
- assert len(p.admins) == 1
203
- assert len(p.members) == 1
204
- assert p.members[0].membership == MembershipEnum.EMPLOYEE
205
- assert len(p.linked_persons) == 1
206
- assert p.tags.has_tag("aktivni") is True
207
-
208
- def test_serializace_deserializace(self):
209
- p = PersonEntityType(identifier="x", code="C1", name="Test")
210
- data = p.model_dump()
211
- p2 = PersonEntityType.model_validate(data)
212
- assert p2.identifier == "x"
213
- assert p2.name == "Test"
214
-
215
-
216
- class TestPersonEntityListType:
217
- def test_prazdny(self):
218
- lst = PersonEntityListType()
219
- assert lst.hits is None
220
- assert lst.entries is None
221
-
222
- def test_s_polozkami(self):
223
- entries = [
224
- PersonEntityEntryType(identifier="pe1", name="Firma A"),
225
- PersonEntityEntryType(identifier="pe2", name="Firma B"),
226
- ]
227
- lst = PersonEntityListType(hits=2, entries=entries)
228
- assert lst.hits == 2
229
- assert lst.entries[1].name == "Firma B"
230
-
231
-
232
- class TestPersonEntityBaseTypeSetLegalForm:
233
- def test_set_legal_form_z_retezce(self):
234
- """set_legal_form('112') nastaví legal_form s kódem PF_112 a českým názvem."""
235
- p = PersonEntityBaseType(name="ACME s.r.o.")
236
- result = p.set_legal_form("112")
237
- assert result is p # vrací self
238
- assert p.legal_form is not None
239
- assert p.legal_form.code == LegalFormEnum.PF_112
240
- assert p.legal_form.name == "Společnost s ručením omezeným"
241
-
242
- def test_set_legal_form_z_enumu(self):
243
- p = PersonEntityBaseType(name="Kraj JHC")
244
- p.set_legal_form(LegalFormEnum.PF_804)
245
- assert p.legal_form.code == LegalFormEnum.PF_804
246
- assert p.legal_form.name == "Kraj"
247
-
248
- def test_set_legal_form_vraci_self(self):
249
- """Metoda vrací self pro method chaining."""
250
- p = PersonEntityBaseType()
251
- assert p.set_legal_form("121") is p
252
-
253
- def test_set_legal_form_prepise_existujici(self):
254
- """Volání set_legal_form přepíše předchozí hodnotu."""
255
- p = PersonEntityBaseType()
256
- p.set_legal_form("112")
257
- p.set_legal_form("121")
258
- assert p.legal_form.code == LegalFormEnum.PF_121
259
- assert p.legal_form.name == "Akciová společnost"
260
-
261
- def test_set_legal_form_neplatny_kod(self):
262
- """Neplatný kód vyhodí ValueError."""
263
- p = PersonEntityBaseType()
264
- with pytest.raises(ValueError):
265
- p.set_legal_form("999")
266
-
267
- def test_set_legal_form_dedeno_person_entity_type(self):
268
- """Metoda funguje i na potomkovi PersonEntityType."""
269
- p = PersonEntityType(name="Firma")
270
- p.set_legal_form("325")
271
- assert p.legal_form.code == LegalFormEnum.PF_325
272
-
273
-
274
- class TestPersonEntityBaseTypeSetPersonTypeFromLegalForm:
275
- def test_sro_legal_entity(self):
276
- """s.r.o. (112) -> LEGAL_ENTITY."""
277
- p = PersonEntityBaseType(name="ACME s.r.o.")
278
- p.set_legal_form("112").set_person_type_from_legal_form()
279
- assert p.person_type == PersonTypeEnum.LEGAL_ENTITY
280
-
281
- def test_as_legal_entity(self):
282
- p = PersonEntityBaseType()
283
- p.set_legal_form("121").set_person_type_from_legal_form()
284
- assert p.person_type == PersonTypeEnum.LEGAL_ENTITY
285
-
286
- def test_obec_legal_entity(self):
287
- p = PersonEntityBaseType()
288
- p.set_legal_form("801").set_person_type_from_legal_form()
289
- assert p.person_type == PersonTypeEnum.LEGAL_ENTITY
290
-
291
- def test_org_slozka_legal_entity_wo_ico(self):
292
- p = PersonEntityBaseType()
293
- p.set_legal_form("325").set_person_type_from_legal_form()
294
- assert p.person_type == PersonTypeEnum.LEGAL_ENTITY_WO_ICO
295
-
296
- def test_zahranicni_po_foreign_legal_entity(self):
297
- p = PersonEntityBaseType()
298
- p.set_legal_form("421").set_person_type_from_legal_form()
299
- assert p.person_type == PersonTypeEnum.FOREIGN_LEGAL_ENTITY
300
-
301
- def test_fo_podnikajici_business_natural_person(self):
302
- p = PersonEntityBaseType()
303
- p.set_legal_form("100").set_person_type_from_legal_form()
304
- assert p.person_type == PersonTypeEnum.BUSINESS_NATURAL_PERSON
305
-
306
- def test_zahranicni_fo_foreign_natural_person(self):
307
- p = PersonEntityBaseType()
308
- p.set_legal_form("424").set_person_type_from_legal_form()
309
- assert p.person_type == PersonTypeEnum.FOREIGN_NATURAL_PERSON
310
-
311
- def test_bez_legal_form_person_type_se_nezmeni(self):
312
- """Bez nastaveného legal_form person_type zůstane None."""
313
- p = PersonEntityBaseType()
314
- p.set_person_type_from_legal_form()
315
- assert p.person_type is None
316
-
317
- def test_bez_legal_form_existujici_person_type_se_nezmeni(self):
318
- """Bez nastaveného legal_form se původní person_type nepřepíše."""
319
- p = PersonEntityBaseType(person_type=PersonTypeEnum.LEGAL_ENTITY)
320
- p.set_person_type_from_legal_form()
321
- assert p.person_type == PersonTypeEnum.LEGAL_ENTITY
322
-
323
- def test_chaining_jednokrokovy(self):
324
- """Řetězení set_legal_form + set_person_type_from_legal_form v jednom výrazu."""
325
- p = PersonEntityBaseType(name="Spolek")
326
- p.set_legal_form("706").set_person_type_from_legal_form()
327
- assert p.legal_form.code == LegalFormEnum.PF_706
328
- assert p.person_type == PersonTypeEnum.LEGAL_ENTITY
329
-
330
- def test_vraci_self(self):
331
- p = PersonEntityBaseType()
332
- p.set_legal_form("112")
333
- assert p.set_person_type_from_legal_form() is p