← Files VeraARCHIVED FILE
modules/adeguati-assetti/scripts/construction_adapters.py
12.3 KB · Oct 2, 2026 · 00:29 UTC
"""Typed strategy and artifact links; financial engines remain in their workflows."""
from __future__ import annotations
from decimal import Decimal, InvalidOperation
from typing import cast
from construction_core import _attestation, _put, digest, fields, refs, require, text
__all__ = ["apply_typed_record", "budget_rows", "kpi_value", "validate_plan_binding"]
def decimal_value(value: str) -> Decimal:
"""Accept finite decimal strings only; missing data never becomes zero."""
require(isinstance(value, str), "Amount must be decimal text")
try:
result = Decimal(value)
except InvalidOperation as error:
raise ValueError("Invalid decimal amount") from error
require(result.is_finite(), "Amount must be finite")
return result
def kpi_value(contract: dict, observation: dict) -> dict:
"""Evaluate a chosen value or ratio, never a semantic or adequacy threshold."""
if contract["operation"] == "value":
value = observation.get("value")
if value is None:
fields(observation, "missing_reason")
return {"value": None, "reason": observation["missing_reason"]}
return {"value": str(decimal_value(value)), "reason": None}
numerator, denominator = observation.get("numerator"), observation.get(
"denominator"
)
if numerator is None or denominator is None:
fields(observation, "missing_reason")
return {"value": None, "reason": observation["missing_reason"]}
denominator_value = decimal_value(denominator)
if denominator_value == 0:
return {
"value": None,
"reason": "Denominatore nullo; indicatore non calcolabile",
}
scale = Decimal(100) if contract["operation"] == "percent" else Decimal(1)
return {
"value": str(scale * decimal_value(numerator) / denominator_value),
"reason": None,
}
def validate_plan_binding(plan: dict, binding: dict) -> None:
"""Verify exact v3 artifact/scenario/cycle lineage without recalculating a plan."""
require(
plan.get("schema_version") == "mparanza.business_planning_plan.v3",
"Unsupported Business Planning contract",
)
require(
plan.get("content_sha256")
== digest({k: v for k, v in plan.items() if k != "content_sha256"}),
"Business Plan digest mismatch",
)
case = plan["case"]
require(plan["case_sha256"] == digest(case), "Business Plan case digest mismatch")
require(
plan["calculations_sha256"] == digest(plan["calculations"]),
"Business Plan calculation digest mismatch",
)
require(binding.get("case_id") == case["case_id"], "Wrong Business Plan case")
require(binding.get("cycle") == case["cycle"], "Wrong Business Plan cycle")
require(
binding.get("currency") == case["reporting_currency"],
"Wrong Business Plan currency",
)
require(binding.get("periods") == case["periods"], "Wrong Business Plan periods")
scenarios = (
case.get("financial", {}).get("scenarios", []) if case.get("financial") else []
)
require(
binding.get("scenario_id") in {r["id"] for r in scenarios},
"Unknown Business Plan scenario",
)
require(
plan["status"] == "ready_for_professional_review",
"Business Plan is partial or blocked",
)
require(
binding.get("review_status") == "reviewed",
"Plan binding requires explicit professional review",
)
fields(binding, "reviewer", "review_statement", "limitations")
def budget_rows(plan: dict, binding: dict, mapping: dict) -> list[dict]:
"""Map reviewed calculation IDs; exact totals, periods and signs are mandatory."""
validate_plan_binding(plan, binding)
require(
mapping.get("plan_sha256") == plan["content_sha256"],
"Mapping refers to another plan",
)
require(
mapping.get("scenario") in {"Budget", "Forecast"},
"Select Budget or Forecast explicitly",
)
fields(mapping, "reviewer", "decision", "mapping_version")
rows = mapping.get("rows")
require(isinstance(rows, list) and bool(rows), "No reviewed mapping rows")
rows = cast(list[dict], rows)
output, seen = [], set()
totals: dict[str, Decimal] = {}
for row in rows:
cid = row.get("calculation_id")
require(
cid in plan["calculations"] and cid not in seen,
"Unknown or duplicate calculation ID",
)
seen.add(cid)
calc = plan["calculations"][cid]
require(calc["scenario"] == binding["scenario_id"], "Wrong mapped scenario")
require(calc["period"] in binding["periods"], "Wrong mapped period")
require(
calc.get("unit") == binding["currency"],
"Nonmonetary calculation cannot become a Budget amount",
)
require(
type(row.get("sign")) is int and row["sign"] in {-1, 1},
"Explicit sign mapping required",
)
fields(row, "account_id", "category")
amount = decimal_value(calc["value"]) * row["sign"]
key = calc["period"] + "/" + row["category"]
totals[key] = totals.get(key, Decimal(0)) + amount
output.append(
{
"period": calc["period"],
"scenario": mapping["scenario"],
"account_id": row["account_id"],
"category": row["category"],
"amount": str(amount),
"calculation_id": cid,
"plan_sha256": plan["content_sha256"],
"mapping_version": mapping["mapping_version"],
}
)
expected = mapping.get("control_totals")
require(
isinstance(expected, dict) and set(expected) == set(totals),
"Missing mapping control totals",
)
expected = cast(dict, expected)
require(
all(decimal_value(expected[k]) == v for k, v in totals.items()),
"Budget mapping does not reconcile",
)
return output
def apply_typed_record(state: dict, kind: str, p: dict, *, actor: str, at: str) -> None:
"""Validate explicit model-authored contracts; never execute imported formula text."""
immutable = False
if kind == "objective":
fields(p, "description", "perspective", "owner", "scope", "period")
require(
p.get("owner_status") in {"proposed", "confirmed"},
"Objective owner status required",
)
refs(p.get("evidence_refs"), state["evidence"], "objective sources")
collection = "objectives"
elif kind == "strategy_link":
require(
p.get("from_id") in state["objectives"]
and p.get("to_id") in state["objectives"],
"Unknown strategy objective",
)
fields(p, "hypothesis", "limitations")
require(
p.get("status") in {"to_test", "supported", "contested"},
"Invalid strategy link state",
)
refs(
p.get("evidence_refs", []),
state["evidence"],
"strategy evidence",
empty=p["status"] == "to_test",
)
collection = "strategy_links"
elif kind == "kpi":
require(p.get("objective_id") in state["objectives"], "KPI needs an objective")
fields(
p,
"definition",
"formula",
"formula_version",
"unit",
"population",
"data_owner",
"frequency",
"period",
"cutoff",
"null_policy",
"direction",
)
require(
p.get("operation") in {"value", "ratio", "percent"},
"Unsupported KPI arithmetic; formula text is never executed",
)
refs(p.get("evidence_refs"), state["evidence"], "KPI sources")
require(
p.get("target_status") in {"unknown", "proposed", "accepted"},
"Invalid target state",
)
if p["target_status"] == "accepted":
_attestation(state, p)
require(p.get("target") is not None, "Accepted target cannot be unknown")
previous = state["kpis"].get(p.get("id"))
if previous and any(
previous[f] != p[f] for f in ("formula", "population", "operation", "unit")
):
require(
previous["formula_version"] != p["formula_version"],
"Formula/population change needs a new series version",
)
collection = "kpis"
elif kind == "kpi_observation":
kid = p.get("kpi_id")
require(kid in state["kpis"], "Unknown KPI")
contract = state["kpis"][kid]
require(
p.get("contract_sha256") == digest(contract),
"KPI observation has a stale definition",
)
fields(p, "period", "population", "coverage", "available_at", "review_status")
refs(p.get("evidence_refs"), state["evidence"], "KPI observation sources")
p["result"] = kpi_value(contract, p)
p["contract"] = contract.copy()
p["target_status"] = contract["target_status"]
collection, immutable = "kpi_observations", True
elif kind == "strategy_review":
refs(
p.get("observation_ids"),
state["kpi_observations"],
"strategy review observations",
)
fields(p, "explanations", "hypotheses", "decision", "next_review")
refs(
p.get("action_ids", []),
state["actions"],
"strategy review actions",
empty=True,
)
_attestation(state, p)
collection, immutable = "strategy_reviews", True
elif kind == "artifact":
fields(
p,
"workflow_id",
"module_version",
"run_id",
"artifact_id",
"source_id",
"sha256",
"scope",
"currency",
"review_status",
"limitations",
)
require(
p.get("client_id") == state["client_id"]
and p.get("engagement_id") == state["engagement_id"],
"Artifact belongs to another client or engagement",
)
require(
p.get("source_id") in state["evidence"],
"Artifact needs exact imported evidence",
)
require(
p["sha256"] == state["evidence"][p["source_id"]]["sha256"],
"Artifact source hash mismatch",
)
require(
p.get("review_status") in {"draft", "reviewed"},
"Invalid artifact review status",
)
require(
isinstance(p.get("periods"), list)
and bool(p["periods"])
and all(isinstance(x, str) and x.strip() for x in p["periods"]),
"Artifact periods are required",
)
require(
p.get("adapter_status")
in {"reviewed_external", "native_contract_verified"},
"Declare adapter capability",
)
if p["review_status"] == "reviewed":
fields(p, "reviewer", "review_statement")
if (
p["workflow_id"] == "business-planning"
and p["adapter_status"] == "native_contract_verified"
):
validate_plan_binding(p.get("document", {}), p)
elif p["adapter_status"] == "native_contract_verified":
raise ValueError(
"Adapter not qualified; use a reviewed external artifact with explicit limits"
)
collection = "artifacts"
else:
legacy = p.get("record", {})
require(
legacy.get("schema_version") == 1
and legacy.get("workflow_id") == "adeguati-assetti",
"Expected historical v1 review",
)
require(
legacy.get("client_id") == state["client_id"]
and legacy.get("engagement_id") == state["engagement_id"],
"Legacy review belongs to another client or engagement",
)
require(
legacy.get("record_sha256")
== digest({k: v for k, v in legacy.items() if k != "record_sha256"}),
"Historical review digest mismatch",
)
refs(p.get("evidence_refs"), state["evidence"], "legacy review evidence")
p["migration_limit"] = (
"Original v1 preserved. Missing scores stay unknown; historical completed actions do not establish adoption or operation."
)
collection, immutable = "legacy_reviews", True
_put(state, collection, p, actor, at, immutable=immutable)
SHA-256: 4e81f4714c19755c1cddd3e46324499552e37563a21fb4f5d63b23d58b2b17e2