hyf

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

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:
Asrc/hyf_application/buyer_normalization.mojo | 25+++++++++++++++++++++++++
Mtests/test_application.mojo | 19+++++++++++++++++++
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())