[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71S87CYYFD2PBTNGPWCS6TK":3,"skill-same:01M71S87CYYFD2PBTNGPWCS6TK":72},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M71S87CYYFD2PBTNGPWCS6TK","senior_credit_officer",null,"Own material or prolonged synthetic counterparty limit excess decisions.","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\u002Fverticals\u002Fbanking\u002Fpersonae\u002Fsenior_credit_officer\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"senior credit officer","senior","check","synthetic","gbp","approve","decisions","workflow","authority","persona","material","delegation","missing","decision","option","auth","value","get","limit","evidence","2026-11-10 13:02:02",false,"---\nname: senior_credit_officer\ndescription: Own material or prolonged synthetic counterparty limit excess decisions.\nexternal_event: senior_credit_officer_decision\ndecision_policy: |\n    action = (context or {}).get(\"action\") or \"\"\n    request = (context or {}).get(\"request\") or {}\n    value_raw = request.get(\"amount_gbp\")\n    try:\n        value = float(value_raw)\n    except (TypeError, ValueError):\n        value = None\n    category = request.get(\"category\") or \"synthetic-limit-remediation\"\n\n    auth = authority_check(\n        role=\"senior_credit_officer\",\n        action=action,\n        value=value,\n        category='synthetic-limit-remediation',\n    )\n\n    rule = str(auth.get(\"governing_rule_id\") or \"n\u002Fa\")\n    if not action:\n        decision = \"reject\"\n        reason = \"missing action in context — cannot resolve authority\"\n    elif value is None:\n        decision = \"reject\"\n        reason = \"missing amount_gbp on request — cannot resolve authority\"\n    elif auth.get(\"allowed\"):\n        decision = \"approve\"\n        reason = (\n            \"within senior_credit_officer delegation per matrix rule \" + rule\n            + \": \" + str(category) + \" GBP \" + str(value)\n        )\n    else:\n        decision = \"escalate\"\n        reason = (\n            \"outside senior_credit_officer delegation per matrix rule \" + rule\n            + \": \" + str(category) + \" GBP \" + str(value)\n            + \" — \" + str(auth.get(\"reason\") or \"\")\n        )\n\n    extra = {}\n    if decision == \"approve\":\n        extra[\"persona\"] = \"senior_credit_officer\"\n        extra[\"workflow_id\"] = (context or {}).get(\"workflow_id\")\n        extra[\"story_id\"] = (context or {}).get(\"story_id\")\n        extra[\"decision_id\"] = (context or {}).get(\"decision_id\") or \"\"\n        extra[\"selected_option_id\"] = (context or {}).get(\"selected_option_id\") or \"\"\n        extra[\"evidence_versions\"] = (context or {}).get(\"evidence_versions\") or {}\n        extra[\"rationale\"] = reason\n---\n\n# Senior Credit Officer\n\nThis persona operates on synthetic data only and makes no live operational\nclaims. Wait for the exact external event `senior_credit_officer_decision`.\n\nApprove only a deterministically admitted remediation option whose value sits\nwithin the delegated authority of GBP 50,000,000. Material excesses reach this\npersona because the officer tier refused them, not because the officer tier\nwas bypassed.\n\nThis persona does not set board risk appetite, does not certify a valuation,\nand cannot direct a trading desk. It uses no tools and claims no access to\nlive systems.\n","# Senior Credit Officer\n\nThis persona operates on synthetic data only and makes no live operational\nclaims. Wait for the exact external event `senior_credit_officer_decision`.\n\nApprove only a deterministically admitted remediation option whose value sits\nwithin the delegated authority of GBP 50,000,000. Material excesses reach this\npersona because the officer tier refused them, not because the officer tier\nwas bypassed.\n\nThis persona does not set board risk appetite, does not certify a valuation,\nand cannot direct a trading desk. It uses no tools and claims no access to\nlive systems.\n",{"name":5,"description":7,"external_event":49,"decision_policy":50},"senior_credit_officer_decision","action = (context or {}).get(\"action\") or \"\"\nrequest = (context or {}).get(\"request\") or {}\nvalue_raw = request.get(\"amount_gbp\")\ntry:\n    value = float(value_raw)\nexcept (TypeError, ValueError):\n    value = None\ncategory = request.get(\"category\") or \"synthetic-limit-remediation\"\n\nauth = authority_check(\n    role=\"senior_credit_officer\",\n    action=action,\n    value=value,\n    category='synthetic-limit-remediation',\n)\n\nrule = str(auth.get(\"governing_rule_id\") or \"n\u002Fa\")\nif not action:\n    decision = \"reject\"\n    reason = \"missing action in context — cannot resolve authority\"\nelif value is None:\n    decision = \"reject\"\n    reason = \"missing amount_gbp on request — cannot resolve authority\"\nelif auth.get(\"allowed\"):\n    decision = \"approve\"\n    reason = (\n        \"within senior_credit_officer delegation per matrix rule \" + rule\n        + \": \" + str(category) + \" GBP \" + str(value)\n    )\nelse:\n    decision = \"escalate\"\n    reason = (\n        \"outside senior_credit_officer delegation per matrix rule \" + rule\n        + \": \" + str(category) + \" GBP \" + str(value)\n        + \" — \" + str(auth.get(\"reason\") or \"\")\n    )\n\nextra = {}\nif decision == \"approve\":\n    extra[\"persona\"] = \"senior_credit_officer\"\n    extra[\"workflow_id\"] = (context or {}).get(\"workflow_id\")\n    extra[\"story_id\"] = (context or {}).get(\"story_id\")\n    extra[\"decision_id\"] = (context or {}).get(\"decision_id\") or \"\"\n    extra[\"selected_option_id\"] = (context or {}).get(\"selected_option_id\") or \"\"\n    extra[\"evidence_versions\"] = (context or {}).get(\"evidence_versions\") or {}\n    extra[\"rationale\"] = reason","main","db273d7d646605c0bf0175dc9c8057b9ad2628b5","verticals\u002Fbanking\u002Fpersonae\u002Fsenior_credit_officer",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":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add arturcrmbot\u002Fzava-control-plane --skill senior_credit_officer",{"tool":64,"command":65},"bunx","bunx skills add arturcrmbot\u002Fzava-control-plane --skill senior_credit_officer",{"tool":67,"command":68},"pnpm","pnpm dlx skills add arturcrmbot\u002Fzava-control-plane --skill senior_credit_officer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Fbanking\u002Fpersonae\u002Fsenior_credit_officer\u002FSKILL.md",true,[],[73,93,110,124,132,139],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":44},"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",[],[80,81,82,83,84,85,86,87,26,88,89,90,91,92],"proactive","customer","proactive customer care","customer care","gesture","action","bounded","status","booking","operations","travel","issue","itinerary",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":44},"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",[],[100,101,102,103,104,88,105,106,107,87,108,109,26,89,90],"payment","payment exception","it","retry","balance","when","release","complete","capacity","inventory",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":44},"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",[],[117,118,119,120,26,89,90,121,122,123],"hotel supplier recovery","hotel","recovery","with","move","for","headroom",{"skillNo":125,"name":126,"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":127,"categories":128,"keywords":129,"publishedAt":44},"01M71SJ4G5MPM50WZ6F66M3PNS","holiday-sales-booking","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fholiday-sales-booking\u002FSKILL.md",[],[130,88,131],"holiday sales booking","sales",{"skillNo":133,"name":134,"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":135,"categories":136,"keywords":137,"publishedAt":44},"01M71SJ2AHHWN2C4YV2RKEE947","flight-disruption-recovery","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fflight-disruption-recovery\u002FSKILL.md",[],[138,119],"flight disruption recovery",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":44},"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",[],[146,89,147,148,26,149,90,150,105,151],"destination operations","destination","risk","dispatch","at","transfer"]