boarddata 6.7.4__tar.gz → 6.8.2__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.4 → boarddata-6.8.2}/PKG-INFO +1 -1
- {boarddata-6.7.4 → boarddata-6.8.2}/__init__.py +1 -1
- {boarddata-6.7.4 → boarddata-6.8.2}/_comex.py +79 -11
- {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/PKG-INFO +1 -1
- {boarddata-6.7.4 → boarddata-6.8.2}/pyproject.toml +1 -1
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_comex.py +107 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/comex.py +25 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/CLAUDE.md +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/README.md +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_assemblies.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_auditors.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_base.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_committees.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_companies.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_criteria.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_directors.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_documents.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_esg.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_indexes.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_persons.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_risks.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_sentinel.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/_utilities.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/SOURCES.txt +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/dependency_links.txt +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/requires.txt +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/top_level.txt +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/cache.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/client.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/__init__.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/adjudicate.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/apply.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/context.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/db.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/domains.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/models.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/oracle.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/registry.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/report.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/rules/__init__.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/rules/cross_company.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/rules/lexical.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/s3.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/dq/verify_s3.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/errors.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/py.typed +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/scripts/__init__.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_apply.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_batch.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_plan.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_revert.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_scan.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_verify_s3.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/setup.cfg +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/__init__.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/conftest.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_assemblies.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_auditors.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_base.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_build_payload.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_cache.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_committees.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_companies.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_config.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_criteria.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_directors.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_documents.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_esg.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_exports.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_indexes.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_persons.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_politic_fixture_conformance.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_risks.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_sentinel.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_types_politic.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_utilities.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/__init__.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/assemblies.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/auditors.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/committees.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/companies.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/core.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/criteria.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/directors.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/documents.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/esg.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/indexes.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/persons.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/risks.py +0 -0
- {boarddata-6.7.4 → boarddata-6.8.2}/types/sentinel.py +0 -0
|
@@ -365,6 +365,11 @@ class ComexMixin:
|
|
|
365
365
|
reference_amount: str | None = None,
|
|
366
366
|
lti_grant_cap_basis: str | None = None,
|
|
367
367
|
lti_grant_cap_value: str | None = None,
|
|
368
|
+
lti_grant_target_basis: str | None = None,
|
|
369
|
+
lti_grant_target_value: str | None = None,
|
|
370
|
+
lti_grant_cap_kind: str | None = None,
|
|
371
|
+
performance_shares_number_level: str | None = None,
|
|
372
|
+
performance_shares_level: str | None = None,
|
|
368
373
|
policy_changed_midyear: bool | None = None,
|
|
369
374
|
currency: str | None = None,
|
|
370
375
|
field_sources: list[FieldSourcePayload] | None = None,
|
|
@@ -415,19 +420,32 @@ class ComexMixin:
|
|
|
415
420
|
subsidiary_remuneration: Subsidiary remuneration (decimal).
|
|
416
421
|
remuneration_via_holding: Whether remuneration is provided via holding.
|
|
417
422
|
sti_basis: Disclosed STI base form (frozen enum, e.g. ``"pct_of_fixed"``).
|
|
418
|
-
variable_max: STI cap
|
|
419
|
-
|
|
420
|
-
``variable_max_value``).
|
|
423
|
+
variable_max: STI cap as a MONEY amount, in the row's own currency
|
|
424
|
+
(decimal string; never converted — the cap expressed in the
|
|
425
|
+
disclosed basis goes in ``variable_max_value``). The pair
|
|
426
|
+
separates money from basis, NOT euros from other currencies:
|
|
427
|
+
8 politic rows carry USD or GBP here today.
|
|
421
428
|
variable_target_pct: STI target normalized to % of fixed (decimal
|
|
422
429
|
string; stated or derivation-backed, never back-solved).
|
|
423
430
|
variable_max_pct: STI cap normalized to % of fixed (decimal string).
|
|
424
431
|
variable_target_value: STI target in the DISCLOSED basis (decimal string;
|
|
425
432
|
interpretation governed by ``sti_basis`` — never converted).
|
|
426
433
|
variable_max_value: STI cap in the DISCLOSED basis (decimal string).
|
|
427
|
-
reference_amount: STI reference base amount in
|
|
428
|
-
``sti_basis="pct_of_reference_amount"``
|
|
434
|
+
reference_amount: STI reference base amount, in the row's own
|
|
435
|
+
currency (decimal string; ``sti_basis="pct_of_reference_amount"``
|
|
436
|
+
archetype). Its only holder today happens to be EUR, which is
|
|
437
|
+
why this said "in EUR" — accidentally true, never contractually
|
|
438
|
+
so; nothing converts on the way in.
|
|
429
439
|
lti_grant_cap_basis: Disclosed LTI grant-cap basis (frozen enum).
|
|
430
440
|
lti_grant_cap_value: LTI grant cap in the DISCLOSED basis (decimal string).
|
|
441
|
+
lti_grant_target_basis: Disclosed LTI grant-target basis (frozen enum).
|
|
442
|
+
lti_grant_target_value: LTI grant at TARGET in the DISCLOSED basis (decimal string).
|
|
443
|
+
lti_grant_cap_kind: Which kind of ceiling occupies the cap slot (frozen enum,
|
|
444
|
+
e.g. ``"individual_max"`` or ``"policy_cap"``).
|
|
445
|
+
performance_shares_number_level: Quote-cued disclosure level of the
|
|
446
|
+
performance-shares COUNT (frozen enum, e.g. ``"target"`` or ``"max"``).
|
|
447
|
+
performance_shares_level: Quote-cued disclosure level of the
|
|
448
|
+
performance-shares € valuation (frozen enum).
|
|
431
449
|
policy_changed_midyear: Policy regime changed mid-year; the stored
|
|
432
450
|
row is the fiscal-year-end regime (D5).
|
|
433
451
|
currency: Currency code (e.g. ``"EUR"``).
|
|
@@ -491,6 +509,11 @@ class ComexMixin:
|
|
|
491
509
|
reference_amount=reference_amount,
|
|
492
510
|
lti_grant_cap_basis=lti_grant_cap_basis,
|
|
493
511
|
lti_grant_cap_value=lti_grant_cap_value,
|
|
512
|
+
lti_grant_target_basis=lti_grant_target_basis,
|
|
513
|
+
lti_grant_target_value=lti_grant_target_value,
|
|
514
|
+
lti_grant_cap_kind=lti_grant_cap_kind,
|
|
515
|
+
performance_shares_number_level=performance_shares_number_level,
|
|
516
|
+
performance_shares_level=performance_shares_level,
|
|
494
517
|
policy_changed_midyear=policy_changed_midyear,
|
|
495
518
|
currency=currency,
|
|
496
519
|
field_sources=field_sources,
|
|
@@ -551,6 +574,11 @@ class ComexMixin:
|
|
|
551
574
|
reference_amount: str | None = None,
|
|
552
575
|
lti_grant_cap_basis: str | None = None,
|
|
553
576
|
lti_grant_cap_value: str | None = None,
|
|
577
|
+
lti_grant_target_basis: str | None = None,
|
|
578
|
+
lti_grant_target_value: str | None = None,
|
|
579
|
+
lti_grant_cap_kind: str | None = None,
|
|
580
|
+
performance_shares_number_level: str | None = None,
|
|
581
|
+
performance_shares_level: str | None = None,
|
|
554
582
|
policy_changed_midyear: bool | None = None,
|
|
555
583
|
currency: str | None = None,
|
|
556
584
|
field_sources: list[FieldSourcePayload] | None = None,
|
|
@@ -601,19 +629,32 @@ class ComexMixin:
|
|
|
601
629
|
subsidiary_remuneration: Subsidiary remuneration (decimal).
|
|
602
630
|
remuneration_via_holding: Whether remuneration is provided via holding.
|
|
603
631
|
sti_basis: Disclosed STI base form (frozen enum, e.g. ``"pct_of_fixed"``).
|
|
604
|
-
variable_max: STI cap
|
|
605
|
-
|
|
606
|
-
``variable_max_value``).
|
|
632
|
+
variable_max: STI cap as a MONEY amount, in the row's own currency
|
|
633
|
+
(decimal string; never converted — the cap expressed in the
|
|
634
|
+
disclosed basis goes in ``variable_max_value``). The pair
|
|
635
|
+
separates money from basis, NOT euros from other currencies:
|
|
636
|
+
8 politic rows carry USD or GBP here today.
|
|
607
637
|
variable_target_pct: STI target normalized to % of fixed (decimal
|
|
608
638
|
string; stated or derivation-backed, never back-solved).
|
|
609
639
|
variable_max_pct: STI cap normalized to % of fixed (decimal string).
|
|
610
640
|
variable_target_value: STI target in the DISCLOSED basis (decimal string;
|
|
611
641
|
interpretation governed by ``sti_basis`` — never converted).
|
|
612
642
|
variable_max_value: STI cap in the DISCLOSED basis (decimal string).
|
|
613
|
-
reference_amount: STI reference base amount in
|
|
614
|
-
``sti_basis="pct_of_reference_amount"``
|
|
643
|
+
reference_amount: STI reference base amount, in the row's own
|
|
644
|
+
currency (decimal string; ``sti_basis="pct_of_reference_amount"``
|
|
645
|
+
archetype). Its only holder today happens to be EUR, which is
|
|
646
|
+
why this said "in EUR" — accidentally true, never contractually
|
|
647
|
+
so; nothing converts on the way in.
|
|
615
648
|
lti_grant_cap_basis: Disclosed LTI grant-cap basis (frozen enum).
|
|
616
649
|
lti_grant_cap_value: LTI grant cap in the DISCLOSED basis (decimal string).
|
|
650
|
+
lti_grant_target_basis: Disclosed LTI grant-target basis (frozen enum).
|
|
651
|
+
lti_grant_target_value: LTI grant at TARGET in the DISCLOSED basis (decimal string).
|
|
652
|
+
lti_grant_cap_kind: Which kind of ceiling occupies the cap slot (frozen enum,
|
|
653
|
+
e.g. ``"individual_max"`` or ``"policy_cap"``).
|
|
654
|
+
performance_shares_number_level: Quote-cued disclosure level of the
|
|
655
|
+
performance-shares COUNT (frozen enum, e.g. ``"target"`` or ``"max"``).
|
|
656
|
+
performance_shares_level: Quote-cued disclosure level of the
|
|
657
|
+
performance-shares € valuation (frozen enum).
|
|
617
658
|
policy_changed_midyear: Policy regime changed mid-year; the stored
|
|
618
659
|
row is the fiscal-year-end regime (D5).
|
|
619
660
|
currency: Currency code (e.g. ``"EUR"``).
|
|
@@ -678,6 +719,11 @@ class ComexMixin:
|
|
|
678
719
|
reference_amount=reference_amount,
|
|
679
720
|
lti_grant_cap_basis=lti_grant_cap_basis,
|
|
680
721
|
lti_grant_cap_value=lti_grant_cap_value,
|
|
722
|
+
lti_grant_target_basis=lti_grant_target_basis,
|
|
723
|
+
lti_grant_target_value=lti_grant_target_value,
|
|
724
|
+
lti_grant_cap_kind=lti_grant_cap_kind,
|
|
725
|
+
performance_shares_number_level=performance_shares_number_level,
|
|
726
|
+
performance_shares_level=performance_shares_level,
|
|
681
727
|
policy_changed_midyear=policy_changed_midyear,
|
|
682
728
|
currency=currency,
|
|
683
729
|
field_sources=field_sources,
|
|
@@ -690,6 +736,12 @@ class ComexMixin:
|
|
|
690
736
|
self,
|
|
691
737
|
comex_uid: str,
|
|
692
738
|
pk: str,
|
|
739
|
+
*,
|
|
740
|
+
lti_grant_target_basis: str | None = None,
|
|
741
|
+
lti_grant_target_value: str | None = None,
|
|
742
|
+
lti_grant_cap_kind: str | None = None,
|
|
743
|
+
performance_shares_number_level: str | None = None,
|
|
744
|
+
performance_shares_level: str | None = None,
|
|
693
745
|
**comp_fields: Any,
|
|
694
746
|
) -> ComexCompensationDetail:
|
|
695
747
|
"""Partial update a comex compensation.
|
|
@@ -697,6 +749,14 @@ class ComexMixin:
|
|
|
697
749
|
Args:
|
|
698
750
|
comex_uid: Comex mandate UUID.
|
|
699
751
|
pk: Compensation entry ID.
|
|
752
|
+
lti_grant_target_basis: Disclosed LTI grant-target basis (frozen enum).
|
|
753
|
+
lti_grant_target_value: LTI grant at TARGET in the DISCLOSED basis (decimal string).
|
|
754
|
+
lti_grant_cap_kind: Which kind of ceiling occupies the cap slot (frozen enum,
|
|
755
|
+
e.g. ``"individual_max"`` or ``"policy_cap"``).
|
|
756
|
+
performance_shares_number_level: Quote-cued disclosure level of the
|
|
757
|
+
performance-shares COUNT (frozen enum, e.g. ``"target"`` or ``"max"``).
|
|
758
|
+
performance_shares_level: Quote-cued disclosure level of the
|
|
759
|
+
performance-shares € valuation (frozen enum).
|
|
700
760
|
**comp_fields: Compensation fields to update (see create_comex_compensation).
|
|
701
761
|
|
|
702
762
|
Returns:
|
|
@@ -705,7 +765,15 @@ class ComexMixin:
|
|
|
705
765
|
Raises:
|
|
706
766
|
BoardDataError: On non-2xx API response.
|
|
707
767
|
"""
|
|
708
|
-
payload = {
|
|
768
|
+
payload = {
|
|
769
|
+
**comp_fields,
|
|
770
|
+
"lti_grant_target_basis": lti_grant_target_basis,
|
|
771
|
+
"lti_grant_target_value": lti_grant_target_value,
|
|
772
|
+
"lti_grant_cap_kind": lti_grant_cap_kind,
|
|
773
|
+
"performance_shares_number_level": performance_shares_number_level,
|
|
774
|
+
"performance_shares_level": performance_shares_level,
|
|
775
|
+
}
|
|
776
|
+
payload = {k: v for k, v in payload.items() if v is not None}
|
|
709
777
|
return self._patch(f"comex/{comex_uid}/compensations/{pk}/", payload) # type: ignore[attr-defined]
|
|
710
778
|
|
|
711
779
|
def delete_comex_compensation(self, comex_uid: str, pk: str) -> None:
|
|
@@ -161,6 +161,113 @@ class TestReplaceComexCompensation:
|
|
|
161
161
|
assert result["action"] == "created"
|
|
162
162
|
|
|
163
163
|
|
|
164
|
+
class TestLtiEnvelopeLevelParams:
|
|
165
|
+
"""Task 3b: the five LTI-envelope-level params (lti_grant_target_basis,
|
|
166
|
+
lti_grant_target_value, lti_grant_cap_kind, performance_shares_number_level,
|
|
167
|
+
performance_shares_level) must reach the wire from all three comex
|
|
168
|
+
compensation writers — create, replace, and update. The data-pipeline
|
|
169
|
+
committer's filter_to_signature drops any kwarg the SDK signature doesn't
|
|
170
|
+
declare, so a missing site here means the field never reaches prod."""
|
|
171
|
+
|
|
172
|
+
LTI_KWARGS = {
|
|
173
|
+
"lti_grant_target_basis": "pct_of_fixed",
|
|
174
|
+
"lti_grant_target_value": "120.0000",
|
|
175
|
+
"lti_grant_cap_kind": "individual_max",
|
|
176
|
+
"performance_shares_number_level": "target",
|
|
177
|
+
"performance_shares_level": "max",
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
def test_create_sends_lti_envelope_level_params(self):
|
|
181
|
+
c = make_client()
|
|
182
|
+
c._request.return_value = {"id": "comp1"}
|
|
183
|
+
c.create_comex_compensation("comex-uuid", 2024, "real", **self.LTI_KWARGS)
|
|
184
|
+
_, kwargs = c._request.call_args
|
|
185
|
+
payload = kwargs["json"]
|
|
186
|
+
for k, v in self.LTI_KWARGS.items():
|
|
187
|
+
assert payload[k] == v
|
|
188
|
+
|
|
189
|
+
def test_create_omits_lti_envelope_level_params_when_not_set(self):
|
|
190
|
+
c = make_client()
|
|
191
|
+
c._request.return_value = {"id": "comp1"}
|
|
192
|
+
c.create_comex_compensation("comex-uuid", 2024, "real", fixed="1.00")
|
|
193
|
+
_, kwargs = c._request.call_args
|
|
194
|
+
payload = kwargs["json"]
|
|
195
|
+
for k in self.LTI_KWARGS:
|
|
196
|
+
assert k not in payload
|
|
197
|
+
|
|
198
|
+
def test_replace_sends_lti_envelope_level_params(self):
|
|
199
|
+
c = make_client()
|
|
200
|
+
c._request.return_value = {"id": "comp9", "action": "replaced"}
|
|
201
|
+
c.replace_comex_compensation("comex-uuid", 2024, "real", **self.LTI_KWARGS)
|
|
202
|
+
_, kwargs = c._request.call_args
|
|
203
|
+
payload = kwargs["json"]
|
|
204
|
+
for k, v in self.LTI_KWARGS.items():
|
|
205
|
+
assert payload[k] == v
|
|
206
|
+
|
|
207
|
+
def test_replace_omits_lti_envelope_level_params_when_not_set(self):
|
|
208
|
+
c = make_client()
|
|
209
|
+
c._request.return_value = {"id": "comp9", "action": "replaced"}
|
|
210
|
+
c.replace_comex_compensation("comex-uuid", 2024, "real", fixed="1.00")
|
|
211
|
+
_, kwargs = c._request.call_args
|
|
212
|
+
payload = kwargs["json"]
|
|
213
|
+
for k in self.LTI_KWARGS:
|
|
214
|
+
assert k not in payload
|
|
215
|
+
|
|
216
|
+
def test_update_sends_lti_envelope_level_params(self):
|
|
217
|
+
c = make_client()
|
|
218
|
+
c._request.return_value = {"id": "comp1"}
|
|
219
|
+
c.update_comex_compensation("comex-uuid", "comp1", **self.LTI_KWARGS)
|
|
220
|
+
_, kwargs = c._request.call_args
|
|
221
|
+
assert kwargs["json"] == self.LTI_KWARGS
|
|
222
|
+
|
|
223
|
+
def test_update_omits_lti_envelope_level_params_when_not_set(self):
|
|
224
|
+
c = make_client()
|
|
225
|
+
c._request.return_value = {"id": "comp1"}
|
|
226
|
+
c.update_comex_compensation("comex-uuid", "comp1", fixed="1.00")
|
|
227
|
+
_, kwargs = c._request.call_args
|
|
228
|
+
payload = kwargs["json"]
|
|
229
|
+
for k in self.LTI_KWARGS:
|
|
230
|
+
assert k not in payload
|
|
231
|
+
assert payload["fixed"] == "1.00"
|
|
232
|
+
|
|
233
|
+
def test_update_still_passes_through_other_comp_fields(self):
|
|
234
|
+
"""The five explicit params must not swallow the **comp_fields catch-all
|
|
235
|
+
that update_comex_compensation relies on for every other field."""
|
|
236
|
+
c = make_client()
|
|
237
|
+
c._request.return_value = {"id": "comp1"}
|
|
238
|
+
c.update_comex_compensation(
|
|
239
|
+
"comex-uuid",
|
|
240
|
+
"comp1",
|
|
241
|
+
fixed="500000.00",
|
|
242
|
+
lti_grant_target_basis="pct_of_fixed",
|
|
243
|
+
)
|
|
244
|
+
_, kwargs = c._request.call_args
|
|
245
|
+
payload = kwargs["json"]
|
|
246
|
+
assert payload["fixed"] == "500000.00"
|
|
247
|
+
assert payload["lti_grant_target_basis"] == "pct_of_fixed"
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def test_lti_envelope_level_kwargs_in_all_three_signatures():
|
|
251
|
+
import inspect
|
|
252
|
+
|
|
253
|
+
from boarddata import BoardDataClient
|
|
254
|
+
|
|
255
|
+
for method in (
|
|
256
|
+
BoardDataClient.create_comex_compensation,
|
|
257
|
+
BoardDataClient.replace_comex_compensation,
|
|
258
|
+
BoardDataClient.update_comex_compensation,
|
|
259
|
+
):
|
|
260
|
+
params = inspect.signature(method).parameters
|
|
261
|
+
for k in (
|
|
262
|
+
"lti_grant_target_basis",
|
|
263
|
+
"lti_grant_target_value",
|
|
264
|
+
"lti_grant_cap_kind",
|
|
265
|
+
"performance_shares_number_level",
|
|
266
|
+
"performance_shares_level",
|
|
267
|
+
):
|
|
268
|
+
assert k in params, f"{method.__name__} missing {k}"
|
|
269
|
+
|
|
270
|
+
|
|
164
271
|
def test_envelope_scalar_kwargs_in_signatures():
|
|
165
272
|
import inspect
|
|
166
273
|
|
|
@@ -305,6 +305,11 @@ class ComexCompensationItem(TypedDict):
|
|
|
305
305
|
reference_amount: str | None
|
|
306
306
|
lti_grant_cap_basis: str
|
|
307
307
|
lti_grant_cap_value: str | None
|
|
308
|
+
lti_grant_target_basis: str
|
|
309
|
+
lti_grant_target_value: str | None
|
|
310
|
+
lti_grant_cap_kind: str
|
|
311
|
+
performance_shares_number_level: str
|
|
312
|
+
performance_shares_level: str
|
|
308
313
|
policy_changed_midyear: bool | None
|
|
309
314
|
agm_date: str | None
|
|
310
315
|
total: str | None
|
|
@@ -365,6 +370,11 @@ class ComexCompensationDetail(TypedDict):
|
|
|
365
370
|
reference_amount: str | None
|
|
366
371
|
lti_grant_cap_basis: str
|
|
367
372
|
lti_grant_cap_value: str | None
|
|
373
|
+
lti_grant_target_basis: str
|
|
374
|
+
lti_grant_target_value: str | None
|
|
375
|
+
lti_grant_cap_kind: str
|
|
376
|
+
performance_shares_number_level: str
|
|
377
|
+
performance_shares_level: str
|
|
368
378
|
policy_changed_midyear: bool | None
|
|
369
379
|
agm_date: str | None
|
|
370
380
|
currency: str
|
|
@@ -424,6 +434,11 @@ class CreateComexCompensationPayload(TypedDict):
|
|
|
424
434
|
reference_amount: NotRequired[str | None]
|
|
425
435
|
lti_grant_cap_basis: NotRequired[str]
|
|
426
436
|
lti_grant_cap_value: NotRequired[str | None]
|
|
437
|
+
lti_grant_target_basis: NotRequired[str]
|
|
438
|
+
lti_grant_target_value: NotRequired[str | None]
|
|
439
|
+
lti_grant_cap_kind: NotRequired[str]
|
|
440
|
+
performance_shares_number_level: NotRequired[str]
|
|
441
|
+
performance_shares_level: NotRequired[str]
|
|
427
442
|
policy_changed_midyear: NotRequired[bool | None]
|
|
428
443
|
currency: NotRequired[str]
|
|
429
444
|
field_sources: NotRequired[list[FieldSourcePayload]]
|
|
@@ -480,6 +495,11 @@ class UpdateComexCompensationPayload(TypedDict, total=False):
|
|
|
480
495
|
reference_amount: str | None
|
|
481
496
|
lti_grant_cap_basis: str
|
|
482
497
|
lti_grant_cap_value: str | None
|
|
498
|
+
lti_grant_target_basis: str
|
|
499
|
+
lti_grant_target_value: str | None
|
|
500
|
+
lti_grant_cap_kind: str
|
|
501
|
+
performance_shares_number_level: str
|
|
502
|
+
performance_shares_level: str
|
|
483
503
|
policy_changed_midyear: bool | None
|
|
484
504
|
currency: str
|
|
485
505
|
field_sources: list[FieldSourcePayload]
|
|
@@ -617,6 +637,11 @@ class ComexCompensationExportItem(TypedDict, total=False):
|
|
|
617
637
|
reference_amount: str | None
|
|
618
638
|
lti_grant_cap_basis: str
|
|
619
639
|
lti_grant_cap_value: str | None
|
|
640
|
+
lti_grant_target_basis: str
|
|
641
|
+
lti_grant_target_value: str | None
|
|
642
|
+
lti_grant_cap_kind: str
|
|
643
|
+
performance_shares_number_level: str
|
|
644
|
+
performance_shares_level: str
|
|
620
645
|
policy_changed_midyear: bool | None
|
|
621
646
|
agm_date: str | None
|
|
622
647
|
criteria: list[ComexCompensationCriteria]
|
|
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
|