farm_fulfillment.mojo (1901B)
1 from hyf_core.domain.time import DateOnly 2 from hyf_core.normalization.dates import resolve_relative_expression 3 4 5 @fieldwise_init 6 struct FulfillmentClaim(Copyable, Movable): 7 var method: String 8 var window_expression: String 9 var resolved_date: String 10 var ambiguity: String 11 var area_verified: Bool 12 13 14 def _is_blank(value: String) -> Bool: 15 return String(value).strip().byte_length() == 0 16 17 18 def interpret_fulfillment( 19 method: String, 20 window_expression: String, 21 reference_date: DateOnly, 22 timezone: String, 23 ) raises -> FulfillmentClaim: 24 if _is_blank(method): 25 raise Error("fulfillment requires a method") 26 if _is_blank(window_expression): 27 return FulfillmentClaim( 28 method=String(method), 29 window_expression="", 30 resolved_date="", 31 ambiguity="none", 32 area_verified=False, 33 ) 34 if _is_blank(timezone): 35 return FulfillmentClaim( 36 method=String(method), 37 window_expression=String(window_expression), 38 resolved_date="", 39 ambiguity="missing_zone", 40 area_verified=False, 41 ) 42 var resolved = resolve_relative_expression( 43 window_expression, reference_date 44 ) 45 if resolved.resolution != "resolved": 46 return FulfillmentClaim( 47 method=String(method), 48 window_expression=String(window_expression), 49 resolved_date="", 50 ambiguity=String(resolved.ambiguity), 51 area_verified=False, 52 ) 53 var date = ( 54 String(resolved.date.year) 55 + "-" 56 + String(resolved.date.month) 57 + "-" 58 + String(resolved.date.day) 59 ) 60 return FulfillmentClaim( 61 method=String(method), 62 window_expression=String(window_expression), 63 resolved_date=date, 64 ambiguity="none", 65 area_verified=False, 66 )