Labor-hour based pricing with LCAT rate matrix, wrap rates, GM targets, and bid rate optimization.
T&MIDIQCost-PlusRate-Based
🎯
Firm Fixed Price
WBS-driven cost buildup with risk-adjusted contingency, fee modeling, and price-to-win analysis.
FFPWBSRisk-AdjustedPrice-to-Win
Have a saved file?
PricingEngine
Proposal Tool
Billable Hrs
Wrap Rate×
Annual Hours
Procurement:
Base Cost
—
Contingency
—
Total Cost
—
Fee / Profit
—
Proposed Price
—
Work Breakdown Structure
WBS Element
Type
Qty
Hours
LCAT / Rate
Labor Cost
ODC ($)
Element Total
WBS Totals →
WBS structure:Sections (Level 1) group related tasks. Tasks (Level 2) hold hours and cost basis.
Subtasks (Level 3) further break down a task.
Labor cost = Qty × Hours × Bid Rate.
Hours = total estimated hours for this element. Qty = number of FTEs / resources.
Annual hours per FTE is set in the topbar (currently 1880 hrs/yr) —
use it as a reference when estimating: e.g. 1 FTE × 1 year = 1880 hrs.
ODCs cover materials, travel, subcontractors, and other direct costs.
Risk Assessment
Risk Score: —
Risk-Informed Contingency Recommendation
Contingency & Fee Structure
Cost Inputs
Contingency %%
G&A Rate%
Fee / Profit %%
Escalation (avg %/yr)%
Contract Yearsyr
Price Waterfall
Price-to-Win Analysis
Market Intelligence
Contract Ceiling / IGCE$
Competitive Est. (low)$
Competitive Est. (high)$
Win Price Target$
⚙ Price Lever Optimizer
Cost Floor
—
Current Price
—
Win Target
—
Gap to Target
—
Margin at Target
—
Cost Structure Levers
Contingency %10%
G&A %0%
Fee / Profit %10%
Labor Hours Adjustment
Hours Scalar100%
Scales all WBS hours up or down uniformly. 100% = current estimate. Use to model schedule compression or scope reduction.
Win Price Target
Target Price ($)
Pulls from Price-to-Win tab if set. Override here to test scenarios without changing the PTW tab.
Live Price Waterfall
WBS Cost Impact
Proposal Summary
Import LCATs from Excel
Import your LCAT rate table — the same rate table powers both T&M and FFP pricing.
Imported LCATs will be available in the WBS Builder for labor cost calculations.
📂
Drop your .xlsx or .csv file here
or click to browse
⬆ Import WBS
Upload a .xlsx or .csv file structured as a WBS table
Required columns:Element Name (required) ·
Level — Section / Task / Subtask (required) ·
LCAT, Hours, ODC, WBS ID (optional)
| First row = headers · No merged cells · No blank rows in data
📂
Drop .xlsx or .csv here
or click to browse
Catalog Value (Pre-Disc.)
—
Σ Rate × Hrs × Qty
Discount Savings
—
Catalog − Bid
Total Contract Value
—
After discount
Avg Discount
—
=AVERAGE(disc%)
Avg GPAF
—
=AVERAGE(K2:K11)
Avg % GM
—
=AVERAGE(L2:L11)
LCAT Pricing Matrix
LCAT ★ required
Level
Qty
Total Hrs =$B$13×Qty
Rate (D) ★
Quoted Rate D×(1−G)
Total (F) Qty×Hrs×E
Discount (G)
Min Salary ★ band floor
Max Salary ★ band ceiling
Target Salary optional — uses midpoint if blank
DL (I) H÷2080
Cost/Hr (J) I×WrapRate
GPAF (K) 1−J÷E
% GM (L) (E−I)÷E
Totals / Averages →
★ Required: LCAT name, Rate, Min Salary, Max Salary
● Target Salary optional — midpoint used if blank
User input (editable)
Formula column (auto-calculated)
Healthy metric
Watch / below threshold
Negative / alert
% GM Targets — solve for required discount
How the solver works: For each GM target the tool back-solves the required discount using
discount = 1 − DL / (Rate × (1 − targetGM)) derived from %GM = (QuotedRate − DL) / QuotedRate.
The ± delta shows change vs. base discount. N/A = target unachievable given salary.
Salary Bands by LevelDefine default Min/Max salary for each experience level. These auto-populate when you select a level on a row and act as hard constraints in the optimizer.
How bands work:
When you assign a level to an LCAT row, the Min/Max here auto-fill that row's salary band columns.
You can override them per-row for exceptions. The optimizer will never solve a discount that implies
a salary (DL × 2080) outside the active band. A ⚠ outside band
warning appears on any row where the target salary falls outside its band.
Out-Year Rate Escalation Model
Base Year
Contract Years
Default Escalation% / yr
How escalation works:
Each LCAT can have its own annual escalation rate. The base-year rate comes from the Working Sheet.
Out-year rates are computed as Raten = Ratebase × ∏(1 + escy) — compounded year over year.
Total contract value is Σ Qty × BillableHours × QuotedRatey across all active years.
The TCV column shows the full period-of-performance value at current settings.
Import LCATs from Excel
Required File Format
① File must be .xlsx (Excel) or .csv |
② First row = column headers — no title rows, no merged cells above the table |
③ No merged cells anywhere |
④ No blank rows in the middle of data |
⑤ One row per LCAT |
⑥ Rate must be a plain number (no $ symbols in the cell)
Not sure about the format? Download the template above.
📂
Drop your .xlsx or .csv file here
or click to browse
Target Value Optimizer
No optimization run yet
Click ◆ Run Optimizer above. A step-by-step wizard will guide you through setting a target contract value, choosing a discount strategy, and optionally enforcing a GM floor or locking specific LCATs.
Optimizer Setup
Step 1 of 4
Estimate Salary
Estimate the target salary for as a percentage of the annualised rate.
Annual rate () = hourly rate × billable hours.
Salary as % of annual rate%
Estimated Salary
Common ranges: junior roles 35–45% · mid-level 45–55% · senior 55–65% of annualised rate.