{"id":"appointment-cutoffs-compute","version":"1.0.0","description":"Compute exact booking and cancellation cutoffs for an appointment from caller-supplied rules.","supported_operations":["compute appointment cutoffs","calculate booking open instant","calculate booking close instant","derive cancellation deadline","subtract booking horizon from appointment","appointment policy deadline timestamps"],"unsupported_operations":["apply jurisdictional cancellation law","send booking deadline reminders","perform generic date arithmetic"],"semantics":["Intervals are half-open [start,end); sorted by start epoch then end epoch.","Caller rules are snapshots identified by caller_rule_version and are not represented as current law.","Ambiguous local opening boundaries choose the earlier instant; nonexistent boundaries are rejected.","No host clock, locale, network, randomness, Intl, or host time zone is used."],"limits":{"max_input_bytes":65536,"max_blackouts":100,"max_opening_rules":14,"max_windows":1000},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["caller_rule_version","appointment_start","booking_notice_seconds","booking_horizon_seconds","cancellation_cutoff_seconds"],"properties":{"caller_rule_version":{"type":"string","minLength":1,"maxLength":64},"appointment_start":{"type":"string","minLength":20,"maxLength":30},"booking_notice_seconds":{"type":"integer","minimum":0,"maximum":31536000},"booking_horizon_seconds":{"type":"integer","minimum":0,"maximum":31536000},"cancellation_cutoff_seconds":{"type":"integer","minimum":0,"maximum":31536000}}},"output_schema":{"type":"object","additionalProperties":false,"required":["standard_version","data_version","caller_rule_version","appointment_start","appointment_epoch_seconds","booking_window_opens","booking_window_closes","cancellation_deadline"],"properties":{"standard_version":{"type":"string","const":"RFC3339+ISO8601-1:2019"},"data_version":{"type":"string","const":"iana-tzdb-2025b-compact"},"caller_rule_version":{"type":"string","minLength":1,"maxLength":64},"appointment_start":{"type":"string"},"appointment_epoch_seconds":{"type":"integer"},"booking_window_opens":{"type":"string"},"booking_window_closes":{"type":"string"},"cancellation_deadline":{"type":"string"}}},"examples":[{"input":{"caller_rule_version":"policy-v7","appointment_start":"2026-06-01T14:00:00Z","booking_notice_seconds":3600,"booking_horizon_seconds":86400,"cancellation_cutoff_seconds":7200},"output":{"standard_version":"RFC3339+ISO8601-1:2019","data_version":"iana-tzdb-2025b-compact","caller_rule_version":"policy-v7","appointment_start":"2026-06-01T14:00:00Z","appointment_epoch_seconds":1780322400,"booking_window_opens":"2026-05-31T14:00:00Z","booking_window_closes":"2026-06-01T13:00:00Z","cancellation_deadline":"2026-06-01T12:00:00Z"}},{"input":{"caller_rule_version":"policy-v7","appointment_start":"2026-06-01T14:00:00Z","booking_notice_seconds":0,"booking_horizon_seconds":86400,"cancellation_cutoff_seconds":7200},"output":{"standard_version":"RFC3339+ISO8601-1:2019","data_version":"iana-tzdb-2025b-compact","caller_rule_version":"policy-v7","appointment_start":"2026-06-01T14:00:00Z","appointment_epoch_seconds":1780322400,"booking_window_opens":"2026-05-31T14:00:00Z","booking_window_closes":"2026-06-01T14:00:00Z","cancellation_deadline":"2026-06-01T12:00:00Z"}}],"execute_url":"/v1/tools/appointment-cutoffs-compute/versions/1.0.0/execute"}