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