hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

commit 477eecef030599ee7ff472e872989589a4ef1438
parent cbf065a38519ccbf2f03f1af804c56fb9652967f
Author: triesap <tyson@radroots.org>
Date:   Mon, 21 Sep 2026 13:49:37 +0000

core: interpret farm fulfillment and timing claims

Diffstat:
Asrc/hyf_application/farm_fulfillment.mojo | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtests/test_application.mojo | 16++++++++++++++++
2 files changed, 69 insertions(+), 0 deletions(-)

diff --git a/src/hyf_application/farm_fulfillment.mojo b/src/hyf_application/farm_fulfillment.mojo @@ -0,0 +1,53 @@ +from hyf_core.domain.time import DateOnly +from hyf_core.normalization.dates import resolve_relative_expression + + +@fieldwise_init +struct FulfillmentClaim(Copyable, Movable): + var method: String + var window_expression: String + var resolved_date: String + var ambiguity: String + var area_verified: Bool + + +def _is_blank(value: String) -> Bool: + return String(value).strip().byte_length() == 0 + + +def interpret_fulfillment( + method: String, + window_expression: String, + reference_date: DateOnly, + timezone: String, +) raises -> FulfillmentClaim: + if _is_blank(method): + raise Error("fulfillment requires a method") + if _is_blank(window_expression): + return FulfillmentClaim( + method=String(method), window_expression="", resolved_date="", + ambiguity="none", area_verified=False, + ) + if _is_blank(timezone): + return FulfillmentClaim( + method=String(method), window_expression=String(window_expression), + resolved_date="", ambiguity="missing_zone", area_verified=False, + ) + var resolved = resolve_relative_expression(window_expression, reference_date) + if resolved.resolution != "resolved": + return FulfillmentClaim( + method=String(method), window_expression=String(window_expression), + resolved_date="", ambiguity=String(resolved.ambiguity), + area_verified=False, + ) + var date = ( + String(resolved.date.year) + + "-" + + String(resolved.date.month) + + "-" + + String(resolved.date.day) + ) + return FulfillmentClaim( + method=String(method), window_expression=String(window_expression), + resolved_date=date, ambiguity="none", area_verified=False, + ) diff --git a/tests/test_application.mojo b/tests/test_application.mojo @@ -119,3 +119,19 @@ def test_authorized_change_target_resolution() raises: assert_true(unauthorized.unresolved) var ambiguous = resolve_change_target("withdrawal", None, authorized) assert_equal(ambiguous.operation, "unresolved") + + +from hyf_application.farm_fulfillment import interpret_fulfillment +from hyf_core.domain.time import date_only + + +def test_farm_fulfillment_and_timing_claims() raises: + var monday = date_only(2026, 9, 21) + var delivery = interpret_fulfillment("delivery", "Friday", monday, "America/Vancouver") + assert_equal(delivery.resolved_date, "2026-9-25") + assert_equal(delivery.ambiguity, "none") + assert_true(not delivery.area_verified) + var no_zone = interpret_fulfillment("delivery", "Friday", monday, "") + assert_equal(no_zone.ambiguity, "missing_zone") + var none = interpret_fulfillment("pickup", "", monday, "America/Vancouver") + assert_equal(none.window_expression, "")