Business Requirements Document
Microsoft CSP Quote Audit Enhancement
| Field |
Value |
| Document Version |
1.0 - Draft |
| Date |
February 13, 2026 |
Document Control
| Version |
Date |
Author |
Changes |
| 0.1 |
2026-02-13 |
Kelvin Duan |
Initial draft based on meeting transcript (Feb 6), background document (Jan 16), SOPs, and research |
Table of Contents
- Background & Context
- Problem Statement
- Project Scope
- Current State Process
- Pain Points & Gap Analysis
- Business Requirements
- Data Requirements
- 7.1 Data Sources Required
- 7.2 Data Quality Requirements
- 7.3 Automated Data Ingestion & Refresh
- 7.4 Database Structure Optimization
- 7.5 AI-Ready Data Storage
- Stakeholders
- Constraints
- Assumptions
- Dependencies
- Success Criteria & KPIs
- Risks
- Required Information
- Glossary
- References
1. Background & Context
1.1 Organizational Context
Softchoice operates as a Microsoft Cloud Solution Provider (CSP) partner, reselling Microsoft cloud subscriptions and licenses to end customers. The licensing operations team ("coding specialists") manually create quotes in Salesforce CPQ based on requests from Account Executives (sellers), then place orders via Microsoft Partner Center and App Direct Marketplace.
The overall Microsoft Quoting Accuracy initiative (documented in "Microsoft CPQ Accuracy Controls", Jan 16 2026 meeting) identified 7 scope items. This project focuses specifically on Scope Item #2: Quote Quality Audit Automation, with dependencies on Scope Item #4 (Data Integration & Quality).
1.2 Business Driver
Quote accuracy is one of the most cited customer and Sales concerns at the SLT level. Incorrect quotes result in:
- Financial risk to Softchoice (incorrect pricing, missed concessions)
- Negative customer experience (missing licenses, wrong billing terms)
- Operational overhead (rework, disputes with customers and/or Microsoft)
1.3 Current Initiative Status
The Emerging Tech team (Faizan Ahmad, Emmanuel Eraikhuemen) has built a first-generation quote audit automation for CSP using Microsoft Copilot Studio, Power Automate, Dataverse, and Microsoft Fabric. CSP audit automation is operational. EA audit work has started. This project aims to enhance the existing capability with advanced technologies including AI.
| Scope Item |
Description |
Status |
Relationship |
| #1 Automating Sell Price & Supplier Cost |
Automate correct pricing in CPQ via SPE |
Inflight (DMND0002876, DMND0002894) |
Out of audit scope — covers sell price/markup accuracy, separate from this project |
| #2 Quote Quality Audit Automation |
This project |
Inflight (CSP complete, EA started) |
This project |
| #3 Audit History |
Quote field change tracking in CPQ |
Inflight |
Adjacent — could provide audit trail data |
| #4 Data Integration & Quality |
Microsoft pricing/cost data into SPE/CPQ |
Inflight |
Dependency — provides the reference data this audit needs |
| #5 CPQ Improvements |
Logic enforcement, missing data objects |
TBD |
Future — would reduce errors that audit catches |
| #6 SFDC Cases |
Case limitations for pricing/SKU info |
TBD |
Adjacent — better case data improves audit extraction accuracy |
| #7 Legacy Programs (MPSA, Select Plus) |
Pricing logic for legacy programs |
TBD |
Future scope expansion |
2. Problem Statement
2.1 Core Problem
The Microsoft quote creation process relies on manual data entry by coding specialists who must cross-reference information across multiple systems (Salesforce cases, Metamix price files, Microsoft Partner Center) under time pressure. The current AI-based quote audit catches errors after quotes are created, but suffers from:
-
Incomplete data extraction — The AI agent cannot reliably extract product requirements from unstructured case descriptions (free-form text with spelling errors, vague information, noise), and cannot process case attachments (Excel, Word, PDF, email) which represent ~20% of requests.
-
Limited data accessibility — Reference data (pricing, entitlements, agreements) is obtained via Excel file downloads rather than APIs, resulting in stale data and manual refresh processes.
-
Unauditable edge cases — Promotional pricing, locked-in pricing (historical customer rates), and mid-month pricing changes cannot be validated by the current automation.
-
Feedback latency — The current audit feedback loop averages 3 hours from quote creation to error notification. Business target is 1-2 hours. Long-term vision is real-time guardrails during quote creation.
2.2 Business Impact
| Impact Area |
Description |
| Financial |
Incorrect supplier costs on quotes create direct margin erosion; incorrect customer pricing leads to disputes and potential write-offs |
| Customer Experience |
Missing licenses or wrong billing terms discovered post-order erode customer trust and create rework |
| Operational |
Manual validation of audit results, manual lookup for edge cases, rework cycle for error correction |
| Compliance |
Quotes not matching Microsoft agreement terms may violate partner obligations |
3. Project Scope
3.1 In Scope
3.1.1 Quote Audit Checks — Primary
A. Item Integrity (ensuring all requested products are precisely listed)
| Check |
Description |
Current State |
| SKU Correctness |
Requested product/license matches quoted product (no wrong variations, e.g., Power BI Pro vs Power BI Premium) |
Automated via AI extraction — not 100% accurate due to unstructured text |
| Quantity Completeness |
All requested items present with correct counts; nothing missing |
Automated — limited by extraction accuracy |
| Billing Term Match |
Requested billing term (month-to-month, monthly on annual, annual upfront) matches quoted term and SKU |
Automated — edge cases exist where SKU unavailable in requested term |
| Renewal Completeness |
All active Partner Center subscriptions included in renewal quote (e.g., 20 subscriptions, not 19) |
Automated via entitlements data comparison |
B. Supplier Cost Accuracy (ensuring Microsoft's price to Softchoice is correctly applied)
| Check |
Description |
Current State |
| Special Cost Match |
Quote's special cost matches current Metamix pricing for that SKU/term/billing type combination |
Automated via Metamix lookup in Fabric |
| Locked-in Pricing |
If customer previously purchased the same subscription, same price must be used unless Microsoft cost changed |
Not automated — requires manual lookup into prior quotes |
| Promotional Pricing |
Time-limited promotional discounts correctly applied |
Not automated — manually validated by specialists |
| Currency/Region Alignment |
Quote currency (USD/CAD) matches pricing source (US/CA Metamix worksheet) |
Automated via structured case fields |
3.1.2 Quote Audit Checks — Secondary
| Check |
Description |
Current State |
| Header/Memo Completeness |
Correct billing type descriptor, validity month, auto-renewal date reference |
Automated (text matching) |
| Disclaimer Presence |
24-hour cancellation notice, billing information |
Automated (text matching) |
3.1.3 Enhancement Areas
| Enhancement |
Description |
| Improved data extraction from unstructured text |
Higher accuracy AI extraction from case descriptions with spelling errors, abbreviations, vague info |
| Attachment processing |
Extract product lists, quantities, pricing from Excel, Word, PDF, and email attachments (~20% of cases) |
| API-based data sourcing |
Replace Excel file dependencies with Partner Center REST APIs and/or more frequent Fabric refreshes |
| Reduced audit feedback time |
From ~3 hours toward 1-2 hours, with 5-10 minute automated check capability |
| Locked-in pricing automation |
Automated cross-reference against prior term quotes |
| Promotional pricing validation |
Structured data for promo discounts enabling automated checks |
| EA program expansion |
Extend audit to Enterprise Agreement quotes (in progress) |
3.1.4 Microsoft Programs In Scope
| Program |
Priority |
Status |
| CSP NCE (New Commerce Experience) |
High |
Audit automation operational |
| CSP Perpetual |
High |
Audit automation operational |
| CSP Legacy |
Low |
Available but low volume |
| EA (Enterprise Agreement) |
High |
Work started; different data sources required |
3.2 Out of Scope
| Item |
Reason |
| Sell price / markup accuracy (Softchoice → Customer price) |
Covered by Scope Item #1 (DMND0002876/DMND0002894) via SPE in Salesforce. Faizan confirmed in meeting: "For the code audit purposes, we will be just looking at the special pricing and then we don't have that capability to look at [sell price]... that's just on the Salesforce, the SPE." |
| Quote creation automation |
Adjacent goal (Barbara's guardrails vision) but separate initiative. This project focuses on audit after creation. Audit data/logic may later feed into guardrails. |
| Credit check process |
Separate task that occurs after quote creation; not part of audit |
| Order placement |
Downstream of quote; audit occurs before order |
| EES / MPSA programs |
Future scope; data sources not yet identified |
| Salesforce CPQ modifications |
Covered by Scope Item #5 (CPQ Improvements) |
| SAP billing / material add |
Post-order process, not part of quote audit |
3.3 Scope Boundaries — Clarifications Needed
| Item |
Question for Business Team |
| Sell price validation |
Should sell price / markup accuracy be added to the audit scope for this project, or remain with Scope Item #1? The current audit only validates supplier cost. |
| Guardrails vs. Audit |
Should this project deliver a re-usable validation service that could also be called during quote creation (guardrails), or strictly the post-creation audit? |
| EA scope depth |
What specific audit checks are needed for EA beyond what CSP covers? Proration validation? Agreement-level pricing tiers? |
4. Current State Process
4.1 End-to-End Audit Flow
Seller (AE) creates a Case in Salesforce
│ Provides: customer name, agreement #, requested products,
│ quantities, billing terms in case description (free text)
│ Sometimes: attaches Excel/Word/PDF/email with details
▼
Coding Specialist creates Quote in Salesforce CPQ
│ Looks up: Metamix for pricing, Partner Center for entitlements
│ Manually: adds products, sets special cost, sets dates/terms
│ Links: SC Agreement (contract/tenant)
▼
Quote Creation Complete → Automation Triggers
│
▼
Copilot Studio AI Agent (via Power Automate)
│ Step 1: Extract request details from case
│ - Structured fields: agreement #, billing option (100% accurate)
│ - Free text description: SKU names, quantities (AI extraction, <100% accurate)
│ - Attachments: NOT processed (skipped)
│ Step 2: Read quote details from Salesforce (via Power Automate connectors)
│ - Product codes, quantities, special cost, dates, terms
│ Step 3: Look up reference data from Fabric
│ - Metamix pricing (monthly refresh)
│ - CSP Entitlements (daily refresh)
│ Step 4: Compare and flag discrepancies
│ - SKU match, quantity match, billing term match
│ - Special cost match against Metamix
│ - Renewal completeness against entitlements
│ - Header/disclaimer text checks
│ Step 5: Save results to Dataverse
▼
Manual Validator reviews audit results
│ Checks for false fails (promo pricing, edge cases, AI extraction errors)
│ Validates true errors before sending feedback
▼
If errors found: Salesforce Task created for Coding Specialist
│ Specialist corrects quote, notifies AE
▼
Corrected Quote → released to customer
4.2 Current Technical Architecture
┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Salesforce CPQ │◄───►│ Power Automate │◄───►│ Copilot Studio │
│ (Cases, Quotes, │ │ (Orchestration) │ │ (AI Agent) │
│ Opportunities) │ └────────┬─────────┘ └──────────────────┘
└─────────────────┘ │
▼
┌──────────────────┐
│ Dataverse │
│ (Audit Results) │
└────────┬─────────┘
│
▼
┌──────────────────┐ ┌──────────────────┐
│ Microsoft Fabric │◄────│ SharePoint │
│ (Lakehouse 100) │ │ (Metamix files, │
│ │ │ Entitlements) │
│ Tables: │ └──────────────────┘
│ - CSP_Entitlements│
│ - Metamixed_CSP_ │
│ NCE/Perpetual/ │
│ Legacy │
└──────────────────┘
4.3 Current Data Refresh Frequencies
| Data Source |
Refresh Frequency |
Refresh Method |
Staleness Risk |
| CSP Entitlements |
Daily |
Full replace from SharePoint email → Fabric |
Low (daily) |
| Metamix CSP NCE |
Monthly (sometimes twice) |
Manual upload from SharePoint → Fabric |
Medium — mid-month pricing changes create gaps |
| Metamix CSP Perpetual |
Monthly |
Manual upload → Fabric |
Low (pricing changes less frequently) |
| Metamix CSP Legacy |
Monthly |
Manual upload → Fabric |
Low (low volume) |
| Salesforce case data |
Real-time |
Power Automate connector |
None |
| Salesforce quote data |
Real-time |
Power Automate connector |
None |
5. Pain Points & Gap Analysis
| # |
Pain Point |
Impact |
Current Mitigation |
Severity |
| PE-1 |
AI extraction from unstructured case descriptions is not 100% accurate |
Incorrect SKU identification leads to false audit failures; missed items go undetected |
Manual validator reviews all results |
High |
| PE-2 |
~20% of cases have requirements in attachments (Excel, Word, PDF, email) that AI cannot read |
These cases cannot be fully audited; audit is skipped or incomplete for attachment content |
Business has asked sellers to copy details into case description, but compliance is partial |
High |
| PE-3 |
Free-form text contains spelling errors, abbreviations, vague descriptions, and noise |
AI misinterprets product names, quantities, or billing terms |
Manual validation catches most errors |
Medium |
| PE-4 |
Edge cases where SKU is unavailable in requested billing type — specialist substitutes different term and notes it in the quote |
Audit flags this as an error (false positive) because request doesn't match quote |
Manual validator overrides false positive |
Medium |
5.2 Data Accessibility & Quality Pain Points
| # |
Pain Point |
Impact |
Current Mitigation |
Severity |
| PD-1 |
No API access to most Microsoft data; relies on Excel file downloads |
Data is stale, manual processes prone to error, no real-time validation possible |
Scheduled uploads to Fabric |
High |
| PD-2 |
Metamix pricing updates monthly; Microsoft can change pricing mid-month |
Audit may compare against outdated pricing; false failures or missed real errors |
Grace manually refreshes when notified; sometimes twice monthly |
High |
| PD-3 |
Multiple teams have data in different formats and columns |
No single source of truth; different teams may reference different pricing versions |
Each team maintains their own copy |
Medium |
| PD-4 |
Locked-in pricing (historical customer rates) requires manual lookup into prior quotes |
Cannot be automated without access to prior quote data; adds manual effort |
Specialist manually checks; audit cannot validate |
High |
| PD-5 |
Promotional pricing not in structured data |
Audit flags promoted prices as errors (false fails) |
Manual validator checks promo manually |
Medium |
| PD-6 |
EA data requires 3-4 Excel files from VL Central; no API |
Same Excel dependency problem extending to new program |
Someone downloads reports manually |
Medium |
| PD-7 |
Fabric Lakehouse 100 (silver level) not accessible org-wide |
Other teams cannot leverage the audit data; limits data sharing |
Need to migrate to Lakehouse 200 |
Low |
| PD-8 |
No automated data ingestion pipelines — Metamix upload depends on single person (Grace) manually saving files |
Single point of failure; delays when person is unavailable; no retry on failure |
Manual process; team notifies Grace of changes |
High |
| PD-9 |
No historical pricing retained — full-replace refresh overwrites previous data |
Cannot look up "What was the price 3 months ago?" for locked-in pricing validation |
Manual lookup into prior Salesforce quotes |
High |
| PD-10 |
Flat table structure with no dimensional model — 4 independent silos |
Cannot cross-reference across programs; no unified product or customer dimension; not optimized for analytical or AI queries |
Each table queried independently |
Medium |
| PD-11 |
SOPs and business rules exist only as reference documents — not consumable by AI agents for grounding |
AI agent cannot reference SOP edge cases during audit reasoning; rules must be hardcoded in automation logic |
SOPs used for manual training only |
Medium |
| PD-12 |
No semantic layer over Fabric data — raw table schemas are not AI-friendly |
AI agents must understand raw column names (e.g., MFGSKU, DateUpsert) rather than business concepts (e.g., "product code", "last updated") |
N/A — AI agents have limited data access currently |
Medium |
5.3 Process & Timing Pain Points
| # |
Pain Point |
Impact |
Current Mitigation |
Severity |
| PP-1 |
Audit feedback takes ~3 hours from quote creation |
Errors discovered late; customer may already have received incorrect quote |
Goal to reduce to 1-2 hours |
High |
| PP-2 |
Audit is after-the-fact, not a gatekeeper |
Incorrect quotes can be sent to customers before audit completes |
Long-term vision: guardrails during creation |
Medium |
| PP-3 |
Manual validation required for all audit results due to false positives |
Human bottleneck; validators needed for every audit batch |
Cannot be removed until accuracy improves |
High |
| PP-4 |
No automated feedback for "clean" quotes — only errors flagged |
Coding specialists don't know if their quote was reviewed and passed |
N/A |
Low |
6. Business Requirements
6.1 Functional Requirements
| ID |
Requirement |
Priority |
Rationale |
| FR-1.1 |
The system shall extract product/SKU names, quantities, and billing terms from unstructured case description text with higher accuracy than the current implementation |
High |
Addresses PE-1: current AI extraction is not 100% accurate |
| FR-1.2 |
The system shall process case attachments (Excel, Word, PDF, email formats) to extract product lists, quantities, and pricing information |
High |
Addresses PE-2: 20% of cases have requirements in attachments |
| FR-1.3 |
The system shall handle common variations in product naming (abbreviations, misspellings, partial names) and map them to correct Microsoft SKUs |
Medium |
Addresses PE-3: free-form text quality issues |
| FR-1.4 |
The system shall flag cases where extracted request details have low confidence, rather than treating them as definitive |
Medium |
Reduces false positive rate |
FR-2: Enhanced Audit Checks
| ID |
Requirement |
Priority |
Rationale |
| FR-2.1 |
The system shall validate that all products requested (including from attachments) are present in the quote with correct SKU codes |
High |
Core item integrity check |
| FR-2.2 |
The system shall validate that quoted quantities match requested quantities for each product |
High |
Core item integrity check |
| FR-2.3 |
The system shall validate that quoted billing terms match requested billing terms |
High |
Core item integrity check |
| FR-2.4 |
The system shall validate that special cost (supplier cost) on each quote line matches current Metamix/Microsoft pricing for that SKU, term duration, billing plan, segment, and currency |
High |
Core supplier cost accuracy check |
| FR-2.5 |
For renewal quotes, the system shall validate that all active subscriptions from Partner Center entitlements are included in the quote |
High |
Renewal completeness check |
| FR-2.6 |
For renewal quotes, the system shall cross-reference against the prior term's quote to verify locked-in pricing consistency |
High |
Addresses PD-4: locked-in pricing currently manual |
| FR-2.7 |
The system shall validate presence of required headers, disclaimers, and billing information text on quotes |
Low |
Secondary check; lower business priority |
| FR-2.8 |
The system shall recognize and correctly handle edge cases where a coding specialist substitutes an unavailable billing term and documents the substitution in the quote |
Medium |
Addresses PE-4: reduces false positives |
FR-3: Data Freshness & Accessibility
| ID |
Requirement |
Priority |
Rationale |
| FR-3.1 |
Microsoft pricing data used for audit shall be no more than 24 hours stale for CSP programs |
High |
Addresses PD-2: monthly refresh is insufficient |
| FR-3.2 |
Customer entitlements data shall be refreshed at least daily (current state maintained) |
High |
Current daily refresh is adequate |
| FR-3.3 |
The system shall support mid-month pricing updates within 24-48 hours of Microsoft publishing changes |
High |
Addresses PD-2: mid-month updates create gaps |
| FR-3.4 |
The system shall provide a single, authoritative data source for Microsoft pricing accessible to the audit process |
Medium |
Addresses PD-3: multiple teams with different data |
FR-4: Audit Timeliness
| ID |
Requirement |
Priority |
Rationale |
| FR-4.1 |
The automated audit check (before manual validation) shall complete within 5-10 minutes of triggering |
High |
Per Faizan: "waiting for like 5-10 minutes, that's doable" |
| FR-4.2 |
The full audit cycle (including manual validation where needed) shall target completion within 1-2 hours of quote creation |
High |
Business target stated by Emmanuel, confirmed by Elizabeth/Barbara |
| FR-4.3 |
The system shall reduce the percentage of audit results requiring manual validation (by reducing false positives) |
High |
Addresses PP-3: manual validation bottleneck |
FR-5: EA Program Support
| ID |
Requirement |
Priority |
Rationale |
| FR-5.1 |
The system shall support audit of Enterprise Agreement quotes with EA-specific data sources |
High |
EA audit work has started; different data needs |
| FR-5.2 |
The system shall support EA proration calculations (prorated based on remaining months in agreement) |
Medium |
EA-specific pricing logic |
| FR-5.3 |
The system shall integrate EA data from VL Central Excel exports (agreement data, special pricing, offering details) |
High |
Required for EA audit; API access not available |
6.2 Non-Functional Requirements
| ID |
Requirement |
Priority |
Rationale |
| NFR-1 |
The solution shall be implementable on the existing Azure stack (Fabric, Copilot Studio, Power Automate, Dataverse) or Azure-native extensions |
High |
Enterprise platform constraint |
| NFR-2 |
The system shall support < 100 concurrent users |
Low |
Current scale is ~60 coding specialists; low concurrency confirmed |
| NFR-3 |
The system shall maintain an audit trail of all validation checks performed and their results |
Medium |
Accountability and process improvement |
| NFR-4 |
The system shall not introduce additional steps into the coding specialist's quote creation workflow |
Medium |
Emmanuel cautioned about adding steps and SLA impact |
| NFR-5 |
The system shall not block or delay quote delivery to customers (audit remains non-gatekeeper) |
High |
Explicit requirement from Emmanuel: "audits generally should not be gatekeepers" |
| NFR-6 |
The solution shall be extensible to additional Microsoft programs (EES, MPSA) in the future |
Medium |
Future scope identified |
7. Data Requirements
7.1 Data Sources Required
Source 1: Case Request Data (from Salesforce)
| Data Element |
Field Location |
Extraction Method |
Accuracy |
| Agreement Number / Tenant ID |
Case dynamic fields |
Structured field read |
100% |
| Billing Options |
Case dynamic fields |
Structured field read |
100% |
| Customer Details |
Case dynamic fields |
Structured field read |
100% |
| Sales Organization (1000=CAD, 2000=USD) |
Case / Opportunity |
Structured field read |
100% |
| Requested SKUs / Product Names |
Case.Description |
AI extraction from free text |
<100% |
| Requested Quantities |
Case.Description |
AI extraction from free text |
<100% |
| Requested Billing Terms |
Case.Description |
AI extraction from free text |
<100% |
| Attachment Contents |
ContentVersion.VersionData |
Document Intelligence + AI |
Not currently available |
Required Information: What are the exact Salesforce field API names for the structured case fields? Is there a custom lookup from Case to Quote or Opportunity?
Source 2: Quote Data (from Salesforce CPQ)
| Data Element |
Object / Field |
Access Method |
| Product Code (SKU) |
SBQQ__QuoteLine__c.SBQQ__ProductCode__c |
Salesforce REST API / Power Automate |
| Quantity |
SBQQ__QuoteLine__c.SBQQ__Quantity__c |
Salesforce REST API / Power Automate |
| Special Cost |
SBQQ__QuoteLine__c — custom field? |
Salesforce REST API / Power Automate |
| Sell Price |
SBQQ__QuoteLine__c.SBQQ__NetPrice__c |
Salesforce REST API / Power Automate |
| Start Date / End Date |
SBQQ__Quote__c.SBQQ__StartDate__c / EndDate |
Salesforce REST API / Power Automate |
| Billing Term / Term Duration |
SBQQ__Quote__c — custom field? |
Salesforce REST API / Power Automate |
| Quote Type (Quote/Amendment/Renewal) |
SBQQ__Quote__c.SBQQ__Type__c |
Salesforce REST API / Power Automate |
| SC Agreement linkage |
Quote → SC Agreement → Tenant ID |
Salesforce REST API / Power Automate |
| Quote Line Group headers/memos |
SBQQ__QuoteLineGroup__c.Name |
Salesforce REST API / Power Automate |
Required Information: What is the exact Salesforce field for "Special Cost" on the quote line? Is it a standard CPQ field (SBQQ__UnitCost__c or SBQQ__SpecialPrice__c) or a custom field? Same question for billing term/subscription term on the quote.
| Data Element |
Current Source |
Potential API Source |
Refresh |
| NCE Product Code, SKU Title, Unit Price, ERP Price |
Metamixed_CSP_NCE (Fabric) |
Partner Center Price Sheet API (updatedlicensebased) |
Monthly → could be daily via API |
| NCE Term Duration (P1M, P1Y) and Billing Plan (Monthly, Annual) |
Metamixed_CSP_NCE (Fabric) |
Partner Center Price Sheet API |
Monthly → could be daily via API |
| Perpetual ProductId, SKU Title, Unit Price |
Metamixed_CSP_Perpetual (Fabric) |
Partner Center Price Sheet API (software) |
Monthly → could be daily via API |
| Legacy pricing |
Metamixed_CSP_Legacy (Fabric) |
Unknown if available via API |
Monthly |
| Promotional pricing |
Not in structured data |
Partner Center GetPromotions API |
Not available → could be on-demand |
| Customer-specific special pricing |
Metamix (Softchoice additions to Microsoft pricing) |
No API — Softchoice-internal calculations |
Monthly / ad-hoc |
Required Information: Does the Metamix file contain Softchoice-internal calculations (markups, proration formulas) beyond what Microsoft provides? If so, the Partner Center Price Sheet API alone cannot replace Metamix — it would need to be supplemented with Softchoice's internal pricing logic.
Source 4: Customer Entitlements (Partner Center)
| Data Element |
Current Source |
Potential API Source |
Refresh |
| Active subscriptions per tenant |
CSP_Entitlements (Fabric) |
Partner Center Subscription API |
Daily → could be real-time via API |
| Subscription quantities |
CSP_Entitlements (Fabric) |
Partner Center Subscription API |
Daily → could be real-time via API |
| Renewal dates, auto-renew status |
CSP_Entitlements (Fabric) |
Partner Center Subscription API |
Daily → could be real-time via API |
| Scheduled changes (pending reductions) |
Not available |
Partner Center Subscription API (scheduledNextTermInstructions) |
Not available → could be real-time |
| Billing cycle, term duration |
CSP_Entitlements (Fabric) |
Partner Center Subscription API |
Daily → could be real-time via API |
Source 5: Prior Quote Data (for locked-in pricing cross-reference)
| Data Element |
Source |
Access Method |
| Prior term quote for same account/agreement |
Salesforce CPQ |
SOQL query via SBQQ__Account__c or SBQQ__MasterContract__c |
| Prior quote line item pricing (Special Cost, Sell Price) |
SBQQ__QuoteLine__c on prior quote |
Salesforce REST API |
| Field Margin % |
SAP Sales Contract (Conditions tab) OR prior Salesforce quote |
SAP: VA43 (manual); SFDC: SOQL query |
Required Information: Is SAP accessible via REST/OData API for reading Sales Contract conditions, or only via GUI (TCode VA43)? This determines whether Field Margin % lookup can be automated.
Source 6: EA Program Data (future)
| Data Element |
Source |
Access Method |
| EA Agreement details |
VL Central Excel export |
Manual download → Fabric |
| EA Special Pricing |
VL Central Excel export |
Manual download → Fabric |
| EA Offering details |
VL Central Excel export |
Manual download → Fabric |
Required Information: Which specific VL Central reports are needed? Who currently downloads them? Is there API access to VL Central?
7.2 Data Quality Requirements
| Data Source |
Required Accuracy |
Required Freshness |
Current Gap |
| Metamix pricing |
100% (authoritative source) |
Within 24 hours of Microsoft update |
Monthly refresh; mid-month changes create gaps |
| CSP Entitlements |
100% (authoritative source) |
Daily (current state acceptable) |
None — daily refresh is adequate |
| Case structured fields |
100% |
Real-time |
None — direct Salesforce read |
| Case description extraction |
Target: >95% (improvement over current) |
Real-time |
Current accuracy is undocumented but acknowledged as <100% |
| Attachment extraction |
Target: >90% (new capability) |
Real-time |
Not available today (0%) |
7.3 Automated Data Ingestion & Refresh
A critical gap in the current process is the manual, infrequent refresh of reference data. The audit's accuracy depends directly on data freshness. This section defines requirements for automating data ingestion.
7.3.1 Current State: Manual Ingestion
| Data Source |
Current Ingestion Method |
Refresh Trigger |
Who Performs |
Pain Point |
| CSP Entitlements |
Daily email with Excel → manual upload to SharePoint → Fabric reads from SharePoint |
Daily (automated email, semi-manual upload) |
Unknown (possibly automated) |
Not fully controlled; depends on email delivery; if email fails, data goes stale |
| Metamix CSP NCE |
Grace creates Excel file → saves to SharePoint → Fabric reads |
Monthly or ad-hoc when Grace is notified of changes |
Grace (Licensing OPS) |
Monthly is too infrequent; mid-month changes missed; single person dependency |
| Metamix CSP Perpetual |
Same as NCE |
Monthly |
Grace |
Same as NCE |
| Metamix CSP Legacy |
Same as NCE |
Monthly |
Grace |
Same as NCE |
| EA Agreement Data |
Manual download from VL Central |
Ad-hoc |
TBD |
Not yet integrated; no automation |
| EA Special Pricing |
Manual download from VL Central |
Ad-hoc |
TBD |
Not yet integrated; no automation |
| Salesforce Case/Quote data |
Power Automate connector (real-time) |
Event-driven (on quote creation) |
Automated |
Adequate — no change needed |
7.3.2 Target State: Automated Ingestion Pipelines
| FR ID |
Requirement |
Priority |
Target Frequency |
Feasible Technology |
| FR-6.1 |
Microsoft CSP pricing data shall be ingested automatically from Partner Center Price Sheet API into Fabric, replacing or supplementing the manual Metamix upload |
High |
Daily (or on-demand when mid-month update detected) |
Fabric Data Pipeline with REST connector + OAuth2 (App+User auth via Secure Application Model) |
| FR-6.2 |
Customer entitlements data shall be ingested automatically from Partner Center Subscription API into Fabric, replacing the email-based Excel process |
High |
Daily (full replace, matching current pattern) |
Fabric Data Pipeline with REST connector; iterate all customers |
| FR-6.3 |
Promotional pricing data shall be ingested from Partner Center GetPromotions API into Fabric |
Medium |
Weekly or on-demand |
Fabric Data Pipeline with REST connector |
| FR-6.4 |
When a new or updated Metamix file is saved to SharePoint, a pipeline shall automatically trigger to ingest it into Fabric |
High |
Event-driven (on file arrival) |
Power Automate trigger (SharePoint "file created") → Fabric Pipeline REST API → Dataflow Gen2 with SharePoint Folder connector |
| FR-6.5 |
EA data from VL Central Excel exports shall be ingested via automated pipeline once files are placed in a designated SharePoint folder |
Medium |
Event-driven (on file arrival) or monthly scheduled |
Same pattern as FR-6.4 |
| FR-6.6 |
All ingestion pipelines shall implement retry logic (3 retries with exponential backoff) and error notification (Teams/email alert on failure) |
High |
N/A |
Fabric Pipeline activity-level retry + failure branch → notification webhook |
| FR-6.7 |
All ingested data shall include audit metadata: _ingestion_timestamp, _source_system, _source_file, _pipeline_run_id |
Medium |
N/A |
Added as columns during pipeline processing |
| FR-6.8 |
Pricing data ingestion shall preserve historical snapshots (append with snapshot date) rather than replacing previous data, to enable audit trail and locked-in pricing lookups |
High |
Each refresh appends a new snapshot |
Append mode with snapshot_month partition column |
Required Information:
- RI-16: Can Softchoice provision a Fabric Data Pipeline with REST connector capabilities? (Requires Fabric capacity and appropriate licensing)
- RI-17: Is the current CSP Entitlements email configured by Softchoice IT (controllable) or by Microsoft (not controllable)? If controllable, can it be replaced by direct API calls?
7.3.3 Ingestion Architecture (Target State)
PARTNER CENTER APIs SHAREPOINT
Price Sheet API (monthly/daily) ─────┐ │
Subscription API (daily) ────────────┤ │ Metamix file uploaded
GetPromotions API (weekly) ──────────┤ │ VL Central exports
▼ ▼
┌─────────────────────────┐
│ FABRIC DATA PIPELINES │
│ │
│ REST → Notebook/Copy │
│ SharePoint → Dataflow │
│ Salesforce → Copy Job │
│ │
│ + Retry logic │
│ + Error notifications │
│ + Audit metadata │
└────────────┬────────────┘
▼
┌─────────────────────────┐
│ BRONZE LAYER (raw) │
│ Append-only with │
│ snapshot metadata │
└────────────┬────────────┘
▼
┌─────────────────────────┐
│ SILVER LAYER │
│ Cleansed, conformed, │
│ deduplicated │
└────────────┬────────────┘
▼
┌─────────────────────────┐
│ GOLD LAYER │
│ Star schema, │
│ SCD Type 2 dimensions, │
│ Pricing audit trail │
└─────────────────────────┘
7.4 Database Structure Optimization
The current Fabric Lakehouse (Lakehouse 100) uses a flat table structure with 4 tables — essentially raw data loaded directly from source files. This structure has limitations for cross-program auditing, historical pricing lookups, and AI consumption.
7.4.1 Current Structure Limitations
| # |
Limitation |
Impact on Audit |
| DS-1 |
Flat tables with no dimensional model — each Metamix table is an independent silo |
Cannot easily cross-reference pricing across programs (CSP NCE vs Perpetual vs Legacy vs EA) |
| DS-2 |
Full-replace refresh — no historical pricing retained |
Cannot perform locked-in pricing lookups ("What was the price 3 months ago?") |
| DS-3 |
No product dimension — product SKUs duplicated across tables with inconsistent naming |
AI agents and audit logic must handle SKU matching per table rather than using a unified product key |
| DS-4 |
No customer dimension — customer/tenant info only in entitlements table |
Cannot efficiently link a customer's entitlements to their pricing tier and quote history |
| DS-5 |
Lakehouse 100 not accessible org-wide |
Other teams cannot leverage or contribute to the data |
| DS-6 |
No semantic layer — raw table schemas are not AI-friendly |
AI agents must understand raw column names and join logic rather than business concepts |
7.4.2 Target Structure: Medallion Architecture with Dimensional Model
| FR ID |
Requirement |
Priority |
Rationale |
| FR-7.1 |
Reference data shall be organized in a Bronze → Silver → Gold medallion architecture within Fabric Lakehouse |
High |
Industry standard for data quality progression; enables separate concerns for raw ingestion, cleansing, and business-ready consumption |
| FR-7.2 |
The Gold layer shall implement a star schema dimensional model with conformed dimensions shared across all Microsoft programs |
High |
Enables cross-program auditing, unified product/customer views, and efficient analytical queries |
| FR-7.3 |
Product pricing dimensions shall implement SCD Type 2 (Slowly Changing Dimensions) with effective_from, effective_to, and is_current columns |
High |
Enables point-in-time pricing lookups critical for locked-in pricing validation and audit trail |
| FR-7.4 |
A pricing audit trail table shall retain monthly (or per-refresh) snapshots of all pricing data, partitioned by snapshot_month |
High |
Provides immutable audit trail; enables "What was the price on date X?" queries |
| FR-7.5 |
The data model shall be migrated to Lakehouse 200 (Medallion/org-wide) for cross-team accessibility |
Medium |
Enables other teams to consume and contribute to the Microsoft data library |
| FR-7.6 |
The model shall support extensibility to additional Microsoft programs (EA, EES, MPSA) without restructuring existing tables |
Medium |
Avoids rework when new programs are added |
7.4.3 Proposed Dimensional Model (Gold Layer)
Conformed Dimensions (shared across all programs):
| Dimension |
Key Fields |
Sources |
SCD Type |
dim_product |
product_sk (surrogate), product_id, sku_id, sku_title, publisher, unit_of_measure, program_type |
Metamix (all programs), Partner Center Price Sheet |
Type 2 (name/description changes tracked) |
dim_customer |
customer_sk (surrogate), tenant_id, company_name, domain, country, segment |
CSP Entitlements, Partner Center Customer API |
Type 2 (segment/country changes tracked) |
dim_date |
date_key, full_date, year, month, day, fiscal_quarter, is_month_end |
Generated |
Type 0 (static) |
dim_program |
program_sk, program_code (CSP_NCE, CSP_PERP, CSP_LEGACY, EA, EES, MPSA), program_name |
Manual reference |
Type 1 (rarely changes) |
dim_billing_term |
billing_sk, term_duration (P1M, P1Y, P3Y), billing_plan (Monthly, Annual), description |
Derived from Metamix/Price Sheet |
Type 1 |
Fact Tables:
| Fact Table |
Grain |
Key Measures |
Sources |
fact_pricing_snapshot |
One row per product × program × billing term × segment × currency × snapshot_date |
unit_price, erp_price, effective_start, effective_end |
Metamix files, Partner Center Price Sheet API |
fact_entitlements |
One row per customer × subscription × snapshot_date |
quantity, status, auto_renew_enabled, commitment_end_date, renewal_date |
CSP Entitlements, Partner Center Subscription API |
fact_audit_results |
One row per quote × audit check |
check_type, result (pass/fail/review), confidence_score, details_json |
Audit automation output |
Decision/Rule Tables:
| Table |
Purpose |
Format |
ref_audit_rules |
Machine-executable audit validation rules |
JSON rules with conditions, actions, and natural-language ai_context descriptions |
ref_discount_tiers |
Lookup table for discount tier thresholds |
Tabular (program, customer_tier, max_discount_pct, approval_required) |
ref_promo_pricing |
Active promotional pricing details |
Tabular (promo_id, product_id, discount_pct, effective_from, effective_to) |
Required Information:
- RI-18: What is the mapping between Lakehouse 100 / Lakehouse 200 and the Fabric workspace/capacity structure at Softchoice? Is it separate workspaces, separate capacities, or a naming convention?
- RI-19: Does the data team (Elizabeth, Sang, Richard) already have a target dimensional model or naming conventions for Lakehouse 200?
7.5 AI-Ready Data Storage
If AI agents are to be used for extraction, validation, and rule interpretation, the data must be stored in formats that AI can effectively consume. This requires three categories of data storage beyond traditional relational tables.
7.5.1 Three Categories of AI-Consumable Data
Category A: Structured reference data (pricing, entitlements, rules)
- Stored as: Delta tables in Fabric Lakehouse (Gold layer)
- AI access method: Fabric Data Agent queries tables via SQL/DAX; Azure AI Foundry Agent Service connects via Fabric Data Agent as knowledge source
- Requirement: Clean star schema with business-friendly column names and a semantic model (Power BI semantic model) on top
Category B: Unstructured knowledge (SOPs, business rules documentation, edge case guidance)
- Stored as: Documents in OneLake Files section (Markdown or PDF format)
- AI access method: Indexed by Azure AI Search (with vector embeddings) for RAG-based retrieval; AI agents retrieve relevant passages when reasoning about audit decisions
- Requirement: Documents must be chunked, vectorized, and indexed for semantic search
Category C: Semi-structured business rules (executable audit rules with AI context)
- Stored as: JSON rule definitions in Delta tables, with natural-language explanation fields
- AI access method: Rules loaded programmatically for deterministic execution; natural-language
ai_context field used by AI agents for reasoning about exceptions and edge cases
- Requirement: Dual-format — machine-executable conditions + human/AI-readable explanations
7.5.2 Requirements
| FR ID |
Requirement |
Priority |
Rationale |
| FR-8.1 |
A Power BI semantic model shall be created over the Gold layer tables, providing business-friendly names, measures, and relationships that AI agents can query |
High |
Fabric Data Agents use semantic models for DAX generation from natural language; raw table schemas are not AI-friendly |
| FR-8.2 |
SOP documents and business rules documentation shall be stored in OneLake and indexed in Azure AI Search with vector embeddings for semantic retrieval |
High |
Enables RAG: AI agents retrieve relevant SOP passages when reasoning about audit checks, edge cases, and exceptions |
| FR-8.3 |
Audit validation rules shall be stored in a dual-format: JSON for machine execution and natural-language descriptions for AI grounding |
Medium |
Deterministic rules ensure consistent audit results; AI context enables intelligent exception handling |
| FR-8.4 |
The system shall maintain a Fabric IQ Ontology defining key business entities (Product, Customer, Program, PricingTier, Subscription) and their relationships |
Medium |
Gives AI agents semantic understanding of business concepts rather than just table schemas; enables natural-language queries across the data model |
| FR-8.5 |
Historical pricing snapshots shall be queryable by AI agents to support locked-in pricing lookups ("What price did customer X pay for SKU Y in their last term?") |
High |
Core requirement for automating the locked-in pricing check currently done manually |
| FR-8.6 |
The SOP index shall be kept in sync with source documents — when SOPs are updated, the AI Search index shall automatically re-index |
Medium |
Stale SOP index leads to AI agents using outdated procedures |
7.5.3 AI-Ready Architecture
┌────────────────────────────────────────────────────────────────────┐
│ AI CONSUMPTION LAYER │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────────────────┐ │
│ │ Copilot │ │ Foundry │ │ Custom Agents │ │
│ │ Studio Agent │ │ Agent Service│ │ (Azure Functions) │ │
│ └──────┬───────┘ └──────┬───────┘ └───────────┬───────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ FOUNDRY IQ (Unified Retrieval) │ │
│ │ Federates across all knowledge sources below │ │
│ └──────────────┬─────────────────┬───────────────┬──────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────────┐ ┌────────────────┐ ┌──────────────────┐ │
│ │ FABRIC DATA │ │ AZURE AI │ │ FABRIC IQ │ │
│ │ AGENT │ │ SEARCH INDEX │ │ ONTOLOGY │ │
│ │ │ │ │ │ │ │
│ │ Queries Gold │ │ Vector index │ │ Business entity │ │
│ │ layer tables │ │ of SOPs, │ │ definitions, │ │
│ │ via semantic │ │ rules docs, │ │ relationships, │ │
│ │ model (DAX) │ │ edge cases │ │ vocabularies │ │
│ └────────┬─────────┘ └───────┬────────┘ └────────┬─────────┘ │
│ │ │ │ │
└───────────┼───────────────────┼────────────────────┼──────────────┘
│ │ │
▼ ▼ ▼
┌──────────────────┐ ┌────────────────────┐ ┌──────────────────┐
│ GOLD LAYER │ │ ONELAKE FILES │ │ GOLD LAYER │
│ (Delta Tables) │ │ │ │ (Ontology def.) │
│ │ │ SOPs (.md/.pdf) │ │ │
│ dim_product │ │ Business rules │ │ Entity mappings │
│ dim_customer │ │ Edge case docs │ │ to tables and │
│ fact_pricing_* │ │ Training materials │ │ columns │
│ ref_audit_rules │ │ │ │ │
└──────────────────┘ └────────────────────┘ └──────────────────┘
Category A: Category B: Category C:
Structured Data Unstructured Knowledge Semantic Model
7.5.4 SOP Storage Recommendations
The 14 SOP documents currently in SOP_Information/ represent critical business knowledge that AI agents need for reasoning. To make them AI-consumable:
| Recommendation |
Details |
| Store in Markdown format |
Already the case; Markdown chunks well and preserves structure |
| Add structured metadata headers |
Each SOP should have YAML frontmatter: program, category (quoting/ordering/offboarding), effective_date, version |
| Host in OneLake Files section |
Centralizes with other Fabric data; enables OneLake indexer |
| Index in Azure AI Search |
OneLake Files indexer (GA) auto-detects changes and re-indexes; integrated vectorization handles chunking and embedding |
| Section-aware chunking |
Configure indexer to chunk by headings (H2/H3) to keep logical sections together |
Required Information:
- RI-20: Are there additional business rules, edge case documentation, or decision guides beyond the SOPs provided that auditors use when validating results?
8. Stakeholders
| Role |
Name(s) |
Responsibility |
| Executive Sponsor |
Barbara Kochman |
Strategic direction, funding advocacy, executive alignment |
| Executive Decision Makers |
Doug (TBD surname), Matt (TBD surname), Al (TBD surname) |
Investment approval |
| Business Owner (Audit Process) |
Emmanuel Eraikhuemen |
Process requirements, audit SLA, operational decisions |
| Technical Lead (Emerging Tech) |
Faizan Ahmad |
Current implementation owner, data architecture, Copilot Studio agent |
| Solution Architect |
Kelvin Duan |
Solution design, technology evaluation, architecture |
| Solution Architect |
Zang Nguyen |
Solution design, API evaluation |
| Coding Specialists (~60) |
Licensing OPS teams |
End users (quote creators); impacted by process changes |
| Manual Validators |
TBD (couple of people per Emmanuel) |
Review audit results; impacted by accuracy improvements |
| Data Team |
Elizabeth's team (Sang, Richard) |
Lakehouse 200 migration, centralized Microsoft data |
| Pricing Data Owner |
Grace (Licensing OPS) |
Metamix file creation and distribution |
| Business Stakeholders |
Elizabeth, Caitlin |
EA expansion, business requirements |
Required Information: Full names and roles for Doug, Matt, Al (executive decision makers). Names of manual validators. Confirmation of Elizabeth's last name and exact team.
9. Constraints
| # |
Constraint |
Impact |
| C-1 |
Solution must be implementable on Azure platform (Fabric, Copilot Studio, Power Automate ecosystem) |
Limits technology choices to Azure-native services |
| C-2 |
Most Microsoft data accessible only via Excel exports, not APIs |
Limits real-time data freshness for EA/Legacy programs; CSP data may be accessible via Partner Center API (needs verification) |
| C-3 |
Audit must remain non-blocking (not a gatekeeper for quote release) |
Cannot enforce mandatory audit pass before quote delivery |
| C-4 |
No changes to coding specialist workflow (they don't interact with audit directly) |
Solution enhancement is backend; no UI changes to their quote creation process |
| C-5 |
Copilot Studio is the current agent platform; changes to agent platform require justification |
Enhancement should build on existing investment where possible |
| C-6 |
Partner Center App+User MFA enforcement begins April 1, 2026 |
Any API integration must use Secure Application Model by this date |
| C-7 |
Billing API v1 deprecated for NCE data March 15, 2026 |
Billing reconciliation must use v2 on Microsoft Graph |
| C-8 |
Investment proposal required for remaining scope |
Full implementation dependent on funding approval |
10. Assumptions
The following are assumed to be true and should be confirmed by the business team:
| # |
Assumption |
Risk if Invalid |
| A-1 |
A Salesforce Connected App or API integration user already exists (Power Automate currently reads/writes SFDC) |
Would need to provision API access; adds timeline |
| A-2 |
Azure AI services (Azure OpenAI, Document Intelligence) can be provisioned in the same Azure tenant as existing Fabric/Copilot Studio |
If restricted by policy, would need separate tenant or approval process |
| A-3 |
Partner Center API credentials (App registration) are obtainable from the Microsoft partnership admin team at Softchoice |
If not possible, API-based data refresh is blocked |
| A-4 |
The team has Power Automate Premium licenses (required for HTTP and custom connector actions) |
Standard license connectors may be insufficient for API calls |
| A-5 |
The Metamix file is the authoritative source for supplier cost validation (not a derived or secondary source) |
If another source is authoritative, audit logic needs adjustment |
| A-6 |
The current Copilot Studio agent, Power Automate flows, and Fabric tables are accessible for review and enhancement |
If built by a different team with restricted access, onboarding time increases |
| A-7 |
SAP Sales Contracts are only accessible via GUI (TCode VA43), with no REST/OData API exposed |
If SAP API exists, Field Margin % automation becomes feasible |
| A-8 |
The coding specialists' SOP documents provided are current and reflect actual process |
If outdated, requirements may be based on inaccurate process understanding |
| A-9 |
Case descriptions in SFDC are in English (for AI extraction purposes) |
If bilingual (English/French), extraction model needs multilingual support |
| A-10 |
The daily CSP Entitlements email/Excel originates from a Microsoft Partner Center API call configured by Softchoice IT |
If Microsoft sends it independently, refresh frequency is not controllable |
11. Dependencies
| # |
Dependency |
Dependency Owner |
Impact if Delayed |
| D-1 |
Scope Item #4 (Data Integration & Quality) architecture design underway |
IT Architecture team |
Audit accuracy depends on correct pricing data flowing into the system |
| D-2 |
Lakehouse 200 migration (Medallion architecture) |
Elizabeth's data team (Sang, Richard) |
Org-wide data access blocked until migration; limits cross-team data sharing |
| D-3 |
EA data source identification and download automation |
Faizan / Licensing OPS |
EA audit cannot proceed without agreement, pricing, and offering data from VL Central |
| D-4 |
Investment proposal approval by executive decision makers |
Barbara / Doug / Matt / Al |
Full scope implementation dependent on funding |
| D-5 |
Coding specialist SOP and validator SOP availability |
Emmanuel |
Needed for AI agent training and audit rule definition |
| D-6 |
Softchoice Azure tenant permissions for AI service provisioning |
IT Infrastructure team |
Azure OpenAI, Document Intelligence provisioning blocked if not approved |
12. Success Criteria & KPIs
12.1 Primary KPIs
| KPI |
Current Baseline |
Target |
Measurement Method |
| Audit feedback time (automated check) |
~3 hours |
5-10 minutes (automated), 1-2 hours (with manual validation) |
Timestamp: quote creation → audit result available |
| False positive rate (audit flags error that isn't one) |
Not measured (acknowledged as "not 100%") |
<10% of flagged items |
Manual validator override tracking |
| Case coverage (% of cases fully auditable) |
~80% (attachments excluded) |
>95% (including attachment processing) |
Cases with complete audit / total cases |
| Extraction accuracy (AI correctly identifies requested items from case) |
Not formally measured |
>95% for SKU, quantity, billing term |
Comparison of AI extraction vs manual review sample |
12.2 Secondary KPIs
| KPI |
Current Baseline |
Target |
Measurement Method |
| Manual validation effort |
~100% of audit results reviewed |
<30% requiring manual review |
% of results auto-approved (high confidence) |
| Data freshness (pricing) |
Monthly (Metamix) |
Daily or better |
Time between Microsoft pricing change and Fabric update |
| EA program audit coverage |
0% (not yet implemented) |
Parity with CSP audit checks |
EA quotes audited / total EA quotes |
| Locked-in pricing check coverage |
0% (manual) |
Automated for all renewal quotes |
Renewal quotes with automated price history check |
12.3 Success Criteria for Business Validation (this milestone)
This BRD milestone is considered successful when the business team confirms:
13. Risks
| # |
Risk |
Likelihood |
Impact |
Mitigation |
| R-1 |
Partner Center API access may not be approved or may require lengthy onboarding |
Medium |
High — blocks API-based data freshness improvement |
Identify API admin early; if blocked, continue with improved Excel refresh process |
| R-2 |
AI extraction accuracy may not reach >95% target for unstructured case text |
Medium |
Medium — false positive rate remains high, manual validation still needed |
Use structured output constraints, SOP-trained prompts, human-in-the-loop for low-confidence results |
| R-3 |
Metamix contains Softchoice-internal pricing logic that cannot be replicated from Partner Center API alone |
High |
Medium — API cannot fully replace Metamix; still need internal pricing source |
Clarify Metamix composition with Grace/Licensing OPS; design hybrid approach |
| R-4 |
Funding for full scope may not be approved |
Medium |
High — limits implementation to incremental improvements only |
Prioritize quick wins (attachment processing, API data refresh) that demonstrate value |
| R-5 |
EA data sources (VL Central) may not be accessible programmatically |
High |
Medium — EA audit remains Excel-dependent |
Accept Excel-based approach for EA; focus API improvements on CSP |
| R-6 |
SAP Field Margin % remains inaccessible via API |
High |
Medium — locked-in pricing check cannot be fully automated |
Use Salesforce prior quote lookup (Method 2) as primary approach; SAP as fallback |
| R-7 |
Copilot Studio 64K token context window may be insufficient for complex audit reasoning |
Medium |
Medium — limits ability to process large quotes or multiple attachments in single session |
Offload complex processing to Azure AI Foundry Agent Service or Azure Functions |
| R-8 |
Mid-month pricing changes occur within the data refresh window |
Medium |
Low — brief period of stale pricing causes false positives |
Implement on-demand pricing refresh capability; API polling for price changes |
| R-9 |
Medallion architecture / dimensional model redesign conflicts with Elizabeth's data team plans |
Medium |
Medium — parallel or conflicting data models create confusion |
Align with data team early; use their naming conventions and governance policies |
| R-10 |
Single-person dependency (Grace) for Metamix file creation blocks automated ingestion |
High |
High — if Grace is unavailable, pricing data goes stale even with automation on the ingestion side |
Automate the Metamix creation process itself, or supplement with direct Partner Center API |
| R-11 |
Azure AI Search provisioning or licensing not available |
Medium |
High — blocks RAG-based SOP grounding, a key capability for AI agent accuracy |
Confirm Azure AI Search availability early; if blocked, fall back to simpler prompting approaches |
| R-12 |
SOP documents are outdated or incomplete for AI training |
Medium |
Medium — AI agents grounded on incorrect SOPs will produce incorrect audit decisions |
Validate SOPs with business team; establish SOP governance and update cycle |
The following items are critical for progressing to the Option Analysis milestone. Items marked with [BLOCKER] prevent meaningful solution design without an answer.
14.1 Data & System Access
| # |
Question |
Why It Matters |
Who Can Answer |
| RI-1 [BLOCKER] |
What is the exact composition of the Metamix file? Does it contain only Microsoft pricing, or does Softchoice add internal calculations (markups, proration formulas, internal SKU mappings)? |
Determines whether Partner Center Price Sheet API can replace Metamix or if a hybrid approach is needed |
Grace (Licensing OPS) / Faizan |
| RI-2 |
What are the exact Salesforce custom field API names for Special Cost, Supplier Cost, and Billing Term on the quote line? |
Needed to map the correct data fields for audit validation |
Faizan / Salesforce Admin |
| RI-3 |
How are Cases linked to Quotes in Salesforce? Custom lookup field on Case? Via Opportunity? |
Needed to design the data retrieval flow |
Faizan / Salesforce Admin |
| RI-4 |
Is SAP accessible via REST or OData API, or only via GUI (TCode VA43)? |
Determines if Field Margin % lookup can be automated |
IT / SAP Admin |
| RI-5 |
Does Softchoice have (or can obtain) Partner Center API credentials (App registration with Admin Agent or Sales Agent role)? |
Determines if API-based data refresh is feasible |
Zang / IT / MS Partnership Admin |
| RI-6 |
Who configured the daily CSP Entitlements email from Partner Center? Is it an API call or a Microsoft-managed export? |
Determines if refresh frequency and content can be controlled |
IT / Faizan |
14.2 Process & Requirements
| # |
Question |
Why It Matters |
Who Can Answer |
| RI-7 |
What is the current accuracy rate of the Copilot Studio AI extraction, broken down by check type (SKU, quantity, billing term)? |
Baseline needed to measure improvement |
Faizan / Emmanuel |
| RI-8 |
What percentage of audit results currently require manual validation override (false positive rate)? |
Baseline for KPI measurement |
Emmanuel / Validators |
| RI-9 |
Are case descriptions always in English, or can they be bilingual (English/French)? |
AI extraction model may need multilingual support |
Emmanuel / Coding Specialists |
| RI-10 |
What specific audit checks are needed for EA beyond CSP? Are proration calculations and agreement-level pricing tiers the main additions? |
Needed to scope EA requirements |
Faizan / Emmanuel / EA specialists |
| RI-11 [BLOCKER] |
Should sell price / markup validation be included in this project's audit scope, or does it remain solely with Scope Item #1? |
Fundamentally changes the scope and data requirements |
Barbara / Emmanuel |
| RI-12 |
Is there a validator SOP (Emmanuel mentioned it's being developed)? Can we get a copy? |
Needed to understand validation decision rules for automation |
Emmanuel |
14.3 Architecture
| # |
Question |
Why It Matters |
Who Can Answer |
| RI-13 |
Can we access and review the current Copilot Studio agent configuration, Power Automate flows, and Dataverse schema? |
Needed for enhancement design — build on vs. rebuild decision |
Faizan |
| RI-14 |
Are Azure AI services (Azure OpenAI, Document Intelligence) available in the Softchoice Azure tenant, or do they need to be provisioned? |
Determines timeline for technology-dependent enhancements |
IT / Cloud Infrastructure |
| RI-15 |
What is the current Power Automate license tier? Premium required for HTTP and custom connector actions. |
Determines if additional licensing is needed |
IT |
| # |
Question |
Why It Matters |
Who Can Answer |
| RI-16 |
What Fabric capacity SKU and licensing does Softchoice currently have? Can it support Data Pipelines with REST connectors and Notebook activities? |
Determines if automated API-based ingestion is feasible without additional licensing |
IT / Fabric Admin |
| RI-17 |
Is the daily CSP Entitlements email an automated API call controlled by Softchoice, or a Microsoft-managed export? Can it be replaced with direct API calls? |
Determines if entitlements refresh frequency and content can be improved |
IT / Faizan |
| RI-18 |
What is the mapping between Lakehouse 100 / Lakehouse 200 and the Fabric workspace structure at Softchoice? Separate workspaces, capacities, or naming convention? |
Needed to plan medallion architecture migration and org-wide data sharing |
Elizabeth's team / Fabric Admin |
| RI-19 |
Does Elizabeth's data team already have a target dimensional model, naming conventions, or governance policies for Lakehouse 200? |
Ensures alignment — avoid building a parallel model that conflicts with org-wide plans |
Elizabeth / Sang / Richard |
| RI-20 |
Are there additional business rules, edge case documentation, or decision guides beyond the 14 SOPs that auditors reference when validating results? |
Needed to define the complete AI knowledge base for RAG grounding |
Emmanuel / Validators |
| RI-21 [BLOCKER] |
Is Azure AI Search available (or provisionable) in the Softchoice Azure tenant? What tier? Basic tier or higher is required for vector search. |
Without vector search, RAG-based SOP grounding for AI agents is not feasible |
IT / Cloud Infrastructure |
15. Glossary
| Term |
Definition |
| AE |
Account Executive (seller who creates case requests) |
| Coding Specialist |
Operations team member who creates quotes in Salesforce CPQ based on case requests |
| Copilot Studio |
Microsoft's low-code agent building platform used for the current audit automation |
| CPQ |
Configure, Price, Quote — Salesforce module for quote management |
| CSP |
Cloud Solution Provider — Microsoft partner program for reselling cloud services |
| EA |
Enterprise Agreement — Microsoft volume licensing program |
| EES |
Enrollment for Education Solutions — Microsoft licensing for education |
| Entitlements |
Customer's active subscriptions and license counts in Microsoft Partner Center |
| Fabric |
Microsoft Fabric — unified analytics platform including data lakehouse |
| GDAP |
Granular Delegated Admin Privileges — partner access to customer tenants |
| Lakehouse |
Data storage layer in Microsoft Fabric (100 = silver/basic, 200 = Medallion/org-wide) |
| Foundry IQ |
Microsoft's unified agentic knowledge retrieval system built on Azure AI Search; federates RAG across multiple data sources |
| Locked-in Pricing |
Customer receives the same price on subsequent purchases of the same subscription |
| Medallion Architecture |
Data organization pattern with Bronze (raw), Silver (cleansed), and Gold (business-ready) layers |
| Metamix |
Softchoice-maintained pricing file combining Microsoft special pricing with internal calculations |
| MPSA |
Microsoft Products and Services Agreement — volume licensing program |
| NCE |
New Commerce Experience — Microsoft's current commerce platform for CSP |
| Partner Center |
Microsoft's portal for CSP partners to manage customers, subscriptions, and billing |
| SC Agreement |
Softchoice Agreement — contract record in Salesforce linking customer to tenant/program |
| SFDC |
Salesforce.com |
| SKU |
Stock Keeping Unit — unique identifier for a specific product/license configuration |
| SOP |
Standard Operating Procedure |
| Special Cost |
The price Microsoft charges Softchoice (supplier cost), as distinct from the sell price to customer |
| SPE |
Special Price Engine — Salesforce mechanism for automated pricing |
| RAG |
Retrieval Augmented Generation — AI pattern where relevant documents are retrieved and provided as context to an LLM before generating a response |
| SCD Type 2 |
Slowly Changing Dimension Type 2 — dimensional modeling technique that preserves history by creating new rows when attributes change, with effective_from/to dates |
| Semantic Model |
Power BI metadata layer over Lakehouse/Warehouse tables defining measures, relationships, and business-friendly names |
| Vector Embedding |
Numerical representation of text enabling semantic similarity search; used by Azure AI Search for RAG |
| VL Central |
Microsoft Volume Licensing Service Center — portal for EA/MPSA data |
16. References
| # |
Document |
Location |
| 1 |
Microsoft CPQ Accuracy Controls (Jan 16, 2026) |
Project Backgroud/Background_Microsoft CPQ Accuracy Controls 20260116.md |
| 2 |
Connect on MS Quote Auditing Meeting Transcript (Feb 6, 2026) |
Project Backgroud/Meeting_Connect on MS Quote Auditing.md |
| 3 |
Quote Audit - CSP - MS Fabric New Tables |
Project Backgroud/Current_Data_Structure_Quote Audit - CSP - MS Fabric New Tables.md |
| 4 |
SOP: CSP NCE Quotes |
SOP_Information/SOP_Quotes_CSP NCE Quotes - Training Deck and SOP.md |
| 5 |
SOP: CSP Perpetual Quotes |
SOP_Information/SOP_Quotes_CSP Perpetual Quotes - Training Deck and SOP.md |
| 6 |
SOP: CSP Renewal Quoting |
SOP_Information/SOP_Quotes_CSP Renewal Quoting - SOP.md |
| 7 |
SOP: CSP Checklist |
SOP_Information/SOP_CSP Checklist.md |
| 8 |
SOP: CSP Post-Renewal |
SOP_Information/SOP_Orders_CSP Post-Renewal SOP.md |
| 9 |
SOP: CSP Order Process |
SOP_Information/SOP_CSP Order Process - Training Deck and SOP.md |
| 10 |
SOP: CSP Contracts |
SOP_Information/SOP_Contracts_CSP NCE Contract Process - Training Deck and SOP.md |
| 11 |
SOP: SAP Material Add |
SOP_Information/SOP_SAP Material Add - Training Deck and SOP.md |
| 12 |
SOP: Decrease Licenses |
SOP_Information/SOP_Training Deck and SOP Template - Decrease Licenses.md |
| 13 |
SOP: CSP Bulk Import |
SOP_Information/SOP_CSP Bulk Import - Training Deck and SOP.md |
| 14 |
SOP: CSP GDAP Checks |
SOP_Information/SOP_CSP GDAP Checks in Partner Center - Training Deck and SOP.md |
| 15 |
SOP: CSP Offboarding |
SOP_Information/SOP_CSP Offboarding - Training Deck and SOP.md |
| 16 |
SOP: Azure CSP Offboardings |
SOP_Information/SOP_Azure CSP Offboardings.md |
| 17 |
SOP: Partner to Partner Transfer |
SOP_Information/SOP_Partner to Partner Transfer - Training Deck 1.md |
End of Document