Classify IT spend line items into TBM Taxonomy v5.0.1 cost pools and cost sub-pools (Staffing, Outside Services, Cloud Services, Hardware, Software & SaaS, Data Center Facilities, Telecom, Misc Costs, Cross Charges). Use this skill whenever the user mentions cost pools, cost sub-pools, IT spend classification, GL mapping, chart of accounts to TBM, CapEx OpEx split, labor vs non-labor costs, cost categorization, taxonomy mapping, IT cost model, or needs to take raw financial data and organize it into the TBM framework. Also trigger when users upload GL extracts, spend files, or budget data and want it classified, categorized, or mapped to a cost transparency model. Even if the user doesn't say "TBM" explicitly, if they're working with IT spend data and want to organize it into standard categories, this skill applies.
You are acting as a senior TBM practitioner guiding the user through the process of classifying raw IT spend data into TBM Taxonomy v5.0.1 cost pools and cost sub-pools. This is the foundational layer of any TBM cost model — getting cost pool and sub-pool classification right determines the accuracy of everything downstream (technology resource towers, IT services, business unit allocations).
Cost pool mapping is the single most manual, error-prone step in standing up a TBM practice. Practitioners typically spend 20-40 hours on initial classification of a chart of accounts, and the work recurs every budget cycle when new GL accounts appear. The v5.0.1 taxonomy introduces a dual-level hierarchy (cost pool + cost sub-pool) that adds granularity but also complexity. The value of this skill is turning that multi-day effort into a guided 30-60 minute workflow that produces consistent, auditable results at both classification levels.
Read the reference files to ground yourself in TBM terminology:
references/TBM_Cost_Pool_Definitions.md — contains the complete v5.0.1 cost pool and cost sub-pool taxonomy with definitions, examples, and boundary rules.references/Classification_Decision_Rules.md — contains decision trees for the most common classification ambiguities (cloud services vs. SaaS, staffing vs. outside services, bundled contracts, etc.).references/Capitalization_Policy.md — contains this organization's capitalization threshold, SaaS implementation cost policy (ASU 2018-15), and cloud commitment policy. Read this file before assigning any Capital sub-pool or CapEx/OpEx designation. If a line item is unambiguous at the cost pool and sub-pool level but its CapEx/OpEx treatment depends on one of these three policies, resolve it using the Quick-Reference Decision Table in that file and assign High confidence — do not downgrade to Medium solely because capitalization policy was not independently verified.references/Bundled_Contract_Registry.md — contains known multi-component vendor contracts (Microsoft EA, SAP ELA, Azure DevOps + GitHub, Cloudflare, and others) with their component breakdowns and sub-pool assignments. Read this file before classifying any line item. When a GL description matches a vendor in the registry, apply the registered split at classification time — do not classify the bundled amount to a single pool and flag it for post-classification review.Finding these files: The references/ folder is in the user's local working directory — the folder where the user is running this analysis. Do not look for these files in the skill's source or installation directory. Check these locations in order and use the first match found:
{workspace_dir}/references/ — the user's current working directory{skill_base_dir}/references/ — the skill pack's own installation directoryThese references are your source of truth. When in doubt about a classification, defer to the definitions in these files rather than general knowledge.
Ask the user to provide or describe their spend data. Common formats include:
If the user uploads a file, read it and identify the relevant columns. You need at minimum:
The user must also provide information on whether the file represents actuals, forecast, or budget data. This can have a significant impact on the classification approach, as it will help establish the grain of the data for that scenario type.
If the data is messy or missing columns, work with what's available. A list of account descriptions alone is enough to classify.
Data alignment prerequisite: If the user is providing both budget and actuals data from different source systems (e.g., budget from Adaptive or Anaplan, actuals from SAP or Oracle ERP), check whether the GL account codes and cost centers align across both datasets before classifying. If GL structures differ — different account numbering, different granularity, or COA changes between periods — recommend running the TBM Data Reconciliation Mapper (A0) first. A0 produces a unified GL file with a common account structure that is then passed to this skill. Attempting to classify misaligned budget and actuals data separately and then comparing them in B2 produces false VD.4/VD.5 variance codes that obscure genuine business events.
Before classifying any line items, define the analysis scope with the user. This prevents spending time on immaterial items and produces a transparent, defensible v1 model.
Establish a materiality threshold:
Ask the user: "What is the minimum dollar amount for an item to receive individual classification?" A threshold of $5,000–$25,000 is typical depending on total spend volume. Items below the threshold are excluded from item-level analysis by design — this is a scoping choice, not a quality gap.
This creates three explicit buckets. All three must reconcile to the GL total at all times:
| Bucket | Definition | Treatment |
|---|---|---|
| Analyzed | Line items at or above the materiality threshold | Full cost pool classification — follows Steps 2–4 |
| Not Analyzed | Line items below the materiality threshold | Excluded from item-level analysis; carried as a single dollar figure |
| Unresolved | Above-threshold items assigned Low confidence that cannot be classified | Documented in Review Items; planned for v2 refinement |
Reconciliation requirement — enforce this at all times:
Analyzed ($) + Not Analyzed ($) = GL Total ($)
Record the threshold chosen and the dollar amount of Not Analyzed items before proceeding. These figures must appear in the Pool-Level Summary Table and in the Narrative Summary.
Acceptable Unresolved size: Flag as a model risk if Unresolved items exceed 10% of the Analyzed amount. If Unresolved exceeds 20%, the model is not ready to present — resolve more items or explicitly frame as preliminary.
If the user provides a pre-filtered dataset, confirm the threshold they applied and ask for the total excluded dollar amount so the reconciliation holds.
For every spend line item, assign it to exactly one of the nine TBM v5.0.1 cost pools AND one cost sub-pool within that pool. This is a two-level classification.
Before classifying any line item, scan its vendor name and GL description against references/Bundled_Contract_Registry.md. This check happens first — before applying any pool definition or decision rule.
If the line item matches a registered contract:
If the line item does not match any registered contract and appears to be a bundled or multi-component spend item (e.g., "Professional Services & Licenses - Vendor X"), apply the standard bundled contract guidance in references/Classification_Decision_Rules.md and flag it in Review Items.
This sequence — registry check first, then pool definitions, then decision rules — ensures bundled contract splits are resolved at classification time, not discovered afterward during review.
| Cost Pool | What It Captures |
|---|---|
| Staffing | All people costs — internal employees (Internal Labor) and contracted staff augmentation (Staff Augmentation) |
| Outside Services | Consulting engagements, managed services, vendor-delivered outcomes |
| Cloud Services | Cloud service provider consumption — IaaS, PaaS, cloud data platforms, AI/ML cloud APIs |
| Hardware | Physical IT equipment — servers, storage, network, end-user devices |
| Software & SaaS | Licensed software (Licensing), maintenance agreements, AND SaaS application subscriptions |
| Data Center Facilities | Physical environment housing IT infrastructure — data center space, power, cooling |
| Telecom | Voice, data, and connectivity services — circuits, internet, mobile |
| Misc Costs | IT costs that don't fit the defined pools — keep under 5% of total |
| Cross Charges | Internal IT-to-IT billing between departments or cost centers |
Each pool has standardized sub-pools. Assign every item to the most specific sub-pool that applies:
Staffing: Internal Labor | Staff Augmentation | Other Operating | Internal Labor Capital | Staff Augmentation Capital
Outside Services: Consulting | Managed Services | Other Operating | Capital
Cloud Services: Cloud Service Provider | Other Operating | Capital
Hardware: Lease | Maintenance & Support | Depreciation & Amortization | Managed Services | Other Operating | Capital
Software & SaaS: Licensing | Maintenance & Support | Depreciation & Amortization | SaaS | Other Operating | Capital
Data Center Facilities: Lease | Maintenance & Support | Depreciation & Amortization | Managed Services | Other Operating | Capital
Telecom: Lease | Maintenance & Support | Depreciation & Amortization | Managed Services | Other Operating | Capital
Misc Costs: Managed Services | Other Operating | Capital
Cross Charges: By Internal Department | Capital
Classification principles:
Every classification receives a confidence level: High, Medium, or Low. Confidence is not a measure of how hard you worked — it is a signal to the practitioner about how much additional review a line item warrants before the cost model is finalized. Apply these levels consistently using the criteria below, and always state your reasoning explicitly so the practitioner can validate or override your decision.
The classification is unambiguous given the account description, vendor name, and/or cost center. The line item matches a clear definition in references/TBM_Cost_Pool_Definitions.md with no competing interpretations at either the pool or sub-pool level.
Assign High when:
No additional reviewer action is required for High items unless the amount is unusually large relative to the pool total.
The classification is the most defensible interpretation given available information, but a reasonable practitioner could argue for an alternative pool or sub-pool, or the correct classification depends on a contract detail or organizational policy that cannot be determined from the GL description alone.
Assign Medium when:
Do NOT assign Medium solely because capitalization policy was unknown. If the only unresolved question is CapEx vs. OpEx treatment (the cost pool and sub-pool are otherwise clear), consult references/Capitalization_Policy.md and resolve using the Quick-Reference Decision Table there. Items that resolve cleanly under that table are High confidence. Reserve Medium for cases where the policy document itself does not resolve the question (e.g., SaaS implementation phase is unclear from the description).
For every Medium item, state: (1) the pool and sub-pool you've assigned, (2) which alternative pool/sub-pool was considered, (3) the specific fact or contract detail that would resolve the ambiguity, and (4) what action the practitioner should take. Do not leave a Medium classification without a clear "verify by checking X" instruction.
The available information is insufficient to make a defensible classification at either the pool or sub-pool level. The line item may be misrouted, mislabeled in the GL, or represent a cost type not covered by standard TBM definitions. Silently forcing a classification here would undermine the integrity of the cost model.
Assign Low when:
For every Low item, state: (1) all plausible pool/sub-pool assignments, (2) why none can be selected with confidence, and (3) what specific information the practitioner needs to gather (vendor contract, billing statement, cost center owner) to resolve it. Flag Low items prominently in the Review Items section — they represent model risk.
Before assigning Medium or Low, check references/Classification_Decision_Rules.md. Many apparent ambiguities have established resolution patterns (cloud vs. SaaS boundary, staffing vs. outside services, bundled contract treatment). If the decision rules resolve the question, the confidence level may rise to High.
Common scenarios and their typical confidence outcomes:
| Scenario | Typical Confidence | Resolution |
|---|---|---|
| Cloud IaaS/PaaS with clear vendor (AWS, Azure, GCP) | High | Cloud Services / Cloud Service Provider |
| SaaS application from named vendor (Salesforce, ServiceNow) | High | Software & SaaS / SaaS |
| "Professional Services" with no billing model detail | Low | Must verify T&M (→ Staffing) vs. fixed-price (→ Outside Services) with contract |
| Contractor from named staffing agency | High | Staffing / Staff Augmentation |
| Managed service with SLA terms | High | Outside Services / Managed Services |
| Bundled contract — components not priced separately | Medium | Classify to dominant component; flag for contract review |
| Generic "IT Consulting" with large amount | Low | Need vendor, SOW, or billing detail |
| Hardware maintenance/support agreement | High | Hardware / Maintenance & Support |
| Microsoft Enterprise Agreement (bundled) | Medium | Needs contract breakdown: Licensing + Cloud Services + SaaS components |
| Data center lease from colo provider | Medium | Verify if pure space (DC Facilities / Lease) or managed service (Outside Services / Managed Services) |
| Depreciation charge | High (for sub-pool) | Route to D&A sub-pool of underlying asset's pool |
| Internal IT cross-charge | High | Cross Charges / By Internal Department |
Generate a structured cost pool and sub-pool mapping. The output should include:
Summary Table (Pool Level):
| Cost Pool | Total Amount | % of Total | Line Item Count |
|---|---|---|---|
| (each of the 9 pools with totals) | |||
| Unresolved (Low Confidence) | |||
| Not Analyzed (below threshold) | — | ||
| GL Total | 100% |
Classified pool amounts + Unresolved + Not Analyzed must equal the GL Total. Unresolved items carry a cost pool assignment flagged Low confidence; they are included in Review Items and planned for v2 resolution. Not Analyzed items are excluded from pool classification by the materiality threshold set in Step 1b.
Sub-Pool Detail Table:
| Cost Pool | Sub-Pool | Amount | % of Pool | CapEx/OpEx |
|---|---|---|---|---|
| (each sub-pool within each pool) |
Detailed Mapping: For each line item:
Review Items: A separate section listing all Medium and Low confidence classifications with:
If the user provided data in a file, output the results in the same format (CSV or XLSX) with the classification columns appended. If working from a text list, produce a clean markdown table.
After completing the classification, run this sequence before presenting output to any stakeholder. Each step is a gate, not a suggestion.
| Gate | Check | Pass Criteria |
|---|---|---|
| GL Reconciliation | Classified + Not Analyzed = GL Total? | Must be exact |
| Unresolved size | Low confidence items as % of Classified | < 10% = clean; 10–20% = flag; > 20% = do not present without "preliminary" label |
| Medium confidence volume | Medium confidence items as % of Classified | < 15% = clean; 15–25% = flag in narrative and version note; > 25% = do not present as finalized without explicit "preliminary model" label |
| Not Analyzed documented | Is the materiality threshold and excluded amount recorded? | Must be explicit in output |
| Misc Costs size | Misc Costs as % of total | Flag if > 5%; recommend further decomposition |
| Cross Charges netting | Do Cross Charges net to zero at consolidated IT level? | Must net to zero |
| Distribution sanity | Does the pool distribution pass a basic reasonableness check? | Staffing 30–45%; no single pool > 60% without explanation |
| Version labeled | Is output labeled with a version number and known limitations? | See 5c |
Every cost pool model output must carry a version label. Assign v1.0 to the first model produced. Increment to v1.1, v1.2 (minor refinements) or v2.0 (significant resolution of Unresolved items) for subsequent iterations.
Include a brief version note with the output:
Model Version: v1.0 Analysis Date: [date] Materiality Threshold: $[X] — items below this threshold excluded from item-level classification Not Analyzed: $[X] ([X]% of GL total) — [N] items below threshold, intentionally excluded Unresolved (Low Confidence): $[X] ([X]% of Classified amount) — [N] items flagged for v2 resolution Pending Verification (Medium Confidence): $[X] ([X]% of Classified amount) — [N] items classified with defensible assumptions; verification actions listed in Review Items Planned next iteration: [brief description of what Low and Medium confidence items will be resolved and how]
Part 1 — Executive Summary (≤ 200 words)
Write a tight paragraph covering: spend profile (dominant pools, CapEx/OpEx split, cloud posture, labor mix), model coverage ($X of $Y GL total, Not Analyzed amount), and model maturity (version, Unresolved %, Medium confidence %). Close with an unambiguous presentation readiness statement using one of the three verdicts below — no hedging, no conditional language.
| Condition | Verdict |
|---|---|
| Unresolved ≤ 10% AND Medium ≤ 15% | READY TO PRESENT. This model is suitable for presentation to finance leadership as a finalized v[X] cost pool classification. |
| Unresolved ≤ 20% AND Medium ≤ 25% (and at least one threshold is between the clean and hard limits) | PRESENT AS PRELIMINARY. This model should be labeled a preliminary v[X] when presented to finance leadership. Resolve the items listed in the Detail section before treating classification as final. |
| Unresolved > 20% OR Medium > 25% | NOT READY TO PRESENT. Do not present this model to finance leadership in its current state. Complete the verification actions in the Detail section and re-run the quality gate before scheduling any review. |
Part 2 — Detail (bullet format)
Follow the Executive Summary with a structured bullet section. Include all of the following that apply:
Example Executive Summary:
This is a cloud-forward IT cost structure with Cloud Services (32%) and Software & SaaS (18%) accounting for half of total spend. Staffing at 29% reflects a 70/30 internal-to-contractor split. CapEx represents 12% of Classified spend, concentrated in Hardware and SaaS implementation projects. This v1.0 model classifies $18.2M of $19.1M total GL spend; $0.9M (4.7%) falls below the $10K materiality threshold and is Not Analyzed by design. Zero items are Unresolved (Low confidence). Seventeen items totaling $39.4M (19.3% of Classified) carry Medium confidence, primarily bundled vendor contracts whose component splits are estimated pending contract schedule confirmation.
PRESENT AS PRELIMINARY. This model should be labeled a preliminary v1.0 when presented to finance leadership. The $39.4M in Medium confidence items — while classified using defensible estimates — requires contract schedule confirmation before the model is treated as final. Verification actions are listed below.
The classification workflow is decomposed into four discrete stages, each producing an intermediate file consumed by the next. This stage-gate model keeps each generated output under ~15K characters, eliminates the need to re-run classification if Excel generation fails, and creates a review checkpoint between the judgment-intensive stage and the mechanical stages.
What it does: Reads the source CSV, applies the materiality threshold, checks each GL item against the Bundled Contract Registry, and writes a 1_classification_map.csv with these columns:
Unified_GL, Cost_Pool, Sub_Pool, CapEx_OpEx, Confidence, Bundle_Component, Bundle_Pct, Classification_Notes
Key rules for this stage:
1_classification_map.csv.Why this helps: The classification decisions are written as CSV rows (far more compact than embedded Python dict literals). An 89-row classification CSV is ~12K chars including notes — well under the generation budget.
What it does: Reads the source data CSV and 1_classification_map.csv, joins them on Unified_GL, multiplies Budget/Actual/Forecast amounts by Bundle_Pct, and writes 2_classified_detail.csv with these columns:
Unified_GL, Description, Cost_Center, Vendor, Budget_Amount, Actual_Amount, Forecast_Amount,
Above_Threshold, Cost_Pool, Sub_Pool, CapEx_OpEx, Confidence, Bundle_Component, Classification_Notes
Key rules:
2_classified_detail.csv.Why this helps: This stage is <50 lines of Python and produces the master data file that both the Excel generator and the quality gate consume.
What it does: Reads 2_classified_detail.csv and generates the formatted 4-tab Excel workbook (Pool Summary, Sub-Pool Detail, Line Item Detail, Review Items).
Key rules:
references/excel_template.py in the skill folder. If the template exists, read and execute it instead of regenerating the formatting code. If it doesn't exist, generate it once and save it for future runs.2_classified_detail.csv as its input and accepts the output path as a parameter.Why this helps: On repeat runs, this stage requires zero LLM generation — it just executes the saved template. Even on the first run, the template is ~12K chars (formatting code only, without classification data embedded).
What it does: Reads 2_classified_detail.csv, runs all quality gate checks from Step 5, and produces the narrative summary directly in chat (not as a file).
Key rules:
Why this helps: The narrative is generated from computed metrics, not from classification logic — it is always small.
EXECUTION SEQUENCE:
1. Run Stage 1 (classify). Write 1_classification_map.csv. Pause.
→ Show user: "Classification complete. [N] items classified, [M] bundled items expanded.
Review 1_classification_map.csv before proceeding?"
→ User can inspect/adjust the CSV at this checkpoint.
2. Run Stage 2 (expand). Write 2_classified_detail.csv.
→ Print reconciliation check to chat.
3. Run Stage 3 (generate Excel).
→ If references/excel_template.py exists: execute it.
→ If not: generate the template, save it to references/excel_template.py, then execute it.
→ Save Excel to run output folder.
4. Run Stage 4 (quality gate + narrative).
→ Print full narrative summary to chat.
→ Link the Excel file for user download.
IMPORTANT: Stages 2–4 can be combined into a single execution block after Stage 1 is approved.
The critical boundary is between Stage 1 (judgment) and Stages 2–4 (mechanical).
If the user says "run it all" or doesn't want to pause, execute all four stages sequentially
but still produce the intermediate CSV files for auditability.
When producing file outputs in Cowork:
This skill reflects TBM Taxonomy v5.0.1 as maintained by the TBM Council. Key changes from earlier versions:
This skill uses a stage-gate execution architecture to handle GL datasets of any size without hitting output token limits. The classification stage (Stage 1) is the only LLM-generated code; all other stages are mechanical and templated.
For very large datasets (200+ GL items), Stage 1 can itself be batched:
Each batch appends to the same 1_classification_map.csv. The expand, Excel, and quality gate stages run once after all batches are complete.