[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RMVWE59YPTCP9D5E0924B":3,"skill-same:01M71RMVWE59YPTCP9D5E0924B":79},{"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":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":58,"commitSha":59,"skillDirectory":60,"forksCount":61,"repositoryHtmlUrl":62,"repositoryHomepageUrl":6,"ownerHtmlUrl":63,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":64,"install":65,"resources":78},"01M71RMVWE59YPTCP9D5E0924B","finance_controller",null,"Finance Controller; sign-off authority for material expense claims, contract renewals, AP invoices and hire budgets above the BP delegation but below CFO.","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\u002Fpersonae\u002Ffinance_controller\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000040","财务",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"finance controller","finance","controller","context","but","action","matrix","payload","hire","float","claims","balanced","authority","claim","delegation","expense","decision","auth","chain","get","2026-11-10 13:02:02",false,"---\nname: finance_controller\ndescription: Finance Controller; sign-off authority for material expense claims, contract renewals, AP invoices and hire budgets above the BP delegation but below CFO.\nallowed-tools:\nworkflow_label: Finance — controller\nexternal_event: finance_controller_signoff_decision\ndecision_policy: |\n    # Finance Controller sits between finance BPs and the CFO on every\n    # finance-side escalation chain. Decision is matrix-driven: if the\n    # matrix routes us here, approve; if it routes higher, escalate.\n    payload = (\n        (context or {}).get(\"invoice\")\n        or (context or {}).get(\"claim\")\n        or (context or {}).get(\"trip\")\n        or (context or {}).get(\"contract\")\n        or {}\n    )\n    value_raw = (\n        payload.get(\"amount_gbp\")\n        or payload.get(\"proposed_annual_value\")\n        or payload.get(\"amount\")\n        or 0\n    )\n    try:\n        value = float(value_raw) if value_raw is not None else None\n    except (TypeError, ValueError):\n        value = None\n    action = (context or {}).get(\"action\") or \"expense_claim_approval\"\n\n    auth = authority_check(\n        role=\"finance_controller\",\n        action=action,\n        value=value,\n        category=(payload.get(\"category\") or \"standard\"),\n    )\n\n    rule = str(auth.get(\"governing_rule_id\") or \"n\u002Fa\")\n    if value is None:\n        decision = \"reject\"\n        reason = \"missing value on payload — controller cannot resolve authority\"\n    elif auth.get(\"allowed\"):\n        decision = \"approve\"\n        reason = (\n            \"within finance controller delegation per matrix rule \" + rule\n            + \": GBP \" + str(value)\n        )\n    else:\n        decision = \"escalate\"\n        reason = (\n            \"outside finance controller delegation per matrix rule \" + rule\n            + \": GBP \" + str(value) + \" — CFO sign-off required\"\n        )\npersonality:\n  risk_appetite: balanced\n  thoroughness: medium\n  escalation_style: standard\n---\n\n# finance_controller\n\nYou are the **Finance Controller** for material finance approvals.\n\n## Decision policy\n\nSign off when the matrix confirms the controller is the matched approver. Escalate to the CFO when the matrix routes the decision to `cfo`.\n\nCommon rule ids in `data\u002Fsynthetic\u002Fauthority\u002Fmatrix.json` where this persona is the matched approver: `EXP-004`, `EXP-013`, `EXP-022`, `TRV-011`, `AP-003`, `CRN-003`, `CRN-011`, `HIRE-BUDGET-003`, `HIRE-OFFER-003`.\n\n## When this fires\n\nThe orchestrator parks at the controller sign-off gate carrying the relevant payload (invoice, claim, trip, contract) plus an `action` discriminator.\n\n## How a real human resolves the same gate\n\nWhen `finance_controller` is NOT in `PERSONA_AUTO_CLOSE`, the gate stays open. The real controller resolves it via the controller queue.\n","# finance_controller\n\nYou are the **Finance Controller** for material finance approvals.\n\n## Decision policy\n\nSign off when the matrix confirms the controller is the matched approver. Escalate to the CFO when the matrix routes the decision to `cfo`.\n\nCommon rule ids in `data\u002Fsynthetic\u002Fauthority\u002Fmatrix.json` where this persona is the matched approver: `EXP-004`, `EXP-013`, `EXP-022`, `TRV-011`, `AP-003`, `CRN-003`, `CRN-011`, `HIRE-BUDGET-003`, `HIRE-OFFER-003`.\n\n## When this fires\n\nThe orchestrator parks at the controller sign-off gate carrying the relevant payload (invoice, claim, trip, contract) plus an `action` discriminator.\n\n## How a real human resolves the same gate\n\nWhen `finance_controller` is NOT in `PERSONA_AUTO_CLOSE`, the gate stays open. The real controller resolves it via the controller queue.\n",{"name":5,"description":7,"personality":52,"allowed-tools":6,"external_event":55,"workflow_label":56,"decision_policy":57},{"thoroughness":53,"risk_appetite":38,"escalation_style":54},"medium","standard","finance_controller_signoff_decision","Finance — controller","# Finance Controller sits between finance BPs and the CFO on every\n# finance-side escalation chain. Decision is matrix-driven: if the\n# matrix routes us here, approve; if it routes higher, escalate.\npayload = (\n    (context or {}).get(\"invoice\")\n    or (context or {}).get(\"claim\")\n    or (context or {}).get(\"trip\")\n    or (context or {}).get(\"contract\")\n    or {}\n)\nvalue_raw = (\n    payload.get(\"amount_gbp\")\n    or payload.get(\"proposed_annual_value\")\n    or payload.get(\"amount\")\n    or 0\n)\ntry:\n    value = float(value_raw) if value_raw is not None else None\nexcept (TypeError, ValueError):\n    value = None\naction = (context or {}).get(\"action\") or \"expense_claim_approval\"\n\nauth = authority_check(\n    role=\"finance_controller\",\n    action=action,\n    value=value,\n    category=(payload.get(\"category\") or \"standard\"),\n)\n\nrule = str(auth.get(\"governing_rule_id\") or \"n\u002Fa\")\nif value is None:\n    decision = \"reject\"\n    reason = \"missing value on payload — controller cannot resolve authority\"\nelif auth.get(\"allowed\"):\n    decision = \"approve\"\n    reason = (\n        \"within finance controller delegation per matrix rule \" + rule\n        + \": GBP \" + str(value)\n    )\nelse:\n    decision = \"escalate\"\n    reason = (\n        \"outside finance controller delegation per matrix rule \" + rule\n        + \": GBP \" + str(value) + \" — CFO sign-off required\"\n    )\n","main","db273d7d646605c0bf0175dc9c8057b9ad2628b5","api\u002Fserver\u002Fpersonae\u002Ffinance_controller",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":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add arturcrmbot\u002Fzava-control-plane --skill finance_controller",{"tool":71,"command":72},"bunx","bunx skills add arturcrmbot\u002Fzava-control-plane --skill finance_controller",{"tool":74,"command":75},"pnpm","pnpm dlx skills add arturcrmbot\u002Fzava-control-plane --skill finance_controller","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fapi\u002Fserver\u002Fpersonae\u002Ffinance_controller\u002FSKILL.md",true,[],[80,100,117,131,139,146],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":47},"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",[],[87,88,89,90,91,32,92,93,94,95,96,97,98,99],"proactive","customer","proactive customer care","customer care","gesture","bounded","status","check","booking","operations","travel","issue","itinerary",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":47},"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",[],[107,108,109,110,111,95,112,113,114,93,115,116,94,96,97],"payment","payment exception","it","retry","balance","when","release","complete","capacity","inventory",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":47},"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",[],[124,125,126,127,94,96,97,128,129,130],"hotel supplier recovery","hotel","recovery","with","move","for","headroom",{"skillNo":132,"name":133,"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":134,"categories":135,"keywords":136,"publishedAt":47},"01M71SJ4G5MPM50WZ6F66M3PNS","holiday-sales-booking","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fholiday-sales-booking\u002FSKILL.md",[],[137,95,138],"holiday sales booking","sales",{"skillNo":140,"name":141,"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":142,"categories":143,"keywords":144,"publishedAt":47},"01M71SJ2AHHWN2C4YV2RKEE947","flight-disruption-recovery","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fflight-disruption-recovery\u002FSKILL.md",[],[145,126],"flight disruption recovery",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":47},"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",[],[153,96,154,155,94,156,97,157,112,158],"destination operations","destination","risk","dispatch","at","transfer"]