commit ac1cf12676d27b44565b574244c60d119c098026
parent 477eecef030599ee7ff472e872989589a4ef1438
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:49:51 +0000
core: assemble farm review and clarification output
Diffstat:
2 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/src/hyf_application/farm_review_output.mojo b/src/hyf_application/farm_review_output.mojo
@@ -0,0 +1,46 @@
+from std.collections import List
+
+from hyf_application.farm_status import ProductStatus
+from hyf_core.domain.execution import ExecutionMeta
+from hyf_core.domain.review import ReviewState
+from hyf_core.domain.supply_change import ProposedSupplyChange
+
+
+@fieldwise_init
+struct FarmInterpretationOutput(Copyable, Movable):
+ var claims: List[ProductStatus]
+ var changes: List[ProposedSupplyChange]
+ var review: ReviewState
+ var execution: ExecutionMeta
+ var original_source_preserved: Bool
+ var hyf_business_writes: Int
+
+
+def assemble_farm_output(
+ claims: List[ProductStatus],
+ changes: List[ProposedSupplyChange],
+ review: ReviewState,
+ execution: ExecutionMeta,
+) raises -> FarmInterpretationOutput:
+ var copied_claims = List[ProductStatus]()
+ for claim in claims:
+ copied_claims.append(claim.copy())
+ var copied_changes = List[ProposedSupplyChange]()
+ for change in changes:
+ copied_changes.append(change.copy())
+ return FarmInterpretationOutput(
+ claims=copied_claims^,
+ changes=copied_changes^,
+ review=review.copy(),
+ execution=execution.copy(),
+ original_source_preserved=True,
+ hyf_business_writes=0,
+ )
+
+
+def missing_optional_price_blocks_draft() -> Bool:
+ return False
+
+
+def ambiguous_withdrawal_blocks_apply() -> Bool:
+ return True
diff --git a/tests/test_application.mojo b/tests/test_application.mojo
@@ -122,6 +122,7 @@ def test_authorized_change_target_resolution() raises:
from hyf_application.farm_fulfillment import interpret_fulfillment
+from hyf_core.domain.supply_change import ProposedSupplyChange
from hyf_core.domain.time import date_only
@@ -135,3 +136,28 @@ def test_farm_fulfillment_and_timing_claims() raises:
assert_equal(no_zone.ambiguity, "missing_zone")
var none = interpret_fulfillment("pickup", "", monday, "America/Vancouver")
assert_equal(none.window_expression, "")
+
+
+from hyf_application.farm_review_output import (
+ ambiguous_withdrawal_blocks_apply,
+ assemble_farm_output,
+ missing_optional_price_blocks_draft,
+)
+from hyf_core.domain.execution import execution_meta
+from hyf_core.domain.review import review_required
+
+
+def test_farm_review_output_is_proposal_only() raises:
+ var products = List[String]()
+ products.append("roma tomatoes")
+ var statuses = interpret_product_statuses(products, "offered")
+ var changes = List[ProposedSupplyChange]()
+ var review = review_required("withdrawal.target", "ambiguous_target")
+ var execution = execution_meta("complete", 0, None, None, None)
+ var output = assemble_farm_output(statuses, changes, review, execution)
+ assert_equal(len(output.claims), 1)
+ assert_true(output.review.required)
+ assert_true(output.original_source_preserved)
+ assert_equal(output.hyf_business_writes, 0)
+ assert_true(not missing_optional_price_blocks_draft())
+ assert_true(ambiguous_withdrawal_blocks_apply())