hyf

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

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     )