commit 9b47d5de2801761e0ea1547ca34d8a7c0a580a37
parent 5f0f5cae73c4a8226fc246a8b86adf92f1d3f5fc
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:51:17 +0000
core: normalize buyer quantity time and price conditions
Diffstat:
2 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/src/hyf_application/buyer_normalization.mojo b/src/hyf_application/buyer_normalization.mojo
@@ -0,0 +1,25 @@
+from hyf_core.domain.price import Price, known_price, unknown_price
+from hyf_core.domain.quantity import Quantity, new_quantity
+from hyf_core.domain.units import unit_dimension
+
+
+def normalize_buyer_quantity(
+ value: Int, scale: Int, unit: String, qualifier: String
+) raises -> Quantity:
+ return new_quantity(value, scale, unit, unit_dimension(unit), qualifier)
+
+
+def normalize_buyer_price(
+ amount: Int, scale: Int, currency: String, basis: String
+) raises -> Price:
+ if String(currency).strip().byte_length() == 0:
+ return unknown_price()
+ return known_price(amount, scale, currency, basis)
+
+
+def unknown_price_is_free() -> Bool:
+ return False
+
+
+def unsupported_conversion_is_zero() -> Bool:
+ return False
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.price import price_is_known
from hyf_core.domain.supply_change import ProposedSupplyChange
from hyf_core.domain.time import date_only
@@ -243,3 +244,21 @@ def test_buyer_condition_strength_and_negation() raises:
assert_equal(excluded.strength, "excluded")
assert_true(not delivery_exclusion_means_pickup())
assert_true(not missing_information_is_prohibition())
+
+
+from hyf_application.buyer_normalization import (
+ normalize_buyer_price,
+ normalize_buyer_quantity,
+ unknown_price_is_free,
+ unsupported_conversion_is_zero,
+)
+
+
+def test_buyer_quantity_and_price_normalization() raises:
+ var quantity = normalize_buyer_quantity(25, 0, "kg", "exact")
+ assert_equal(quantity.value, 25)
+ assert_equal(quantity.dimension, "mass")
+ var price = normalize_buyer_price(0, 2, "", "per_unit")
+ assert_true(not price_is_known(price))
+ assert_true(not unknown_price_is_free())
+ assert_true(not unsupported_conversion_is_zero())