From gd-mcp-skills
Aging Analysis — weekly Skill (Monday 6am Central) surfacing the strategic view of inventory aging at Warehouse Locations. Runs four routines: aged-inventory-by-cohort (90/180/365-day cohorts per Location), stale-lot-risk (three sub-types — Reserved bypass, Unsellable stale, Cross-Channel stranded — with FIFO two-transfer swap recommendations), dead-stock-watch (SKUs with zero fulfillments in trailing turn period), and inventory-turnover-scorecard (actual vs target turnover per Location). Read-only — recommends transfer patterns but does not draft. Use this Skill when the user says: "aging analysis", "aged inventory", "stuck lots", "stale lots", "dead stock", "inventory turnover", "stranded inventory", "Reserved bypass", "cross-channel stuck lot", "Unsellable write-off review", "is my inventory turning", "run gd-aging-analysis". Persona: Finance / Planning / Merchandising leader. Cadence: weekly Monday 6am USA Central, plus ad hoc.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gd-mcp-skills:aging-analysisThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Aging Analysis is the weekly read-only Skill that answers one question for the finance, planning, and merchandising leadership team every Monday morning: **is inventory turning the way we want, and where is cash trapped?**
Aging Analysis is the weekly read-only Skill that answers one question for the finance, planning, and merchandising leadership team every Monday morning: is inventory turning the way we want, and where is cash trapped?
It surfaces:
This Skill does not draft transfers. For Stale Lot Risk findings, it surfaces the required transfer order the user must follow when running transfers in the GoodDay UI or via gd-rebalance / gd-safety-stock. The FIFO order is critical — running transfers in the wrong order causes the stuck lot to boomerang right back where it came from.
../Configuration — Shared.md — schedule, delivery, output shape, Location classification table (Warehouse vs Retail Store), annual inventory turnover target, Data Source contract (Section 16)../Configuration - Aging Analysis.md — cohorts, threshold multipliers, bypass-buffer rules, wholesale inclusion, ignore lists../SOP - Aging Analysis.md — full procedure, FIFO two-transfer logic, sub-type classifications.../🖼️ Brand Guidelines.pdf.This Skill describes the business entities each routine needs. The concrete mapping — which MCP tool, verified query, or CSV column populates each entity — lives in ../MCP Tool Catalog.md. When the GoodDay MCP renames a tool or publishes a new verified query, only the catalog changes; this Skill does not.
Session context comes from the connected MCP's standard surface; filter all results to Warehouse-classified Locations.
Entities this Skill needs — look each one up in the catalog:
| Routine | Entity needed |
|---|---|
| 1 — Aged Inventory by Cohort | Aged lots per Warehouse Location organized into the configured cohort boundaries |
| 2 — Stale Lot Risk | Lot positions across Channels and States for sub-type A (Reserved bypass), sub-type B (Unsellable stale), sub-type C (Cross-Channel stranded), plus the bypass-buffer signal for sub-types A and C |
| 2 — Cost-trend delta (supplementary) | Lot-grain inventory valuation + most recent landed cost for the SKU |
| 2 — Sub-type B context | Write-off / scrap adjustment history |
| 3 — Dead Stock Watch | SKUs at Warehouse Locations with zero fulfillments in the configured trailing turn period |
| 4 — Inventory Turnover Scorecard | Per-Location trailing-window units fulfilled and average on-hand |
| All — Movement history cross-reference | Per-SKU inventory activity over a date range |
Output delivery and drill links per ../Configuration — Shared.md and per-row deep_link.
Catalog binding may be partial. If the catalog's current binding for any entity returns VALIDATION_ERROR: not_found, follow ../Configuration — Shared.md Section 12b. This Skill carries the heaviest analytical dependency in the set; routines that depend on a missing verified query surface a notice and skip rather than guessing.
This Skill runs Monday 6am USA Central, weekly — overriding the daily-weekday default in the launch set. Ad hoc invocations are always available.
This Skill derives most day-thresholds from the merchant's configured turnover target:
threshold_days = 365 / (target_turnover × multiplier)
At the default 4x target:
When target changes, thresholds scale automatically.
Routine 1: Aged Inventory by Cohort → 90/180/365-day cohorts per Warehouse Location
Routine 2: Stale Lot Risk → 3 sub-types: Reserved / Unsellable / Cross-Channel
Bypass-buffer signal for A and C
FIFO two-transfer recommendations
Routine 3: Dead Stock Watch → SKUs with zero fulfillments in trailing turn period
Routine 4: Inventory Turnover Scorecard → Per-Location actual vs target
Scorecard: aging-scorecard → Severity-scored roll-up of all four
Pull all lots beyond the aging baseline (90 days), organized into 90+/180+/365+ day cohorts. Per Warehouse Location only — no cross-Location aggregation. Attach persistent flag for lots in the same cohort across 3 of last 5 weekly runs without movement.
For each Warehouse Location, scan across Channels and States for three sub-types:
For sub-types A and C, layer the bypass-buffer signal: examine the last 10 fulfillments for the SKU at the Location; raise the flag if >80% went to a newer lot. If fewer than 10 fulfillments exist in the window, do not raise the flag.
For each finding, classify the likely cause (operational vs ledger-logic) for human review. Surface the cost-trend delta (stuck lot cost vs most recent landed cost for the SKU) as supplementary context — not part of severity.
Recommended action — FIFO two-transfer swap (critical). The Skill produces recommendations but does NOT draft transfers. The recommended transfer order is non-negotiable because virtual transfers apply FIFO at origin — the oldest lot is moved first. Naive single transfers will boomerang the stuck lot back.
Surface both options for A and C; let the user decide based on whether they want to maintain the Reserved buffer or Channel inventory balance.
For each SKU at each Warehouse Location with positive on-hand, count fulfillments in the trailing 13 weeks (default — derived from turnover target). If zero, flag as dead stock candidate. Tag persistent if flagged in 3 of last 5 weekly runs.
For each Warehouse Location, compute trailing-360-day turnover: units_fulfilled / average_on_hand_units. Compare to merchant's configured target. Compute trend by comparing first 180 days vs last 180 days of the window. Include Wholesale by default; respect merchant config if excluded.
Aggregate across Locations; identify which Locations are dragging the average (default: actual turnover under target by 25%+).
aging-scorecardRead outputs of Routines 1–4. Do not re-detect. Apply the severity rules defined in ./Configuration - Aging Analysis.md (Severity thresholds section). Compose the headline ("Is inventory turning the way we want?"), top-10 punch list across all routines, tail summary, and routine-by-routine detail per the shared Output shape (../Configuration — Shared.md Section 7).
Follow the output shape from the shared Configuration:
+N more lines totaling $X if more than 10Render against the GoodDay Brand Guide. Post to the configured Slack channel for scheduled runs.
gd-rebalance / gd-safety-stock, and the order is the user's responsibility to execute correctly.gd-costing-quality issue too.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub gooddaysoftware/gd-mcp-skills-plugin --plugin gd-mcp-skills