Draft for review · drafted 30 Sep 2026, 11:19 RFP 250000002614 · State of Michigan
Design notes · v2 Close
What changed from v1, why a procurement manager needs it, and the data behind it. Exports for each stakeholder are out of scope for this version; the export menu is unchanged.
1. Requirements get a compliance matrix, grouped by your evaluation criteria
One row per requirement, one column per vendor, one badge per cell. Rows sit under the RFP’s own criteria and weights (Technical 40%, Price 35%, Mobile 15%, Terms 10%), plus a “not scored” group for documents that decide responsiveness. “Attention only” hides rows where every vendor meets or goes beyond the ask. Each row links to its detail.
Data: requirement → criterion mapping is a Needs new engine field (cited from the RFP’s evaluation section).
2. “Differs” now says which way
Short of ask (teal, ↓), Beyond ask (green outline, ↑), Different approach (dashed, ⇄). 7 years against 10 is short; four business hours against same-day is beyond; native apps against a mobile website is a different approach. It is still a factual comparison, not a score.
Data: a direction per term relation, Needs new engine field . Ordered terms (time, years, counts) can be derived; others need the model to classify with a quote.
3. Totals and scenarios, computed in the open
Each vendor’s own total stays as stated. Next to it, an arithmetic total of the vendor’s own lines for the scenario you pick (Gongwer Option 1 or 2, Info Guys with or without the ad-removal charge, Northwind with or without the full 3%). The formula is always shown. Anything that can’t be computed (a CPI reopener, a per-message charge with no basis) is listed, not guessed. Nothing is sorted, ranked or compared across vendors.
Data: arithmetic over commercial[] lines. Product decision : v1 said “not totalled”; this reverses it for arithmetic only.
4. Undeclared deviations
A cross-check between Doc 7 (exceptions) and the answers: “Harbor Point lists no exceptions, but caps access at 500 users.” Shown as a Needs-attention row and as its own table under Terms.
Data: derived from existing answer states plus the declared exceptions list. No new model call.
5. Your RFP’s references, not Xpecfy’s IDs
Rows use the RFP’s own references (§2.1, §3 · Doc 5) instead of R01–R16. The run step number moved to the eyebrow (“step 03”) so section numbers no longer look like RFP sections. Every requirement shows the RFP sentence it came from with “Open original”, so “You asked” can be checked.
Data: a cited reference per requirement, Needs new engine field .
6. Only vendor obligations are compared
Submission channel and the questions deadline are instructions to bidders, not something a vendor offers, so they’re no longer rows (a note says so). “Complete proposal package” was the vendor’s own claim; it is now Xpecfy’s package check against the required-documents list.
7. Your calls and the decision log
Every item that needs attention has a “Your call” control: Accept as stated, Ask to clarify, Non-compliant, Waive, with a note. Calls show in the matrix and feed the questions: accepted, waived or non-compliant items drop out of the draft letter. Everything lands in a timestamped decision log, which is the evaluation file a protest review would ask for.
Data: New feature , stored per run, per user. Product decision : who else can see or edit calls.
8. Shortlist with reasons
“Evaluating 5 of 5 vendors · Change…” lets the buyer take a vendor out of the evaluation, with a required reason. Removed vendors drop out of the triage and questions, stay visible but dimmed in the matrices (or hidden), and the removal is logged.
Product decision : v1 deferred this (S03 “no filter”). It’s the buyer’s selection, recorded with a reason; the tool never suggests it.
9. Contract exceptions, clause by clause
Exceptions filed as attachments are opened and listed per clause: the clause, your standard term, what the vendor declared, the quote. Grouped by topic so Legal can read “termination” or “audit” across vendors. Gongwer’s 15 are from its real attachment.
Data: exceptions parsed per clause, Needs new engine field .
10. Clarifications have a lifecycle
Per vendor: draft → sent (with a response-due date) → answered, with the answer recorded against the item it resolves. A letter preview carries the RFP number and the rule that a clarification may not change the proposal or price. Questions are phrased as “point us to” or “confirm what your proposal offers”, not “will you do X”, so they don’t invite a revised bid.
Data: New feature . Sending stays outside Xpecfy for now; “Mark as sent” records it.
11. Provenance and readability
Evidence the vendor produced about itself (a survey it co-sponsored) is flagged. Badges are 11px, vendor names are full ink, and the Requirements section starts closed behind the matrix instead of being a 100-row wall.
12. What is real and what is not
Real (from the run): Info Guys’ and Gongwer’s quotes and amounts, including all ten Gongwer Schedule B lines and the 15 exceptions in its attachment.
Invented: the three other vendors, every “You asked” value, every direction marker, all recorded calls, the clarification states and Gongwer’s recorded answer.
Illustrative, carried from v1: Info Guys “not found” for §2.4 and Doc 6, Gongwer “not found” for Doc 5, the R06 unclear/conflicting states, Gongwer “not checked” for Doc 1.