[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69BBANRAQWXFD6MVTFC835G":3,"skill-same:01M69BBANRAQWXFD6MVTFC835G":95},{"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":28,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":46,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M69BBANRAQWXFD6MVTFC835G","sales-analysis",null,"Turn the RAW weekly sales rows and catalog facts from the Sales & Performance MCP into merchandising analytics by running the bundled sales_analysis.py script. Use first in an end-of-quarter markdown review, when a manager wants top sellers and slow-moving \u002F dead stock over a period. The MCP returns raw data only, so the script derives velocity, weeks-of-cover, and margin, then prints the top sellers and slow movers as structured JSON. It renders NO charts (the merch-report-html skill owns all visuals) and does NOT decide discounts (hand the slow movers to markdown-optimizer).","microsoft\u002Fnew-copilot-studio-tech-guide-kr","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69BAPAFGG5SHJ812JZDC3AR",0,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fsales-analysis\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[29,30,31,32,33,34],"sales analysis","MCP","review","performance","analytics","visuals","2026-11-10 10:12:30",false,"---\nname: sales-analysis\ndescription: Turn the RAW weekly sales rows and catalog facts from the Sales & Performance MCP into merchandising analytics by running the bundled sales_analysis.py script. Use first in an end-of-quarter markdown review, when a manager wants top sellers and slow-moving \u002F dead stock over a period. The MCP returns raw data only, so the script derives velocity, weeks-of-cover, and margin, then prints the top sellers and slow movers as structured JSON. It renders NO charts (the merch-report-html skill owns all visuals) and does NOT decide discounts (hand the slow movers to markdown-optimizer).\n---\n\n# Sales Analysis (data, not charts)\n\nThis skill converts **raw** sales data into the analytics a markdown review needs by\n**running the bundled `sales_analysis.py` script**. The **Sales & Performance MCP**\ndeliberately exposes only raw primitives (`query_sales`, `get_catalog`) - there is no\n`get_slow_movers` or `get_velocity` - so the script derives the metrics itself.\n\nIt renders **no charts** on purpose: the interactive **merch-report-html** skill owns\nall the visuals at the end, which keeps the review fast. This skill just computes the\nnumbers and prints the structured hand-offs.\n\n## When to use\n\n**First** in an end-of-quarter markdown review, whenever a manager wants to see top\nsellers and slow \u002F dead stock over a window.\n\n## Inputs (fetch from the Sales & Performance Agent, then pass as flags)\n\n1. **Raw weekly rows** - `query_sales(start_week, end_week)` for the window (default the\n   full 8 weeks `2026-04-12` ... `2026-05-31`). Each row is\n   `{sku, name, category, week, units, revenue}`.\n2. **Catalog facts** - `get_catalog()` -> `{sku, name, price, unit_cost, stock_on_hand}`.\n\n## Run the bundled script\n\n```bash\npython3 sales_analysis.py \\\n    --woc-threshold 8 \\\n    --rows '[{\"sku\":\"SKU-VR-GOGGLES\",\"name\":\"OmegaVision VR Headset\",\"category\":\"accessory\",\"week\":\"2026-04-12\",\"units\":1,\"revenue\":199.99}]' \\\n    --catalog '[{\"sku\":\"SKU-VR-GOGGLES\",\"name\":\"OmegaVision VR Headset\",\"price\":199.99,\"unit_cost\":70.00,\"stock_on_hand\":48}]'\n```\n\nIt prints a compact summary, then two structured lines:\n\n- `TOP_SELLERS_JSON=[{name, units, velocity, revenue}]`\n- `SLOW_MOVERS_JSON=[{sku, name, price, cost, weeks_of_cover, margin, units}]`\n\n## Metrics it derives (for your report, not for you to recompute)\n\nOver a window of `W` weeks, per SKU: `velocity = units_total \u002F W`,\n`weeks_of_cover = stock_on_hand \u002F velocity`, `margin% = (price - cost) \u002F price * 100`.\n**Slow movers** = weeks-of-cover above the threshold (default 8), sorted descending.\n**Top sellers** = highest units.\n\n## Next steps\n\n- Pass `SLOW_MOVERS_JSON` (it already carries `sku, name, price, cost`) to the\n  **markdown-optimizer** skill, together with the guardrails from the Store Policy Agent.\n- Keep `TOP_SELLERS_JSON` and `SLOW_MOVERS_JSON` so the **merch-report-html** skill can\n  render them into the final interactive report.\n- Do **not** recommend discounts here - that needs the Store Policy Agent's guardrails.\n\n## Notes\n\n- The bundled script is `sales_analysis.py`; it uses only the Python standard library\n  (no matplotlib, no network).\n- Never invent numbers - every value derives from the MCP results you fetched. All data\n  is mock; for demo purposes only.\n","# Sales Analysis (data, not charts)\n\nThis skill converts **raw** sales data into the analytics a markdown review needs by\n**running the bundled `sales_analysis.py` script**. The **Sales & Performance MCP**\ndeliberately exposes only raw primitives (`query_sales`, `get_catalog`) - there is no\n`get_slow_movers` or `get_velocity` - so the script derives the metrics itself.\n\nIt renders **no charts** on purpose: the interactive **merch-report-html** skill owns\nall the visuals at the end, which keeps the review fast. This skill just computes the\nnumbers and prints the structured hand-offs.\n\n## When to use\n\n**First** in an end-of-quarter markdown review, whenever a manager wants to see top\nsellers and slow \u002F dead stock over a window.\n\n## Inputs (fetch from the Sales & Performance Agent, then pass as flags)\n\n1. **Raw weekly rows** - `query_sales(start_week, end_week)` for the window (default the\n   full 8 weeks `2026-04-12` ... `2026-05-31`). Each row is\n   `{sku, name, category, week, units, revenue}`.\n2. **Catalog facts** - `get_catalog()` -> `{sku, name, price, unit_cost, stock_on_hand}`.\n\n## Run the bundled script\n\n```bash\npython3 sales_analysis.py \\\n    --woc-threshold 8 \\\n    --rows '[{\"sku\":\"SKU-VR-GOGGLES\",\"name\":\"OmegaVision VR Headset\",\"category\":\"accessory\",\"week\":\"2026-04-12\",\"units\":1,\"revenue\":199.99}]' \\\n    --catalog '[{\"sku\":\"SKU-VR-GOGGLES\",\"name\":\"OmegaVision VR Headset\",\"price\":199.99,\"unit_cost\":70.00,\"stock_on_hand\":48}]'\n```\n\nIt prints a compact summary, then two structured lines:\n\n- `TOP_SELLERS_JSON=[{name, units, velocity, revenue}]`\n- `SLOW_MOVERS_JSON=[{sku, name, price, cost, weeks_of_cover, margin, units}]`\n\n## Metrics it derives (for your report, not for you to recompute)\n\nOver a window of `W` weeks, per SKU: `velocity = units_total \u002F W`,\n`weeks_of_cover = stock_on_hand \u002F velocity`, `margin% = (price - cost) \u002F price * 100`.\n**Slow movers** = weeks-of-cover above the threshold (default 8), sorted descending.\n**Top sellers** = highest units.\n\n## Next steps\n\n- Pass `SLOW_MOVERS_JSON` (it already carries `sku, name, price, cost`) to the\n  **markdown-optimizer** skill, together with the guardrails from the Store Policy Agent.\n- Keep `TOP_SELLERS_JSON` and `SLOW_MOVERS_JSON` so the **merch-report-html** skill can\n  render them into the final interactive report.\n- Do **not** recommend discounts here - that needs the Store Policy Agent's guardrails.\n\n## Notes\n\n- The bundled script is `sales_analysis.py`; it uses only the Python standard library\n  (no matplotlib, no network).\n- Never invent numbers - every value derives from the MCP results you fetched. All data\n  is mock; for demo purposes only.\n",{"name":5,"description":7},"main","82f9c0b1b1bacfd0fdabdc9cc717bc8849d185ec","sample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fsales-analysis",1,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-04 09:40:30",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add microsoft\u002Fnew-copilot-studio-tech-guide-kr --skill sales-analysis",{"tool":55,"command":56},"bunx","bunx skills add microsoft\u002Fnew-copilot-studio-tech-guide-kr --skill sales-analysis",{"tool":58,"command":59},"pnpm","pnpm dlx skills add microsoft\u002Fnew-copilot-studio-tech-guide-kr --skill sales-analysis","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fsales-analysis\u002FSKILL.md",true,[63,69,73,77,81,87,91],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"extraction.md","REFERENCE","参考文档",12878,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fmagpie\u002Fblob\u002Fmain\u002Fplugins\u002Fmagpie-issue\u002Fskills\u002Freproducer\u002Fextraction.md",{"path":70,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":71,"sourceHtmlUrl":72},"golden-rule-details.md",5755,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fmagpie\u002Fblob\u002Fmain\u002Fplugins\u002Fmagpie-issue\u002Fskills\u002Freproducer\u002Fgolden-rule-details.md",{"path":74,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":75,"sourceHtmlUrl":76},"probe-templates.md",6533,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fmagpie\u002Fblob\u002Fmain\u002Fplugins\u002Fmagpie-issue\u002Fskills\u002Freproducer\u002Fprobe-templates.md",{"path":78,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":79,"sourceHtmlUrl":80},"runtime-recipes.md",8249,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fmagpie\u002Fblob\u002Fmain\u002Fplugins\u002Fmagpie-issue\u002Fskills\u002Freproducer\u002Fruntime-recipes.md",{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"sales_analysis.py","SCRIPT","脚本",4155,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fsales-analysis\u002Fsales_analysis.py",{"path":88,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":89,"sourceHtmlUrl":90},"verdict-composition.md",11412,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fmagpie\u002Fblob\u002Fmain\u002Fplugins\u002Fmagpie-issue\u002Fskills\u002Freproducer\u002Fverdict-composition.md",{"path":92,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":93,"sourceHtmlUrl":94},"verification.md",7382,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fmagpie\u002Fblob\u002Fmain\u002Fplugins\u002Fmagpie-issue\u002Fskills\u002Freproducer\u002Fverification.md",[96,111,120,130,143,150],{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":105,"publishedAt":35},"01M69BBNKA733YFENEN2JV629D","slip-pdf-generator","Generate a printable BlastBox return \u002F RMA \u002F exchange slip as a PDF for the associate to hand to the customer. Use at the end of a return, warranty swap, membership cancellation, or upgrade once all amounts are final. The skill runs a bundled Python script that renders the confirmed slip values into a real PDF file.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr\u002Fblob\u002Fmain\u002Fsample\u002Fsolution\u002Fsrc\u002FBlastBoxAgents\u002Fbotcomponents\u002Fcra24a45_skill_md_d925ad573675\u002Ffiledata\u002FSKILL.md",[102],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[106,107,108,109,110],"slip pdf generator","PDF","python","customer","generate",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":35},"01M69BBKZ5BCFW611KF1WG5RQQ","points-reconciliation","Reconcile a customer's BlastPoints loyalty balance after a complex visit (purchases, returns, promo multipliers, expiry) and convert the net balance to store credit. Use when an associate asks about a member's points, or after a return that should claw back previously earned points. The skill runs a bundled Python script that applies the base earn rate, promo multipliers, tier bonus, clawbacks, and expiry, then prints a points ledger and the redeemable store-credit value.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr\u002Fblob\u002Fmain\u002Fsample\u002Fsolution\u002Fsrc\u002FBlastBoxAgents\u002Fbotcomponents\u002Fcra24a45_skill_md_4e6ebf925ae8\u002Ffiledata\u002FSKILL.md",[],[118,108,109,119],"points reconciliation","claw",{"skillNo":121,"name":122,"nameZh":6,"description":123,"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":127,"publishedAt":35},"01M69BBJ8SMZ4CY7TA6R7TTEBY","prorated-refund-calculator","Calculate the exact prorated refund when a customer cancels a BlastPass membership, and the net settlement when a defective unit is traded up to a pricier model. Use after the Store Policy Agent confirms the refund rule and the Membership MCP has returned the membership details. The skill runs a bundled Python script so the arithmetic is exact.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr\u002Fblob\u002Fmain\u002Fsample\u002Fsolution\u002Fsrc\u002FBlastBoxAgents\u002Fbotcomponents\u002Fcra24a45_skill_md_30aa9a7b2b7c\u002Ffiledata\u002FSKILL.md",[126],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[128,129,109,108,30],"prorated refund calculator","policy",{"skillNo":131,"name":132,"nameZh":6,"description":133,"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":140,"publishedAt":35},"01M69BBGFGN30E47RJSP2GGDZQ","membership-card-png","Generate a digital BlastPass membership card as a PNG image by running the bundled card_png.py script. Use when a member self-serves a lost\u002Fstolen\u002Fdamaged card replacement, or any time a card needs to be shown on screen (vs. printed). The skill takes the member details returned by the Membership MCP (get_membership) plus the new_card_serial returned by reissue_card and passes them as command-line flags to a bundled Python (matplotlib) script that renders a CR80-sized membership card to a real PNG. It only renders the card from already-retrieved values — it never looks anything up or invents data.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr\u002Fblob\u002Fmain\u002Fsample\u002Fsolution\u002Fsrc\u002FBlastBoxAgents\u002Fbotcomponents\u002FDefault_draft_IsBewO.file.SKILL.md\u002Ffiledata\u002FSKILL.md",[136,139],{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[141,110,108,142,30],"membership card png","image",{"skillNo":144,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":149,"publishedAt":35},"01M69BBEKS0MQ7NGABMZJH80YW","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fsrc\u002Fbotcomponents\u002FDefault_draft_IsBewO.file.SKILL.md\u002Ffiledata\u002FSKILL.md",[147,148],{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[141,110,108,142,30],{"skillNo":151,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":155,"publishedAt":35},"01M69BBCTR19H23S9D12T2K68E","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide-kr\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fslip-pdf-generator\u002FSKILL.md",[154],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[106,107,110,109,108]]