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"