boarddata 6.8.2__tar.gz → 6.8.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.8.2 → boarddata-6.8.3}/PKG-INFO +1 -1
- {boarddata-6.8.2 → boarddata-6.8.3}/__init__.py +1 -1
- {boarddata-6.8.2 → boarddata-6.8.3}/_comex.py +12 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/boarddata.egg-info/PKG-INFO +1 -1
- {boarddata-6.8.2 → boarddata-6.8.3}/pyproject.toml +1 -1
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_comex.py +40 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/comex.py +5 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/CLAUDE.md +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/README.md +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_assemblies.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_auditors.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_base.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_committees.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_companies.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_criteria.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_directors.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_documents.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_esg.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_indexes.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_persons.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_risks.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_sentinel.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/_utilities.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/boarddata.egg-info/SOURCES.txt +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/boarddata.egg-info/dependency_links.txt +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/boarddata.egg-info/requires.txt +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/boarddata.egg-info/top_level.txt +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/cache.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/client.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/__init__.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/adjudicate.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/apply.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/context.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/db.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/domains.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/models.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/oracle.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/registry.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/report.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/rules/__init__.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/rules/cross_company.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/rules/lexical.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/s3.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/dq/verify_s3.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/errors.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/py.typed +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/scripts/__init__.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/scripts/dq_apply.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/scripts/dq_batch.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/scripts/dq_plan.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/scripts/dq_revert.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/scripts/dq_scan.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/scripts/dq_verify_s3.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/setup.cfg +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/__init__.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/conftest.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_assemblies.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_auditors.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_base.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_build_payload.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_cache.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_committees.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_companies.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_config.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_criteria.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_directors.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_documents.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_esg.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_exports.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_indexes.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_persons.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_politic_fixture_conformance.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_risks.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_sentinel.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_types_politic.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/tests/test_utilities.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/__init__.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/assemblies.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/auditors.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/committees.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/companies.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/core.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/criteria.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/directors.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/documents.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/esg.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/indexes.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/persons.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/risks.py +0 -0
- {boarddata-6.8.2 → boarddata-6.8.3}/types/sentinel.py +0 -0
|
@@ -368,6 +368,7 @@ class ComexMixin:
|
|
|
368
368
|
lti_grant_target_basis: str | None = None,
|
|
369
369
|
lti_grant_target_value: str | None = None,
|
|
370
370
|
lti_grant_cap_kind: str | None = None,
|
|
371
|
+
lti_max: str | None = None,
|
|
371
372
|
performance_shares_number_level: str | None = None,
|
|
372
373
|
performance_shares_level: str | None = None,
|
|
373
374
|
policy_changed_midyear: bool | None = None,
|
|
@@ -442,6 +443,10 @@ class ComexMixin:
|
|
|
442
443
|
lti_grant_target_value: LTI grant at TARGET in the DISCLOSED basis (decimal string).
|
|
443
444
|
lti_grant_cap_kind: Which kind of ceiling occupies the cap slot (frozen enum,
|
|
444
445
|
e.g. ``"individual_max"`` or ``"policy_cap"``).
|
|
446
|
+
lti_max: LTI maximum as a MONEY amount in the row's own currency
|
|
447
|
+
(decimal string; never converted): grant ceiling × vesting max
|
|
448
|
+
÷ 100, capped at a share-count / %-of-capital ceiling. ``"0.00"``
|
|
449
|
+
is an attested zero; omit (None) when not served.
|
|
445
450
|
performance_shares_number_level: Quote-cued disclosure level of the
|
|
446
451
|
performance-shares COUNT (frozen enum, e.g. ``"target"`` or ``"max"``).
|
|
447
452
|
performance_shares_level: Quote-cued disclosure level of the
|
|
@@ -512,6 +517,7 @@ class ComexMixin:
|
|
|
512
517
|
lti_grant_target_basis=lti_grant_target_basis,
|
|
513
518
|
lti_grant_target_value=lti_grant_target_value,
|
|
514
519
|
lti_grant_cap_kind=lti_grant_cap_kind,
|
|
520
|
+
lti_max=lti_max,
|
|
515
521
|
performance_shares_number_level=performance_shares_number_level,
|
|
516
522
|
performance_shares_level=performance_shares_level,
|
|
517
523
|
policy_changed_midyear=policy_changed_midyear,
|
|
@@ -577,6 +583,7 @@ class ComexMixin:
|
|
|
577
583
|
lti_grant_target_basis: str | None = None,
|
|
578
584
|
lti_grant_target_value: str | None = None,
|
|
579
585
|
lti_grant_cap_kind: str | None = None,
|
|
586
|
+
lti_max: str | None = None,
|
|
580
587
|
performance_shares_number_level: str | None = None,
|
|
581
588
|
performance_shares_level: str | None = None,
|
|
582
589
|
policy_changed_midyear: bool | None = None,
|
|
@@ -651,6 +658,10 @@ class ComexMixin:
|
|
|
651
658
|
lti_grant_target_value: LTI grant at TARGET in the DISCLOSED basis (decimal string).
|
|
652
659
|
lti_grant_cap_kind: Which kind of ceiling occupies the cap slot (frozen enum,
|
|
653
660
|
e.g. ``"individual_max"`` or ``"policy_cap"``).
|
|
661
|
+
lti_max: LTI maximum as a MONEY amount in the row's own currency
|
|
662
|
+
(decimal string; never converted): grant ceiling × vesting max
|
|
663
|
+
÷ 100, capped at a share-count / %-of-capital ceiling. ``"0.00"``
|
|
664
|
+
is an attested zero; omit (None) when not served.
|
|
654
665
|
performance_shares_number_level: Quote-cued disclosure level of the
|
|
655
666
|
performance-shares COUNT (frozen enum, e.g. ``"target"`` or ``"max"``).
|
|
656
667
|
performance_shares_level: Quote-cued disclosure level of the
|
|
@@ -722,6 +733,7 @@ class ComexMixin:
|
|
|
722
733
|
lti_grant_target_basis=lti_grant_target_basis,
|
|
723
734
|
lti_grant_target_value=lti_grant_target_value,
|
|
724
735
|
lti_grant_cap_kind=lti_grant_cap_kind,
|
|
736
|
+
lti_max=lti_max,
|
|
725
737
|
performance_shares_number_level=performance_shares_number_level,
|
|
726
738
|
performance_shares_level=performance_shares_level,
|
|
727
739
|
policy_changed_midyear=policy_changed_midyear,
|
|
@@ -288,11 +288,51 @@ def test_envelope_scalar_kwargs_in_signatures():
|
|
|
288
288
|
"reference_amount",
|
|
289
289
|
"lti_grant_cap_basis",
|
|
290
290
|
"lti_grant_cap_value",
|
|
291
|
+
"lti_max",
|
|
291
292
|
"policy_changed_midyear",
|
|
292
293
|
):
|
|
293
294
|
assert k in params, f"{method.__name__} missing {k}"
|
|
294
295
|
|
|
295
296
|
|
|
297
|
+
def test_lti_max_reaches_the_wire_including_attested_zero():
|
|
298
|
+
c = make_client()
|
|
299
|
+
c._request.return_value = {"id": "1", "action": "created"}
|
|
300
|
+
c.replace_comex_compensation("uid", 2026, "politic", lti_max="0.00")
|
|
301
|
+
_, kwargs = c._request.call_args
|
|
302
|
+
assert kwargs["json"]["lti_max"] == "0.00"
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def test_lti_max_omitted_is_not_sent():
|
|
306
|
+
"""None means 'not served' — the SDK must not write an explicit null
|
|
307
|
+
over a committed value on replace."""
|
|
308
|
+
c = make_client()
|
|
309
|
+
c._request.return_value = {"id": "1", "action": "created"}
|
|
310
|
+
c.replace_comex_compensation("uid", 2026, "politic", variable_max="1.00")
|
|
311
|
+
_, kwargs = c._request.call_args
|
|
312
|
+
assert "lti_max" not in kwargs["json"]
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
def test_lti_max_declared_on_every_compensation_typeddict():
|
|
316
|
+
"""Read + write contract parity: every TypedDict that carries the twin
|
|
317
|
+
lti_grant_cap_kind slot must also carry lti_max."""
|
|
318
|
+
from boarddata.types.comex import (
|
|
319
|
+
ComexCompensationDetail,
|
|
320
|
+
ComexCompensationExportItem,
|
|
321
|
+
ComexCompensationItem,
|
|
322
|
+
CreateComexCompensationPayload,
|
|
323
|
+
UpdateComexCompensationPayload,
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
for typed_dict in (
|
|
327
|
+
ComexCompensationItem,
|
|
328
|
+
ComexCompensationDetail,
|
|
329
|
+
CreateComexCompensationPayload,
|
|
330
|
+
UpdateComexCompensationPayload,
|
|
331
|
+
ComexCompensationExportItem,
|
|
332
|
+
):
|
|
333
|
+
assert "lti_max" in typed_dict.__annotations__, typed_dict.__name__
|
|
334
|
+
|
|
335
|
+
|
|
296
336
|
def test_envelope_scalars_reach_the_wire():
|
|
297
337
|
c = make_client()
|
|
298
338
|
c._request.return_value = {"id": "1", "action": "created"}
|
|
@@ -308,6 +308,7 @@ class ComexCompensationItem(TypedDict):
|
|
|
308
308
|
lti_grant_target_basis: str
|
|
309
309
|
lti_grant_target_value: str | None
|
|
310
310
|
lti_grant_cap_kind: str
|
|
311
|
+
lti_max: str | None
|
|
311
312
|
performance_shares_number_level: str
|
|
312
313
|
performance_shares_level: str
|
|
313
314
|
policy_changed_midyear: bool | None
|
|
@@ -373,6 +374,7 @@ class ComexCompensationDetail(TypedDict):
|
|
|
373
374
|
lti_grant_target_basis: str
|
|
374
375
|
lti_grant_target_value: str | None
|
|
375
376
|
lti_grant_cap_kind: str
|
|
377
|
+
lti_max: str | None
|
|
376
378
|
performance_shares_number_level: str
|
|
377
379
|
performance_shares_level: str
|
|
378
380
|
policy_changed_midyear: bool | None
|
|
@@ -437,6 +439,7 @@ class CreateComexCompensationPayload(TypedDict):
|
|
|
437
439
|
lti_grant_target_basis: NotRequired[str]
|
|
438
440
|
lti_grant_target_value: NotRequired[str | None]
|
|
439
441
|
lti_grant_cap_kind: NotRequired[str]
|
|
442
|
+
lti_max: NotRequired[str | None]
|
|
440
443
|
performance_shares_number_level: NotRequired[str]
|
|
441
444
|
performance_shares_level: NotRequired[str]
|
|
442
445
|
policy_changed_midyear: NotRequired[bool | None]
|
|
@@ -498,6 +501,7 @@ class UpdateComexCompensationPayload(TypedDict, total=False):
|
|
|
498
501
|
lti_grant_target_basis: str
|
|
499
502
|
lti_grant_target_value: str | None
|
|
500
503
|
lti_grant_cap_kind: str
|
|
504
|
+
lti_max: str | None
|
|
501
505
|
performance_shares_number_level: str
|
|
502
506
|
performance_shares_level: str
|
|
503
507
|
policy_changed_midyear: bool | None
|
|
@@ -640,6 +644,7 @@ class ComexCompensationExportItem(TypedDict, total=False):
|
|
|
640
644
|
lti_grant_target_basis: str
|
|
641
645
|
lti_grant_target_value: str | None
|
|
642
646
|
lti_grant_cap_kind: str
|
|
647
|
+
lti_max: str | None
|
|
643
648
|
performance_shares_number_level: str
|
|
644
649
|
performance_shares_level: str
|
|
645
650
|
policy_changed_midyear: bool | None
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|