boarddata 6.7.1__tar.gz → 6.7.3__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.
- {boarddata-6.7.1 → boarddata-6.7.3}/PKG-INFO +1 -1
- {boarddata-6.7.1 → boarddata-6.7.3}/__init__.py +1 -1
- {boarddata-6.7.1 → boarddata-6.7.3}/_assemblies.py +19 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_comex.py +32 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/boarddata.egg-info/PKG-INFO +1 -1
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/apply.py +24 -9
- {boarddata-6.7.1 → boarddata-6.7.3}/pyproject.toml +1 -1
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_assemblies.py +26 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_comex.py +42 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/assemblies.py +12 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/comex.py +20 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/CLAUDE.md +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/README.md +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_auditors.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_base.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_committees.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_companies.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_criteria.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_directors.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_documents.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_esg.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_indexes.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_persons.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_risks.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_sentinel.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/_utilities.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/boarddata.egg-info/SOURCES.txt +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/boarddata.egg-info/dependency_links.txt +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/boarddata.egg-info/requires.txt +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/boarddata.egg-info/top_level.txt +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/cache.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/client.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/__init__.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/adjudicate.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/context.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/db.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/domains.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/models.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/oracle.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/registry.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/report.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/rules/__init__.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/rules/cross_company.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/rules/lexical.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/s3.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/dq/verify_s3.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/errors.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/py.typed +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/scripts/__init__.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/scripts/dq_apply.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/scripts/dq_batch.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/scripts/dq_plan.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/scripts/dq_revert.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/scripts/dq_scan.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/scripts/dq_verify_s3.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/setup.cfg +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/__init__.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/conftest.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_auditors.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_base.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_build_payload.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_cache.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_committees.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_companies.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_config.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_criteria.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_directors.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_documents.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_esg.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_exports.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_indexes.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_persons.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_risks.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_sentinel.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/tests/test_utilities.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/__init__.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/auditors.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/committees.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/companies.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/core.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/criteria.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/directors.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/documents.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/esg.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/indexes.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/persons.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/risks.py +0 -0
- {boarddata-6.7.1 → boarddata-6.7.3}/types/sentinel.py +0 -0
|
@@ -6,6 +6,7 @@ from typing import Any
|
|
|
6
6
|
|
|
7
7
|
from .types.assemblies import (
|
|
8
8
|
AssemblyDetail,
|
|
9
|
+
AssemblyDocumentLink,
|
|
9
10
|
AssemblyExportItem,
|
|
10
11
|
CreatePresentationPayload,
|
|
11
12
|
CreateQuestionPayload,
|
|
@@ -456,6 +457,24 @@ class AssemblyMixin:
|
|
|
456
457
|
"""Delete a question."""
|
|
457
458
|
self._delete(f"assemblies/{assembly_uid}/questions/{pk}/") # type: ignore[attr-defined]
|
|
458
459
|
|
|
460
|
+
# --- Assembly document links ---
|
|
461
|
+
def link_assembly_document(
|
|
462
|
+
self, assembly_uid: str, document_id: str, category: str, doc_type: str
|
|
463
|
+
) -> AssemblyDocumentLink:
|
|
464
|
+
"""Link a document to an assembly (idempotent; returns the link row).
|
|
465
|
+
|
|
466
|
+
The backend refuses cross-company links: ``document`` must belong to the
|
|
467
|
+
assembly's company.
|
|
468
|
+
"""
|
|
469
|
+
return self._post( # type: ignore[attr-defined]
|
|
470
|
+
f"assemblies/{assembly_uid}/documents/",
|
|
471
|
+
{"document_id": document_id, "category": category, "doc_type": doc_type},
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
def unlink_assembly_document(self, assembly_uid: str, link_id: str) -> None:
|
|
475
|
+
"""Delete an assembly-document link (the Document itself is untouched)."""
|
|
476
|
+
self._delete(f"assemblies/{assembly_uid}/documents/{link_id}/") # type: ignore[attr-defined]
|
|
477
|
+
|
|
459
478
|
# -- Resolutions --
|
|
460
479
|
|
|
461
480
|
def list_resolutions(self, **params: Any) -> PaginatedResponse:
|
|
@@ -349,6 +349,11 @@ class ComexMixin:
|
|
|
349
349
|
discretionary_grant: bool | None = None,
|
|
350
350
|
subsidiary_remuneration: str | None = None,
|
|
351
351
|
remuneration_via_holding: bool | None = None,
|
|
352
|
+
sti_basis: str | None = None,
|
|
353
|
+
variable_target_value: str | None = None,
|
|
354
|
+
variable_max_value: str | None = None,
|
|
355
|
+
lti_grant_cap_basis: str | None = None,
|
|
356
|
+
lti_grant_cap_value: str | None = None,
|
|
352
357
|
currency: str | None = None,
|
|
353
358
|
field_sources: list[FieldSourcePayload] | None = None,
|
|
354
359
|
criteria: list[dict[str, Any]] | None = None,
|
|
@@ -397,6 +402,12 @@ class ComexMixin:
|
|
|
397
402
|
discretionary_grant: Whether discretionary grant applies.
|
|
398
403
|
subsidiary_remuneration: Subsidiary remuneration (decimal).
|
|
399
404
|
remuneration_via_holding: Whether remuneration is provided via holding.
|
|
405
|
+
sti_basis: Disclosed STI base form (frozen enum, e.g. ``"pct_of_fixed"``).
|
|
406
|
+
variable_target_value: STI target in the DISCLOSED basis (decimal string;
|
|
407
|
+
interpretation governed by ``sti_basis`` — never converted).
|
|
408
|
+
variable_max_value: STI cap in the DISCLOSED basis (decimal string).
|
|
409
|
+
lti_grant_cap_basis: Disclosed LTI grant-cap basis (frozen enum).
|
|
410
|
+
lti_grant_cap_value: LTI grant cap in the DISCLOSED basis (decimal string).
|
|
400
411
|
currency: Currency code (e.g. ``"EUR"``).
|
|
401
412
|
field_sources: Document provenance for fields.
|
|
402
413
|
criteria: List of compensation criteria dicts.
|
|
@@ -448,6 +459,11 @@ class ComexMixin:
|
|
|
448
459
|
discretionary_grant=discretionary_grant,
|
|
449
460
|
subsidiary_remuneration=subsidiary_remuneration,
|
|
450
461
|
remuneration_via_holding=remuneration_via_holding,
|
|
462
|
+
sti_basis=sti_basis,
|
|
463
|
+
variable_target_value=variable_target_value,
|
|
464
|
+
variable_max_value=variable_max_value,
|
|
465
|
+
lti_grant_cap_basis=lti_grant_cap_basis,
|
|
466
|
+
lti_grant_cap_value=lti_grant_cap_value,
|
|
451
467
|
currency=currency,
|
|
452
468
|
field_sources=field_sources,
|
|
453
469
|
criteria=criteria,
|
|
@@ -498,6 +514,11 @@ class ComexMixin:
|
|
|
498
514
|
discretionary_grant: bool | None = None,
|
|
499
515
|
subsidiary_remuneration: str | None = None,
|
|
500
516
|
remuneration_via_holding: bool | None = None,
|
|
517
|
+
sti_basis: str | None = None,
|
|
518
|
+
variable_target_value: str | None = None,
|
|
519
|
+
variable_max_value: str | None = None,
|
|
520
|
+
lti_grant_cap_basis: str | None = None,
|
|
521
|
+
lti_grant_cap_value: str | None = None,
|
|
501
522
|
currency: str | None = None,
|
|
502
523
|
field_sources: list[FieldSourcePayload] | None = None,
|
|
503
524
|
criteria: list[dict[str, Any]] | None = None,
|
|
@@ -546,6 +567,12 @@ class ComexMixin:
|
|
|
546
567
|
discretionary_grant: Whether discretionary grant applies.
|
|
547
568
|
subsidiary_remuneration: Subsidiary remuneration (decimal).
|
|
548
569
|
remuneration_via_holding: Whether remuneration is provided via holding.
|
|
570
|
+
sti_basis: Disclosed STI base form (frozen enum, e.g. ``"pct_of_fixed"``).
|
|
571
|
+
variable_target_value: STI target in the DISCLOSED basis (decimal string;
|
|
572
|
+
interpretation governed by ``sti_basis`` — never converted).
|
|
573
|
+
variable_max_value: STI cap in the DISCLOSED basis (decimal string).
|
|
574
|
+
lti_grant_cap_basis: Disclosed LTI grant-cap basis (frozen enum).
|
|
575
|
+
lti_grant_cap_value: LTI grant cap in the DISCLOSED basis (decimal string).
|
|
549
576
|
currency: Currency code (e.g. ``"EUR"``).
|
|
550
577
|
field_sources: Document provenance for fields.
|
|
551
578
|
criteria: List of compensation criteria dicts.
|
|
@@ -597,6 +624,11 @@ class ComexMixin:
|
|
|
597
624
|
discretionary_grant=discretionary_grant,
|
|
598
625
|
subsidiary_remuneration=subsidiary_remuneration,
|
|
599
626
|
remuneration_via_holding=remuneration_via_holding,
|
|
627
|
+
sti_basis=sti_basis,
|
|
628
|
+
variable_target_value=variable_target_value,
|
|
629
|
+
variable_max_value=variable_max_value,
|
|
630
|
+
lti_grant_cap_basis=lti_grant_cap_basis,
|
|
631
|
+
lti_grant_cap_value=lti_grant_cap_value,
|
|
600
632
|
currency=currency,
|
|
601
633
|
field_sources=field_sources,
|
|
602
634
|
criteria=criteria,
|
|
@@ -7,10 +7,10 @@ the pghistory audit trail. There is no direct DB write anywhere here.
|
|
|
7
7
|
|
|
8
8
|
Reversibility, by action:
|
|
9
9
|
* ``repoint`` — full. Restore the document's previous ISIN.
|
|
10
|
-
* ``delete`` —
|
|
11
|
-
snapshot,
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
* ``delete`` — full. The document row is recreated from a full pre-delete
|
|
11
|
+
snapshot, and its assembly↔document link(s) are re-created via
|
|
12
|
+
``link_assembly_document``. A link that fails to restore (e.g. a
|
|
13
|
+
cross-company refusal) is recorded rather than aborting the revert.
|
|
14
14
|
* ``merge`` — refused. Destructive and not yet revertible; ``apply`` raises
|
|
15
15
|
rather than perform an irreversible operation.
|
|
16
16
|
"""
|
|
@@ -54,6 +54,9 @@ class FixClient(Protocol):
|
|
|
54
54
|
def update_document(self, uid: str, **kwargs: Any) -> dict[str, Any]: ...
|
|
55
55
|
def delete_document(self, uid: str, *, cascade_field_sources: bool = False) -> None: ...
|
|
56
56
|
def merge_document(self, uid: str, *, into: str) -> dict[str, Any]: ...
|
|
57
|
+
def link_assembly_document(
|
|
58
|
+
self, assembly_uid: str, document_id: str, category: str, doc_type: str
|
|
59
|
+
) -> dict[str, Any]: ...
|
|
57
60
|
|
|
58
61
|
|
|
59
62
|
def _snapshot(client: FixClient, uid: str) -> dict[str, Any]:
|
|
@@ -78,9 +81,9 @@ def apply_action(action: FixAction, client: FixClient) -> dict[str, Any] | None:
|
|
|
78
81
|
"action": "delete",
|
|
79
82
|
"document_id": doc_id,
|
|
80
83
|
"before": before,
|
|
81
|
-
# links are gone (backend cascade)
|
|
84
|
+
# links are gone (backend cascade); recorded so revert can re-create them
|
|
82
85
|
"assembly_links": list(action.before_state.get("assembly_links", [])),
|
|
83
|
-
"reversible": "
|
|
86
|
+
"reversible": "full",
|
|
84
87
|
}
|
|
85
88
|
|
|
86
89
|
if action.action == "repoint":
|
|
@@ -155,12 +158,24 @@ def revert_entry(entry: dict[str, Any], client: FixClient) -> dict[str, Any]:
|
|
|
155
158
|
url=before.get("url"),
|
|
156
159
|
original_url=before.get("original_url"),
|
|
157
160
|
)
|
|
161
|
+
new_id = new.get("id")
|
|
162
|
+
restored: list[dict[str, Any]] = []
|
|
163
|
+
unrestored: list[dict[str, Any]] = []
|
|
164
|
+
for link in entry.get("assembly_links", []):
|
|
165
|
+
try:
|
|
166
|
+
client.link_assembly_document(
|
|
167
|
+
link["assembly_id"], new_id, link.get("category", ""), link.get("doc_type", "")
|
|
168
|
+
)
|
|
169
|
+
restored.append(link)
|
|
170
|
+
except Exception as exc: # noqa: BLE001 — best-effort restore; record, never abort the revert
|
|
171
|
+
unrestored.append({**link, "error": str(exc)})
|
|
158
172
|
return {
|
|
159
173
|
"document_id": doc_id,
|
|
160
174
|
"reverted": "delete",
|
|
161
|
-
"status": "
|
|
162
|
-
"new_document_id":
|
|
163
|
-
"
|
|
175
|
+
"status": "ok" if not unrestored else "partial",
|
|
176
|
+
"new_document_id": new_id,
|
|
177
|
+
"restored_assembly_links": restored,
|
|
178
|
+
"unrestored_assembly_links": unrestored,
|
|
164
179
|
}
|
|
165
180
|
|
|
166
181
|
raise ApplyError(f"cannot revert action {act!r} for document {doc_id}")
|
|
@@ -161,3 +161,29 @@ class TestListPublishedAssemblies:
|
|
|
161
161
|
c.list_published_assemblies(page=2, page_size=500)
|
|
162
162
|
_, kwargs = c._request.call_args
|
|
163
163
|
assert kwargs["params"] == {"page": 2, "page_size": 500}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class TestLinkAssemblyDocument:
|
|
167
|
+
def test_posts_link_payload(self):
|
|
168
|
+
c = make_client()
|
|
169
|
+
c._request.return_value = {
|
|
170
|
+
"id": "link1",
|
|
171
|
+
"document_id": "doc1",
|
|
172
|
+
"url": "k.pdf",
|
|
173
|
+
"title": "Notice",
|
|
174
|
+
"document_type": "notice_of_gm",
|
|
175
|
+
"category": "ODJ",
|
|
176
|
+
"doc_type": "NOTICE",
|
|
177
|
+
}
|
|
178
|
+
out = c.link_assembly_document("asm1", "doc1", "ODJ", "NOTICE")
|
|
179
|
+
args, kwargs = c._request.call_args
|
|
180
|
+
assert args == ("POST", "assemblies/asm1/documents/")
|
|
181
|
+
assert kwargs["json"] == {"document_id": "doc1", "category": "ODJ", "doc_type": "NOTICE"}
|
|
182
|
+
assert out["id"] == "link1"
|
|
183
|
+
|
|
184
|
+
def test_unlink_issues_delete(self):
|
|
185
|
+
c = make_client()
|
|
186
|
+
c._request.return_value = None
|
|
187
|
+
c.unlink_assembly_document("asm1", "link1")
|
|
188
|
+
args, _ = c._request.call_args
|
|
189
|
+
assert args == ("DELETE", "assemblies/asm1/documents/link1/")
|
|
@@ -159,3 +159,45 @@ class TestReplaceComexCompensation:
|
|
|
159
159
|
c._request.return_value = {"id": "comp10", "action": "created"}
|
|
160
160
|
result = c.replace_comex_compensation("comex-uuid", 2024, "POLITIC", fixed="1.00")
|
|
161
161
|
assert result["action"] == "created"
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def test_envelope_scalar_kwargs_in_signatures():
|
|
165
|
+
import inspect
|
|
166
|
+
|
|
167
|
+
from boarddata import BoardDataClient
|
|
168
|
+
|
|
169
|
+
for method in (
|
|
170
|
+
BoardDataClient.create_comex_compensation,
|
|
171
|
+
BoardDataClient.replace_comex_compensation,
|
|
172
|
+
):
|
|
173
|
+
params = inspect.signature(method).parameters
|
|
174
|
+
for k in (
|
|
175
|
+
"sti_basis",
|
|
176
|
+
"variable_target_value",
|
|
177
|
+
"variable_max_value",
|
|
178
|
+
"lti_grant_cap_basis",
|
|
179
|
+
"lti_grant_cap_value",
|
|
180
|
+
):
|
|
181
|
+
assert k in params, f"{method.__name__} missing {k}"
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def test_envelope_scalars_reach_the_wire():
|
|
185
|
+
c = make_client()
|
|
186
|
+
c._request.return_value = {"id": "1", "action": "created"}
|
|
187
|
+
c.replace_comex_compensation(
|
|
188
|
+
"uid",
|
|
189
|
+
2025,
|
|
190
|
+
"real",
|
|
191
|
+
sti_basis="pct_of_fixed",
|
|
192
|
+
variable_target_value="150",
|
|
193
|
+
variable_max_value="180",
|
|
194
|
+
lti_grant_cap_basis="pct_of_fixed",
|
|
195
|
+
lti_grant_cap_value="150",
|
|
196
|
+
)
|
|
197
|
+
_, kwargs = c._request.call_args
|
|
198
|
+
p = kwargs["json"]
|
|
199
|
+
assert p["sti_basis"] == "pct_of_fixed"
|
|
200
|
+
assert p["variable_target_value"] == "150"
|
|
201
|
+
assert p["variable_max_value"] == "180"
|
|
202
|
+
assert p["lti_grant_cap_basis"] == "pct_of_fixed"
|
|
203
|
+
assert p["lti_grant_cap_value"] == "150"
|
|
@@ -248,6 +248,18 @@ class _AssemblyDocumentInline(TypedDict):
|
|
|
248
248
|
doc_type: str
|
|
249
249
|
|
|
250
250
|
|
|
251
|
+
class AssemblyDocumentLink(TypedDict):
|
|
252
|
+
"""A document↔assembly link row (the join shown on an AGM page)."""
|
|
253
|
+
|
|
254
|
+
id: str
|
|
255
|
+
document_id: str
|
|
256
|
+
url: str
|
|
257
|
+
title: str
|
|
258
|
+
document_type: str
|
|
259
|
+
category: str
|
|
260
|
+
doc_type: str
|
|
261
|
+
|
|
262
|
+
|
|
251
263
|
# -- Assemblies --
|
|
252
264
|
|
|
253
265
|
|
|
@@ -110,6 +110,11 @@ class ComexCompensationItem(TypedDict):
|
|
|
110
110
|
holding: bool
|
|
111
111
|
has_employment_contract: bool
|
|
112
112
|
remuneration_via_holding: bool
|
|
113
|
+
sti_basis: str
|
|
114
|
+
variable_target_value: str | None
|
|
115
|
+
variable_max_value: str | None
|
|
116
|
+
lti_grant_cap_basis: str
|
|
117
|
+
lti_grant_cap_value: str | None
|
|
113
118
|
total: str | None
|
|
114
119
|
total_paid: str | None
|
|
115
120
|
currency: str
|
|
@@ -158,6 +163,11 @@ class ComexCompensationDetail(TypedDict):
|
|
|
158
163
|
discretionary_grant: bool
|
|
159
164
|
subsidiary_remuneration: str | None
|
|
160
165
|
remuneration_via_holding: bool
|
|
166
|
+
sti_basis: str
|
|
167
|
+
variable_target_value: str | None
|
|
168
|
+
variable_max_value: str | None
|
|
169
|
+
lti_grant_cap_basis: str
|
|
170
|
+
lti_grant_cap_value: str | None
|
|
161
171
|
currency: str
|
|
162
172
|
total: str | None
|
|
163
173
|
total_paid: str | None
|
|
@@ -206,6 +216,11 @@ class CreateComexCompensationPayload(TypedDict):
|
|
|
206
216
|
discretionary_grant: NotRequired[bool]
|
|
207
217
|
subsidiary_remuneration: NotRequired[str | None]
|
|
208
218
|
remuneration_via_holding: NotRequired[bool]
|
|
219
|
+
sti_basis: NotRequired[str]
|
|
220
|
+
variable_target_value: NotRequired[str | None]
|
|
221
|
+
variable_max_value: NotRequired[str | None]
|
|
222
|
+
lti_grant_cap_basis: NotRequired[str]
|
|
223
|
+
lti_grant_cap_value: NotRequired[str | None]
|
|
209
224
|
currency: NotRequired[str]
|
|
210
225
|
field_sources: NotRequired[list[FieldSourcePayload]]
|
|
211
226
|
criteria: NotRequired[list[dict[str, Any]]]
|
|
@@ -252,6 +267,11 @@ class UpdateComexCompensationPayload(TypedDict, total=False):
|
|
|
252
267
|
discretionary_grant: bool
|
|
253
268
|
subsidiary_remuneration: str | None
|
|
254
269
|
remuneration_via_holding: bool
|
|
270
|
+
sti_basis: str
|
|
271
|
+
variable_target_value: str | None
|
|
272
|
+
variable_max_value: str | None
|
|
273
|
+
lti_grant_cap_basis: str
|
|
274
|
+
lti_grant_cap_value: str | None
|
|
255
275
|
currency: str
|
|
256
276
|
field_sources: list[FieldSourcePayload]
|
|
257
277
|
criteria: list[dict[str, Any]]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|