hyf

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

supply_claim.mojo (1727B)


      1 from hyf_core.domain.product import ProductRef
      2 
      3 
      4 @fieldwise_init
      5 struct SupplyClaim(Copyable, Movable):
      6     var claim_id: String
      7     var product: ProductRef
      8     var status: String
      9     var quantity_state: String
     10     var quantity_value: Int
     11     var quantity_scale: Int
     12     var unit: String
     13     var qualifier: String
     14     var review_required: Bool
     15 
     16 
     17 def supply_claim(
     18     claim_id: String,
     19     product: ProductRef,
     20     status: String,
     21     quantity_state: String,
     22     quantity_value: Int,
     23     quantity_scale: Int,
     24     unit: String,
     25     qualifier: String,
     26 ) raises -> SupplyClaim:
     27     if claim_id.strip() == "":
     28         raise Error("claim id must not be empty")
     29     var allowed = [
     30         "offered",
     31         "forecast",
     32         "unavailable",
     33         "correction",
     34         "unclear",
     35     ]
     36     var known = False
     37     for candidate in allowed:
     38         if candidate == status:
     39             known = True
     40     if not known:
     41         raise Error("unknown supply status: " + status)
     42     if quantity_state != "known" and quantity_state != "unknown":
     43         raise Error("quantity state must be 'known' or 'unknown'")
     44     if quantity_scale < 0 or quantity_scale > 9:
     45         raise Error("quantity scale must be between 0 and 9")
     46     return SupplyClaim(
     47         claim_id=String(claim_id),
     48         product=product.copy(),
     49         status=String(status),
     50         quantity_state=String(quantity_state),
     51         quantity_value=quantity_value,
     52         quantity_scale=quantity_scale,
     53         unit=String(unit),
     54         qualifier=String(qualifier),
     55         review_required=True,
     56     )
     57 
     58 
     59 def claim_confirms_inventory(claim: SupplyClaim) -> Bool:
     60     return False
     61 
     62 
     63 def claim_is_forecast(claim: SupplyClaim) -> Bool:
     64     return claim.status == "forecast"