commit ec1d857aae82dba1d3964e8736d488202bbf3d1f
parent 980f239afbc2cc2986b7d391042ce5c6233e209d
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:48:42 +0000
core: interpret product-specific supply status
Diffstat:
2 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/src/hyf_application/farm_status.mojo b/src/hyf_application/farm_status.mojo
@@ -0,0 +1,39 @@
+from std.collections import List
+
+
+@fieldwise_init
+struct ProductStatus(Copyable, Movable):
+ var product_phrase: String
+ var status: String
+ var review_required: Bool
+
+
+def interpret_product_statuses(
+ products: List[String], evaluator_status: String
+) raises -> List[ProductStatus]:
+ var allowed = ["offered", "forecast", "unavailable", "correction", "unclear"]
+ var status = String(evaluator_status)
+ var known = False
+ for candidate in allowed:
+ if candidate == status:
+ known = True
+ if not known:
+ status = "unclear"
+ var results = List[ProductStatus]()
+ for product in products:
+ results.append(
+ ProductStatus(
+ product_phrase=String(product),
+ status=String(status),
+ review_required=True,
+ )
+ )
+ return results^
+
+
+def status_is_confirmed_inventory(status: String) -> Bool:
+ return False
+
+
+def status_is_forecast(status: String) -> Bool:
+ return status == "forecast"
diff --git a/tests/test_application.mojo b/tests/test_application.mojo
@@ -40,3 +40,25 @@ def test_interpretation_source_context_validation() raises:
_ = interpretation_source("", "r1", "x", "t", "z", "a", "f")
with assert_raises():
_ = interpretation_source("s", "r1", "x", "t", "", "a", "f")
+
+
+from hyf_application.farm_status import (
+ interpret_product_statuses,
+ status_is_confirmed_inventory,
+ status_is_forecast,
+)
+
+
+def test_product_specific_supply_status_per_crop() raises:
+ var products = List[String]()
+ products.append("roma tomatoes")
+ products.append("basil")
+ var statuses = interpret_product_statuses(products, "offered")
+ assert_equal(len(statuses), 2)
+ assert_equal(statuses[0].product_phrase, "roma tomatoes")
+ assert_equal(statuses[1].product_phrase, "basil")
+ assert_true(not status_is_confirmed_inventory(statuses[0].status))
+ var forecast = interpret_product_statuses(products, "forecast")
+ assert_true(status_is_forecast(forecast[0].status))
+ var unknown = interpret_product_statuses(products, "probably")
+ assert_equal(unknown[0].status, "unclear")