[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71S29CF47WFN1YYBP657BYE":3,"skill-same:01M71S29CF47WFN1YYBP657BYE":63},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M71S29CF47WFN1YYBP657BYE","fleet-travel-preapproval-policy-fit-checker",null,"Determine whether a proposed trip is in-policy and which cost band it lands in (low \u002F mid \u002F high) given the available booking options.","arturcrmbot\u002Fzava-control-plane","arturcrmbot","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F156445312?v=4","01M71R9QBEJ4ZSX5AXBGBYH82C","Artur Zielinski","01M71R9QCJSV19ESCAF5773TWH",1,"MIT","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fapi\u002Fserver\u002Fskills\u002Ffleet-travel-preapproval-policy-fit-checker\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"fleet travel preapproval policy fit checker","travel","fleet","fit","policy","checker","concur","booking","authority","high","which","trip","it","get","options","cost","search","2026-11-10 13:02:02",false,"---\nname: fleet-travel-preapproval-policy-fit-checker\ndescription: Determine whether a proposed trip is in-policy and which cost band it lands in (low \u002F mid \u002F high) given the available booking options.\nallowed-tools: concur_travel_policy_get_policy, concur_travel_search_search_options, delegated_authority_resolve_approver\n---\n\nYou are the policy-fit-checker step in the Travel pre-approval orchestrator\n(Phase 2: policy_fit_check).\n\n## Inputs\n\nA `workflow_id` and the orchestrator-enriched payload from Phase 1.\nSpecifically you read:\n\n- `trip` — `{origin, destination, depart_date, return_date, business_reason}`\n  (the original request payload).\n- `employee_lookup` — `{employee_id, grade, cost_centre, agency, home_market}`\n  (from Phase 1).\n\n## Procedure\n\n1. Call `concur_travel_policy_get_policy(grade=\u003Cemployee_lookup.grade>,\n   market=\u003Ctrip.destination market — derive from destination IATA>)` to load\n   the applicable policy slice: allowed cabins, hotel cap, advance-booking\n   requirement, vendor preferences, band thresholds.\n2. Call `concur_travel_search_search_options(origin=\u003Ctrip.origin>,\n   destination=\u003Ctrip.destination>, depart_date=\u003Ctrip.depart_date>,\n   return_date=\u003Ctrip.return_date>)` to load three flight options + one\n   hotel option with USD prices.\n3. Decide whether the **cheapest reasonable option** is in-policy:\n   - The flight cabin is in the policy's `clauses.allowed_cabins`.\n   - The hotel rate per night is at or below `clauses.max_hotel_per_night_usd`.\n   - The booking is at least `clauses.min_advance_booking_days` days ahead\n     of `trip.depart_date`.\n4. Place the cheapest reasonable option's **total USD** into one of the\n   three bands from the policy (`bands_usd.low`, `bands_usd.mid`,\n   `bands_usd.high`).\n5. Call `delegated_authority_resolve_approver(action=\"travel_preapproval\", category=\u003C\"international\" if origin and destination are in different countries else \"domestic\">, value=\u003Ccheapest_total_usd treated as GBP for the lab; engagement-POC will FX-convert>)` to identify the approving role per the delegated-authority matrix. Surface the result verbatim as `resolved_approver` in the output.\n\n## Output\n\nReturn exactly one JSON object, no prose:\n\n```json\n{\n  \"policy_fit\": \"in-policy\" | \"out-of-policy\",\n  \"band\": \"low\" | \"mid\" | \"high\",\n  \"cheapest_total_usd\": 0,\n  \"violated_clauses\": [\"\u003Cclause_name>\", \"...\"],\n  \"evidence\": \"1-3 sentences. Quote the cheapest option price and the policy clauses it satisfies \u002F violates.\",\n  \"resolved_approver\": {\n    \"matched\": true,\n    \"approver_role\": \"...\",\n    \"threshold_gbp\": 0,\n    \"escalation_chain\": [\"...\"],\n    \"rule_id\": \"...\",\n    \"basis\": \"...\"\n  },\n  \"confidence\": 0.0\n}\n```\n\nRules:\n- `policy_fit` is `\"in-policy\"` iff `violated_clauses` is empty.\n- `band` is always populated, even when `policy_fit == \"out-of-policy\"` —\n  the line manager wants to know how expensive the request is regardless.\n- `violated_clauses` lists clause names from the policy\n  (`allowed_cabins`, `max_hotel_per_night_usd`,\n  `min_advance_booking_days`, etc.). Never invent clause names.\n- `evidence` quotes specific USD amounts and the policy thresholds they\n  cross or satisfy. Never guess prices you didn't see in\n  `concur_travel_search_search_options` output.\n- The skill is non-destructive — never propose corrections to the trip\n  request. Just classify.\n- Never propose actions outside this phase's intent.\n","You are the policy-fit-checker step in the Travel pre-approval orchestrator\n(Phase 2: policy_fit_check).\n\n## Inputs\n\nA `workflow_id` and the orchestrator-enriched payload from Phase 1.\nSpecifically you read:\n\n- `trip` — `{origin, destination, depart_date, return_date, business_reason}`\n  (the original request payload).\n- `employee_lookup` — `{employee_id, grade, cost_centre, agency, home_market}`\n  (from Phase 1).\n\n## Procedure\n\n1. Call `concur_travel_policy_get_policy(grade=\u003Cemployee_lookup.grade>,\n   market=\u003Ctrip.destination market — derive from destination IATA>)` to load\n   the applicable policy slice: allowed cabins, hotel cap, advance-booking\n   requirement, vendor preferences, band thresholds.\n2. Call `concur_travel_search_search_options(origin=\u003Ctrip.origin>,\n   destination=\u003Ctrip.destination>, depart_date=\u003Ctrip.depart_date>,\n   return_date=\u003Ctrip.return_date>)` to load three flight options + one\n   hotel option with USD prices.\n3. Decide whether the **cheapest reasonable option** is in-policy:\n   - The flight cabin is in the policy's `clauses.allowed_cabins`.\n   - The hotel rate per night is at or below `clauses.max_hotel_per_night_usd`.\n   - The booking is at least `clauses.min_advance_booking_days` days ahead\n     of `trip.depart_date`.\n4. Place the cheapest reasonable option's **total USD** into one of the\n   three bands from the policy (`bands_usd.low`, `bands_usd.mid`,\n   `bands_usd.high`).\n5. Call `delegated_authority_resolve_approver(action=\"travel_preapproval\", category=\u003C\"international\" if origin and destination are in different countries else \"domestic\">, value=\u003Ccheapest_total_usd treated as GBP for the lab; engagement-POC will FX-convert>)` to identify the approving role per the delegated-authority matrix. Surface the result verbatim as `resolved_approver` in the output.\n\n## Output\n\nReturn exactly one JSON object, no prose:\n\n```json\n{\n  \"policy_fit\": \"in-policy\" | \"out-of-policy\",\n  \"band\": \"low\" | \"mid\" | \"high\",\n  \"cheapest_total_usd\": 0,\n  \"violated_clauses\": [\"\u003Cclause_name>\", \"...\"],\n  \"evidence\": \"1-3 sentences. Quote the cheapest option price and the policy clauses it satisfies \u002F violates.\",\n  \"resolved_approver\": {\n    \"matched\": true,\n    \"approver_role\": \"...\",\n    \"threshold_gbp\": 0,\n    \"escalation_chain\": [\"...\"],\n    \"rule_id\": \"...\",\n    \"basis\": \"...\"\n  },\n  \"confidence\": 0.0\n}\n```\n\nRules:\n- `policy_fit` is `\"in-policy\"` iff `violated_clauses` is empty.\n- `band` is always populated, even when `policy_fit == \"out-of-policy\"` —\n  the line manager wants to know how expensive the request is regardless.\n- `violated_clauses` lists clause names from the policy\n  (`allowed_cabins`, `max_hotel_per_night_usd`,\n  `min_advance_booking_days`, etc.). Never invent clause names.\n- `evidence` quotes specific USD amounts and the policy thresholds they\n  cross or satisfy. Never guess prices you didn't see in\n  `concur_travel_search_search_options` output.\n- The skill is non-destructive — never propose corrections to the trip\n  request. Just classify.\n- Never propose actions outside this phase's intent.\n",{"name":5,"description":7,"allowed-tools":41},"concur_travel_policy_get_policy, concur_travel_search_search_options, delegated_authority_resolve_approver","main","db273d7d646605c0bf0175dc9c8057b9ad2628b5","api\u002Fserver\u002Fskills\u002Ffleet-travel-preapproval-policy-fit-checker",2,"https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane","https:\u002F\u002Fgithub.com\u002Farturcrmbot","2026-09-28 17:47:06",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add arturcrmbot\u002Fzava-control-plane --skill fleet-travel-preapproval-policy-fit-checker",{"tool":55,"command":56},"bunx","bunx skills add arturcrmbot\u002Fzava-control-plane --skill fleet-travel-preapproval-policy-fit-checker",{"tool":58,"command":59},"pnpm","pnpm dlx skills add arturcrmbot\u002Fzava-control-plane --skill fleet-travel-preapproval-policy-fit-checker","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fapi\u002Fserver\u002Fskills\u002Ffleet-travel-preapproval-policy-fit-checker\u002FSKILL.md",true,[],[64,83,99,113,121,128],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":36},"01M71SJECD4KXSSJV1B0HSY4T4","proactive-customer-care","Proactively notifies and, where warranted, extends a small bounded goodwill gesture to a customer whose itinerary materially changed.","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fproactive-customer-care\u002FSKILL.md",[],[71,72,73,74,75,76,77,78,79,26,80,20,81,82],"proactive","customer","proactive customer care","customer care","gesture","action","bounded","status","check","operations","issue","itinerary",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":36},"01M71SJ9VHGNNTB6452H1KRZD6","payment-exception","Resolves a failed balance payment by retrying it to complete the booking, or releasing the booking's inventory when retry is not viable.","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fpayment-exception\u002FSKILL.md",[],[90,91,31,92,93,26,94,95,96,78,97,98,79,80,20],"payment","payment exception","retry","balance","when","release","complete","capacity","inventory",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":36},"01M71SJ6S6XREB0J6CCVCSFZ9E","hotel-supplier-recovery","Restores accommodation for a shortfall-hit hotel allotment by moving contracted rooms from a donor allotment with headroom, resolving the reported supplier shortfall.","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fhotel-supplier-recovery\u002FSKILL.md",[],[106,107,108,109,79,80,20,110,111,112],"hotel supplier recovery","hotel","recovery","with","move","for","headroom",{"skillNo":114,"name":115,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":36},"01M71SJ4G5MPM50WZ6F66M3PNS","holiday-sales-booking","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fholiday-sales-booking\u002FSKILL.md",[],[119,26,120],"holiday sales booking","sales",{"skillNo":122,"name":123,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":36},"01M71SJ2AHHWN2C4YV2RKEE947","flight-disruption-recovery","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fflight-disruption-recovery\u002FSKILL.md",[],[127,108],"flight disruption recovery",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":36},"01M71SHYPK8HNQ80C9XAWSER53","destination-operations","Dispatches a replacement resort transfer when an arrival is at risk, rebinding any travellers on the at-risk transfer to the replacement.","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fdestination-operations\u002FSKILL.md",[],[135,80,136,137,79,138,20,139,94,140],"destination operations","destination","risk","dispatch","at","transfer"]