Set an execution window from an event
Intention
Section titled “Intention”I want to count two business days from the date a request was received.
Incorrect form and why it stays silent
Section titled “Incorrect form and why it stays silent”The unit is part of the norm, and the chosen policy is a required case input. An incomplete declaration is rejected:
deadline policy Days { start_count next_day; include_end true; }Even with a complete declaration, the absence of a deadline_policy choice in the case does not mean an automatic choice.
Correct form
Section titled “Correct form”language "law.core" version "0.2";package recipes.e.r01 version "0.1.0";namespace "urn:recipe:e-time:01";
entity Person;relation registered(p: Person);source SyntheticCalendar { kind standard; jurisdiction "none"; number "E-CALENDAR"; }calendar Calendar { timezone "Asia/Almaty"; timezone_db "iana-tzdb@2026a"; period [@2024-01-01, @2028-01-01); source SyntheticCalendar; resource "resources/calendar-2024-2027.json"; format "law.calendar/0.1"; content_hash "sha256:dfd0181e1347cc2fd48b5fd81d27f3551cabae10eaefbf8b4dffb70bcbb3cd12";}deadline policy Days { start_count next_day; include_end true; roll next_working_day;}relation received(p: Person, on: Date);relation submitted(p: Person);rule Reply strict { for p: Person; for on: Date; when received(p, on); then duty File { bearer p; goal achievement { condition submitted(p); window [on, add_business_days(on, 2 business_day)]; } };}Frozen execution scene
Section titled “Frozen execution scene”| Facts / cut | Question | Answer |
|---|---|---|
| received 06.03, cut 11.03 | File | ACTIVE |
| received 06.03, cut 12.03, no performance facts | File | UNDETERMINED |
| same, not submitted | File | VIOLATED |
| same, submitted | File | SATISFIED |
| policy not chosen | positions | NON_EXECUTABLE, MISSING_POLICY |
deadline includes window end day
test "deadline includes window end day" { given { context { legal_time @2026-03-11; decision_time @2026-03-11T12:00:00+05:00; knowledge_time @2027-12-31T09:00:00+05:00; timezone "Asia/Almaty"; deadline_policy Days; } assert received(entity_ref("urn:recipe:e-time:01:a"), @2026-03-06); } evaluate positions(); expect position(File, ACTIVE);}expired deadline without input
test "expired deadline without input" { given { context { legal_time @2026-03-12; decision_time @2026-03-12T09:00:00+05:00; knowledge_time @2027-12-31T09:00:00+05:00; timezone "Asia/Almaty"; deadline_policy Days; } assert received(entity_ref("urn:recipe:e-time:01:a"), @2026-03-06); } evaluate positions(); expect position(File, UNDETERMINED);}established non-performance violates
test "established non-performance violates" { given { context { legal_time @2026-03-12; decision_time @2026-03-12T09:00:00+05:00; knowledge_time @2027-12-31T09:00:00+05:00; timezone "Asia/Almaty"; deadline_policy Days; } assert received(entity_ref("urn:recipe:e-time:01:a"), @2026-03-06); assert not submitted(entity_ref("urn:recipe:e-time:01:a")); } evaluate positions(); expect position(File, VIOLATED);}established performance satisfies
test "established performance satisfies" { given { context { legal_time @2026-03-12; decision_time @2026-03-12T09:00:00+05:00; knowledge_time @2027-12-31T09:00:00+05:00; timezone "Asia/Almaty"; deadline_policy Days; } assert received(entity_ref("urn:recipe:e-time:01:a"), @2026-03-06); assert submitted(entity_ref("urn:recipe:e-time:01:a")); } evaluate positions(); expect position(File, SATISFIED);}missing policy refuses positions
test "missing policy refuses positions" { given { context { legal_time @2026-03-10; decision_time @2026-03-10T09:00:00+05:00; knowledge_time @2027-12-31T09:00:00+05:00; timezone "Asia/Almaty"; } assert received(entity_ref("urn:recipe:e-time:01:a"), @2026-03-06); } evaluate positions(); expect evaluation_status == NON_EXECUTABLE; expect issue(MISSING_POLICY);}The calendar is synthetic: Mon–Fri, 9 March 2026 is a conventional non-working day; this is not an official calendar.
Counterfactual
Section titled “Counterfactual”teaches removes roll from Days and requires E1307. The scene without deadline_policy pins a separate runtime rejection; expiry of the term without a negative fact is not declared a violation. check by itself does not guarantee correctness of arbitrary window-boundary arithmetic.
Boundary
Section titled “Boundary”The event here is presented as a date in received. For an event instance with activation by a carrier, see Present an event with a time; no instant inside the day is chosen. The units business_day and calendar_day are not interchangeable.
Pitfall
Section titled “Pitfall”A window from a term is executable; after the cutoff without facts the status is UNDETERMINED, with explicit non-filing VIOLATED. The as-of moment for statuses is the decision time, so every scene names its decision date explicitly; the law date only selects the law.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.