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.
Files changed (90) hide show
  1. {boarddata-6.7.4 → boarddata-6.8.2}/PKG-INFO +1 -1
  2. {boarddata-6.7.4 → boarddata-6.8.2}/__init__.py +1 -1
  3. {boarddata-6.7.4 → boarddata-6.8.2}/_comex.py +79 -11
  4. {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/PKG-INFO +1 -1
  5. {boarddata-6.7.4 → boarddata-6.8.2}/pyproject.toml +1 -1
  6. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_comex.py +107 -0
  7. {boarddata-6.7.4 → boarddata-6.8.2}/types/comex.py +25 -0
  8. {boarddata-6.7.4 → boarddata-6.8.2}/CLAUDE.md +0 -0
  9. {boarddata-6.7.4 → boarddata-6.8.2}/README.md +0 -0
  10. {boarddata-6.7.4 → boarddata-6.8.2}/_assemblies.py +0 -0
  11. {boarddata-6.7.4 → boarddata-6.8.2}/_auditors.py +0 -0
  12. {boarddata-6.7.4 → boarddata-6.8.2}/_base.py +0 -0
  13. {boarddata-6.7.4 → boarddata-6.8.2}/_committees.py +0 -0
  14. {boarddata-6.7.4 → boarddata-6.8.2}/_companies.py +0 -0
  15. {boarddata-6.7.4 → boarddata-6.8.2}/_criteria.py +0 -0
  16. {boarddata-6.7.4 → boarddata-6.8.2}/_directors.py +0 -0
  17. {boarddata-6.7.4 → boarddata-6.8.2}/_documents.py +0 -0
  18. {boarddata-6.7.4 → boarddata-6.8.2}/_esg.py +0 -0
  19. {boarddata-6.7.4 → boarddata-6.8.2}/_indexes.py +0 -0
  20. {boarddata-6.7.4 → boarddata-6.8.2}/_persons.py +0 -0
  21. {boarddata-6.7.4 → boarddata-6.8.2}/_risks.py +0 -0
  22. {boarddata-6.7.4 → boarddata-6.8.2}/_sentinel.py +0 -0
  23. {boarddata-6.7.4 → boarddata-6.8.2}/_utilities.py +0 -0
  24. {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/SOURCES.txt +0 -0
  25. {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/dependency_links.txt +0 -0
  26. {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/requires.txt +0 -0
  27. {boarddata-6.7.4 → boarddata-6.8.2}/boarddata.egg-info/top_level.txt +0 -0
  28. {boarddata-6.7.4 → boarddata-6.8.2}/cache.py +0 -0
  29. {boarddata-6.7.4 → boarddata-6.8.2}/client.py +0 -0
  30. {boarddata-6.7.4 → boarddata-6.8.2}/dq/__init__.py +0 -0
  31. {boarddata-6.7.4 → boarddata-6.8.2}/dq/adjudicate.py +0 -0
  32. {boarddata-6.7.4 → boarddata-6.8.2}/dq/apply.py +0 -0
  33. {boarddata-6.7.4 → boarddata-6.8.2}/dq/context.py +0 -0
  34. {boarddata-6.7.4 → boarddata-6.8.2}/dq/db.py +0 -0
  35. {boarddata-6.7.4 → boarddata-6.8.2}/dq/domains.py +0 -0
  36. {boarddata-6.7.4 → boarddata-6.8.2}/dq/models.py +0 -0
  37. {boarddata-6.7.4 → boarddata-6.8.2}/dq/oracle.py +0 -0
  38. {boarddata-6.7.4 → boarddata-6.8.2}/dq/registry.py +0 -0
  39. {boarddata-6.7.4 → boarddata-6.8.2}/dq/report.py +0 -0
  40. {boarddata-6.7.4 → boarddata-6.8.2}/dq/rules/__init__.py +0 -0
  41. {boarddata-6.7.4 → boarddata-6.8.2}/dq/rules/cross_company.py +0 -0
  42. {boarddata-6.7.4 → boarddata-6.8.2}/dq/rules/lexical.py +0 -0
  43. {boarddata-6.7.4 → boarddata-6.8.2}/dq/s3.py +0 -0
  44. {boarddata-6.7.4 → boarddata-6.8.2}/dq/verify_s3.py +0 -0
  45. {boarddata-6.7.4 → boarddata-6.8.2}/errors.py +0 -0
  46. {boarddata-6.7.4 → boarddata-6.8.2}/py.typed +0 -0
  47. {boarddata-6.7.4 → boarddata-6.8.2}/scripts/__init__.py +0 -0
  48. {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_apply.py +0 -0
  49. {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_batch.py +0 -0
  50. {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_plan.py +0 -0
  51. {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_revert.py +0 -0
  52. {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_scan.py +0 -0
  53. {boarddata-6.7.4 → boarddata-6.8.2}/scripts/dq_verify_s3.py +0 -0
  54. {boarddata-6.7.4 → boarddata-6.8.2}/setup.cfg +0 -0
  55. {boarddata-6.7.4 → boarddata-6.8.2}/tests/__init__.py +0 -0
  56. {boarddata-6.7.4 → boarddata-6.8.2}/tests/conftest.py +0 -0
  57. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_assemblies.py +0 -0
  58. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_auditors.py +0 -0
  59. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_base.py +0 -0
  60. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_build_payload.py +0 -0
  61. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_cache.py +0 -0
  62. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_committees.py +0 -0
  63. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_companies.py +0 -0
  64. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_config.py +0 -0
  65. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_criteria.py +0 -0
  66. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_directors.py +0 -0
  67. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_documents.py +0 -0
  68. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_esg.py +0 -0
  69. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_exports.py +0 -0
  70. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_indexes.py +0 -0
  71. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_persons.py +0 -0
  72. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_politic_fixture_conformance.py +0 -0
  73. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_risks.py +0 -0
  74. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_sentinel.py +0 -0
  75. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_types_politic.py +0 -0
  76. {boarddata-6.7.4 → boarddata-6.8.2}/tests/test_utilities.py +0 -0
  77. {boarddata-6.7.4 → boarddata-6.8.2}/types/__init__.py +0 -0
  78. {boarddata-6.7.4 → boarddata-6.8.2}/types/assemblies.py +0 -0
  79. {boarddata-6.7.4 → boarddata-6.8.2}/types/auditors.py +0 -0
  80. {boarddata-6.7.4 → boarddata-6.8.2}/types/committees.py +0 -0
  81. {boarddata-6.7.4 → boarddata-6.8.2}/types/companies.py +0 -0
  82. {boarddata-6.7.4 → boarddata-6.8.2}/types/core.py +0 -0
  83. {boarddata-6.7.4 → boarddata-6.8.2}/types/criteria.py +0 -0
  84. {boarddata-6.7.4 → boarddata-6.8.2}/types/directors.py +0 -0
  85. {boarddata-6.7.4 → boarddata-6.8.2}/types/documents.py +0 -0
  86. {boarddata-6.7.4 → boarddata-6.8.2}/types/esg.py +0 -0
  87. {boarddata-6.7.4 → boarddata-6.8.2}/types/indexes.py +0 -0
  88. {boarddata-6.7.4 → boarddata-6.8.2}/types/persons.py +0 -0
  89. {boarddata-6.7.4 → boarddata-6.8.2}/types/risks.py +0 -0
  90. {boarddata-6.7.4 → boarddata-6.8.2}/types/sentinel.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boarddata
3
- Version: 6.7.4
3
+ Version: 6.8.2
4
4
  Summary: Python SDK for the BoardData V2 REST API
5
5
  License: MIT
6
6
  Classifier: Development Status :: 4 - Beta
@@ -6,7 +6,7 @@ from .cache import FileTokenCache, ScalewaySecretTokenCache
6
6
  from .client import BoardDataClient
7
7
  from .errors import BoardDataError, ExportTooLargeError
8
8
 
9
- __version__ = "6.7.4"
9
+ __version__ = "6.8.2"
10
10
  __all__ = [
11
11
  "Base",
12
12
  "BoardDataClient",
@@ -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 in EUR (decimal string; always €, never
419
- disclosed-basis — the disclosed-basis cap goes in
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 EUR (decimal string;
428
- ``sti_basis="pct_of_reference_amount"`` archetype).
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 in EUR (decimal string; always €, never
605
- disclosed-basis — the disclosed-basis cap goes in
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 EUR (decimal string;
614
- ``sti_basis="pct_of_reference_amount"`` archetype).
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 = {k: v for k, v in comp_fields.items() if v is not None}
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:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boarddata
3
- Version: 6.7.4
3
+ Version: 6.8.2
4
4
  Summary: Python SDK for the BoardData V2 REST API
5
5
  License: MIT
6
6
  Classifier: Development Status :: 4 - Beta
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "boarddata"
7
- version = "6.7.4"
7
+ version = "6.8.2"
8
8
  description = "Python SDK for the BoardData V2 REST API"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -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