feat(pl): add plan contract gap side computation helpers

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-20 11:54:10 +08:00
1 parent 900fb20d50
commit a79e8a3e12
2 files changed
+68

No files matched your search

@@ -0,0 +1,24 @@
from __future__ import annotations
from typing import List, Optional
from app.services.pl_internal_customer import is_internal_customer_name
def compute_contract_gap_sides(
*,
supplier_name: Optional[str],
customer_name: Optional[str],
supplier_contract_count: int,
demander_contract_count: int,
) -> List[str]:
gaps: List[str] = []
if not is_internal_customer_name(supplier_name) and supplier_contract_count <= 0:
gaps.append("supplier")
if not is_internal_customer_name(customer_name) and demander_contract_count <= 0:
gaps.append("demander")
return gaps
def side_is_exempt(name: Optional[str]) -> bool:
return is_internal_customer_name(name)
@@ -0,0 +1,44 @@
from app.services.pl_internal_customer import INTERNAL_CUSTOMER_NAMES
from app.services.pl_plan_contract_gap import compute_contract_gap_sides
INTERNAL = next(iter(INTERNAL_CUSTOMER_NAMES))
def test_both_external_no_contracts_gaps_both():
sides = compute_contract_gap_sides(
supplier_name="外部供方A",
customer_name="外部需方B",
supplier_contract_count=0,
demander_contract_count=0,
)
assert sides == ["supplier", "demander"]
def test_internal_supplier_external_demander_missing_only_demander():
sides = compute_contract_gap_sides(
supplier_name=INTERNAL,
customer_name="外部需方B",
supplier_contract_count=0,
demander_contract_count=0,
)
assert sides == ["demander"]
def test_both_internal_no_gap():
sides = compute_contract_gap_sides(
supplier_name=INTERNAL,
customer_name=INTERNAL,
supplier_contract_count=0,
demander_contract_count=0,
)
assert sides == []
def test_external_with_contracts_no_gap():
sides = compute_contract_gap_sides(
supplier_name="外部供方A",
customer_name="外部需方B",
supplier_contract_count=1,
demander_contract_count=2,
)
assert sides == []