Resources · Validation
Does it reproduce the books it cites?
The tables below are rendered at build time from the validation note that ships with the product, without editing. Every worked example runs as a test on every commit; a red result blocks the merge. Known failures are recorded with the reason quantified and are held to an anchor so a change in the size of the miss is itself caught.
1. Worked-example suite (runs on every commit; red blocks merge)
| # | Case | Source | Published | inferTIC | Error |
|---|---|---|---|---|---|
| 01 | Glass-lined jacketed reactor scaled 0.2→1.2 m³, CEPCI 1991→1996 | PTW 5th ed., Example 6-2, pp.243–244 | $27,850 | $27,801 | 0.18 % (book rounds index values) |
| 02 | CS shell-and-tube exchanger, 400 m², Jan 2010 USGC | T&S 3rd ed., Example 7.2, p.252 | $99,600 | $99,583 | 0.02 % |
| 03 | Adipic acid ISBL, 400 kMTA (880 MMlb/y), Jan 2006 USGC | T&S 3rd ed., Example 7.8, p.274 | $206.5 MM | $206.5 MM | < 0.05 % |
| 04 | CS floating-head shell-and-tube exchanger, 100 m², 100 barg, bare-module cost, 2016 (CEPCI 542) | Turton 5th ed., Example 7.11, PDF p.223 (e-book, no print page) | $134,000 | $135,724 | +1.3 % — known failure: the book reads C_p^0(2001) = $25,000 off Figure 7.4; the Table A.1 correlation gives $25,328 (+1.3 %). F_P = 1.383, F_BM = 3.925 and the 542/397 escalation reproduce the book; with the chart-read $25,000 the same chain gives $133,967 (−0.02 %) |
| 05 | By-product recovery modification in 304 SS — column shell (46,685 kg) and 50 sieve trays, U-tube exchanger 60 m², kettle reboiler 110 m², horizontal drum (636 kg), 50 m³ tank, five pumps with motors — installed ISBL by Hand's method, Jan 2010 USGC | T&S 3rd ed., Example 7.3, pp.260–261 | $4,058,550 | $4,057,109 | −0.04 % (book rounds each purchased cost). Three factors the example itself states ride in library_overlay.hand, cited to p.261: trays 1 (internals carry no installation factor), drivers 4 (motor added to the pump before the pump factor), warehouse spare 1; shell masses entered as printed (the engine has no wall-thickness step, and the book's own π·3·30·0.02·8000 evaluates to 45,239 kg, not the 46,685 kg it uses — flagged in the file) |
| 06 | Fixed-capital investment by percentage of delivered-equipment cost — Table 6-9 solid-fluid column with the example's instrumentation (43 % of E) and buildings (15 % of E) modifications, E = $100,000 | PTW 5th ed., Example 6-3, pp.251–252 | $431,000 | $431,000 | 0.00 %. All twelve printed percentages of E ride in factors.user_values (user_percent is Σ pct of E, the book's basis); allowances 0; total = D + I. The engine's direct also reads $431,000 rather than the book's D = $305,000 because the indirect items are percentages of E, not of D (the Allowances fields take percentages of direct) — noted in the file |
| 07 | Power factor applied to plant/capacity ratio, Eq. 6-9 with x = 0.6: the Example 6-1 plant ($436,000, 1990) at twice the capacity in 1998, Marshall & Swift all-industry index 915 → 1062 | PTW 5th ed., Example 6-5, p.257 (Eq. 6-9 p.254; Table 6-2 p.238) | $767,000 | $766,866 | −0.02 % (book rounds the index values 915.1 / 1061.9). class5_capacity with the example's own FCI and exponent as overlay records; the M&S values ride in index_snapshot. The example's other three results — x = 0.7 ($822,000, same chain) and the two Eq. 6-10 results ($1,126,000 / $1,191,000: direct cost scaled, indirect unscaled, times a labour-rate × productivity factor from Table 6-12) — are not fixtured; Eq. 6-10 is not expressible in the engine (no direct/indirect split of a Class 5 reference cost, no labour location factor), recorded in the file's notes.exclusions |
| 08 | Heat exchanger of 500 m² purchased for $25,000 in 1996, updated to 2016 on the CEPCI 382 → 542 (Eq. 7.4) | Turton 5th ed., Example 7.6(c), PDF p.214 (Table 7.4 pp.213–214; e-book, no print page) | $35,471 | $35,471 | 0.00 %. One quote row (FR-06) escalated (FR-08); the book's Table 7.4 values 382 / 542 ride in index_snapshot (cepci.json stores 381.7 / 541.7), key purchased_equipment. Parts (a) and (b) — the 2011 M&S ($35,642) and 2011 CEPCI ($38,351) results — are the same chain with other index values, checked by hand, recorded in the file's notes.exclusions |
| 09 | 30,000 tonne/y isopropanol plant, $23 million in 1996, scaled to 50,000 tonne/y in 2016 by the six-tenths rule and the CEPCI 382 → 542 | Turton 5th ed., Example 7.7, PDF p.216 (six-tenths rule §7.2.3 p.215; Table 7.4 p.213) | $44,354,000 | $44,337,685 | −0.04 % (book rounds the two corrections to 1.359 and 1.419). class5_capacity with the example's own plant cost and the 0.6 exponent as overlay records (the 07 pattern); Turton states no validity ratio for the rule on a whole plant, so the overlay exponent's valid_ratio is the example's own 1 → 5/3, cited in the record |
| 10 | Lang-factor capital cost of a major expansion to a fluid processing plant, total purchased equipment cost $6,800,000, F_Lang = 4.74 (Table 7.7, Eq. 7.5) | Turton 5th ed., Example 7.8, PDF p.216 | $32,232,000 | $32,232,000 | 0.00 %. One quote row carrying Σ C_p,i; factors.method: "lang" with basis.plant_type naming the library row lang1948_fluids (4.74 from T&S §7.6.1 quoting Lang 1948 — the same primary source and value as Turton's Table 7.7, which is not itself transcribed). The example states no year: quote and basis both dated 2016 (the chapter's basis) so the index ratio is 1 |
| 11 | SS tower 3 m diameter × 30 m tall at 20 barg with 40 SS sieve trays, bare-module cost 2016 (CEPCI 542): Eq. 7.10/A.2 vessel pressure factor, F_M 3.11 (Fig. A.8), trays at C_p^0·N·F_BM·f_q with F_BM 1.83 (Fig. A.9), f_q = 1 | Turton 5th ed., Example 7.13, PDF pp.227–228 (e-book, no print page) | $7,488,200 | $7,194,921 | −3.9 % — known failure: the book prints F_P = [(20+1)·3/((2)[(944)(0.9) − 0.6(20+1)]) + 0.00315]/0.0063 = 6.47 — P + 1 substituted into an equation whose text (PDF pp.222 and 1297) defines P in barg; at the stated 20 barg the equation gives 6.185, F_BM 37.26 (book 38.87), tower $6,738,275 (book $7,031,400). Trays reproduce ($456,646 vs $456,770). With P + 1 the same chain gives $7,490,279 (+0.03 %) |
| 12 | Plant expansion, seven lines from Table E7.14(a): floating-head condenser 170 m² CS 5 barg, floating-head reboiler 205 m² SS tube/CS shell 18 barg, double-pipe cooler 10 m² CS, two 5 kW CS centrifugal pumps, CS column 2.1 m × 23 m at 5 barg with 32 SS sieve trays, horizontal CS reflux drum 1.8 m × 6 m at 5 barg; Σ bare-module cost 2016 | Turton 5th ed., Example 7.14, PDF pp.228–230 | $1,088,100 | $1,056,760 | −2.9 % — known failure, the same (P + 1) reading on the two vessel lines: printed F_P 1.681 (T-101) and 1.513 (V-101) are the equation at 6 bar, 1.484 and 1.344 at the stated 5.0 barg. Every other line reproduces within the book's rounding (E-101 $32,977 vs 33,000 and F_P = 1.000 at the 5 barg piece boundary; E-102 F_P 1.062; pumps F_BM 3.98; trays $131,432 vs 131,200). With P + 1 on both vessels: $1,088,381 (+0.03 %). Eq. 7.15 C_TM and Eq. 7.16 C_GR are not fixtured (the book's own C_TM differs between its two lines, $1,284,000 vs $1,276,700) |
Second reads: examples 08–12 are second-pass checked (2026-09-21) against PyMuPDF 200 dpi renders of the owner's Turton 5th ed., read independently of the first pass's pypdf text layer — every statement input, index value, exponent, factor, printed intermediate and total matches (0 corrected, 0 unreadable; each file carries a checked block, rows in docs/transcription-log.md). The two known failures (11 and 12) stand: the render confirms the book substitutes (P + 1) into Eq. 7.10 while its text defines P in barg. Examples 01–07 and the TEA/back-test cases keep their earlier status.
Intermediate-value checks (packages/library/test/textbook-checks.test.ts): Turton Example 7.11 pressure factor at 100 barg = 1.383 (reproduced exactly from the transcribed Table A.2 coefficients); Example 7.10 Cp0 = $25,328 by equation vs $25,000 read from the chart by the book (1.3 %, chart rounding).
TEA worked examples (Phase 4, FR-28/FR-31):
| # | Case | Source | What it proves | inferTIC | Error |
|---|---|---|---|---|---|
| tea-01 | LCOH cash-flow build-up (hydrogen SMR case) | OpenPyTEA-published worked LCOH case | known failure, −4.7 %: computeTea's NPV/cash-flow chain against a third-party LCOH tool | tea.lcop 3.7324296969383304 | quantified, see below |
| tea-02 | NPV cash-flow build-up | Turton 5th ed., Chapter 10 example | known failure, +42.8 % (residual after the reference-point gap is closed by npv_reference: "project_start", matching the book's own time-0 convention): three treatment differences outside TeaBasis — land purchase/recovery, the loss-year tax credit, and taxed salvage — quantified to the cent in the file | tea.npv 24445572.894993633 | quantified, see below |
| tea-03 | NPV cash-flow build-up, MACRS 5-year | T&S 3rd ed., Examples 9.1 / 9.4, pp.315, 320 | known failure, −5.3 %: the book pays each year's tax the following year (so year 10's tax falls outside the horizon); the engine pays it in-year. The gap is the book's own tax stream re-discounted: 138.68 + 43.83 − 36.11 = $146.40 MM, the printed figure, to the cent. npv_reference: "startup" here because the book's year 0 is both project start and start-up (the whole $100 MM at discount factor 1) | tea.npv 138683835.8273631 | quantified, see below |
All three known failures are recorded with the reason quantified in the example file, not silently accepted: tea-01 misses the published LCOH by −4.7 % (the OpenPyTEA case and computeTea diverge on a modelling convention the file names); tea-02, once npv_reference: "project_start" matches Turton's own discounting zero point (start of construction), still misses the book's NPV by +42.8 % — a residual fully accounted for by three quantified treatment differences the book's cash flows include and TeaBasis cannot represent: the $10 MM land purchase and its recovery, a loss-year tax credit the book takes in year 2, and the $10 MM salvage value the book taxes as income where the engine adds it untaxed. tea-03 misses T&S Example 9.4 by −5.3 % for one reason only — tax paid a year in arrears — and the file re-discounts the book's tax stream to recover the printed $146.40 MM exactly. All three run as ordinary tests, not skips — see "known failures" below.
Known failures, made honest (engine_anchor): every known_failure worked example (seven total: 04-turton-example-7-11, 11-turton-example-7-13 and 12-turton-example-7-14 above, bt-02-usda-dry-mill-ethanol in §3, tea-01, tea-02, tea-03) now carries engine_anchor: { value, tolerance_pct: 0.01 } — the engine's own value on 2026-09-21, not a published figure — and runs as a plain test asserting two things: the result stays outside the published/target band (so the tool never silently "fixes" the known gap) and the result stays within 0.01 % of the anchor (so a change to the miss itself is caught, not just presence of a miss). Anchors: 04-turton-example-7-11 direct 135724.2481170268; 11-turton-example-7-13 direct 7194921.146171735; 12-turton-example-7-14 direct 1056759.5880168518; bt-02-usda-dry-mill-ethanol total 140033875.12125257; tea-01-openpytea-cs1-smr tea.lcop 3.7324296969383304; tea-02-turton-ch10 tea.npv 24445572.894993633; tea-03-ts3-example-9-4 tea.npv 138683835.8273631. Before this, a known failure ran as it.fails — it caught a miss appearing or disappearing but not a miss changing size; the anchor closes that gap.
Textbook suite: 12 against a target of 10 (cases 01–12 above; nine within ±1 %, three — 04, 11, 12 — quantified known failures with engine anchors). Turton Chapter 7 read in full from the owner's copy (2026-09-20): 7.10 and 7.12 share 7.11's chart-read C_p^0 (7.10 would miss by +1.2 %; 7.12 also needs the Fig. A.18 stainless F_M = 2.73, not held); 7.13 and 7.14 added 2026-09-21 as cases 11 and 12 once Eq. 7.10/A.2 was transcribed and the engine's turton_vessel_a2 form took the diameter from the line's sizing step — both are known failures for one reason, the book's (P + 1) substitution into the vessel pressure factor (the equation's text defines P in barg; the substitution recovers each printed total to +0.03 %); their chart-read factors (SS vessel F_M 3.11, SS-tube exchanger F_M 1.81, CS pump F_M 1.55, SS tray F_BM 1.83) are the examples' own readings and ride in library_overlay copies of the records, never in the library; 7.15 is a Table 7.13 capacity-scaling case, not a Class 4 example. T&S Example 7.3 added 2026-09-21 as case 05 (shell masses entered as the book prints them; see the row). PTW Examples 6-3 and 6-5 added 2026-09-21 as cases 06 and 07 from the owner's copy (6-5's Eq. 6-10 results are outside the engine's Class 5 chain — see the row). Turton Examples 7.6(c), 7.7 and 7.8 added 2026-09-21 as cases 08–10 from the owner's copy (PDF pp.214 and 216), each with the book's Table 7.4 index values in index_snapshot so the escalation ratio is the book's; 7.10 was not added — it would be a second copy of 04's chart-read gap (same C_p^0, F_P = 1) and adds no coverage 04 and the intermediate-value check do not already give. T&S Example 9.5 (adipic acid, 30/70 construction, 50 % first-year rate, tax in arrears, worksheet printed as a figure) is not fixtured: the engine has no production ramp, and Fig. 9.2's cash flows are not in the PDF text layer.
3. Historical back-test (Sprint 10)
Three of the five cases below (#1 hydrogen, #4 ethylene, #5 HDPE) ship as packages/library/samples/history.sample.json and can be loaded on the Knowledge base tab as a first, ready-made knowledge base.
No client project data is used. Each case is a plant whose capacity and all-in cost are published by an independent public source (a US government study, a USDA survey, or the owner's own announcement), recomputed in Class 5 capacity mode from the T&S Table 7.1 correlations with the tool's out-of-the-box allowances (T&S Table 7.5 fluids OSBL 30 %, D&E 30 %, contingency 10 %; owner's cost 0 %) and CEPCI-escalated to the published cost date. Pass criterion: the Class 5 band, −50 % / +100 % of the published figure. Files: packages/library/worked-examples/bt-0N-*.example.json; they run on every commit.
| # | Plant | Capacity (trains) | Published cost, basis | Source | inferTIC Class 5 | Error | Band |
|---|---|---|---|---|---|---|---|
| 1 | Hydrogen, SMR without capture | 200 MMscfd (4 × 50) | $344 MM TOC, 2018$, US Midwest | NETL DOE/NETL-2022/3241, Case 1 | $343 MM | −0.4 % | inside |
| 2 | Fuel ethanol, corn dry mill | 40 MMgal/y = 119.5 kt/y (1) | $62.8 MM (survey avg $1.57/gal capacity), 2002$, US Midwest | USDA AER-841 (Shapouri & Gallagher 2005), p.8 | $140 MM | +123 % | outside |
| 3 | Methanol, Geismar 3 | 1.8 Mt/y = 5,455 t/d (1) | ≈ $1.30 bn, 2019–24 spend (2022 basis), Louisiana | Methanex news releases, FID Jul 2019 and Q2 2024 | $1.45 bn | +12 % | inside |
| 4 | Ethylene, ethane cracker | 500 kt/y = 1,102 MMlb/y (1) | ≈ $1.4 bn announced, 2015, Louisiana | Shin-Etsu / Louisiana Economic Development releases, Apr 2015 | $1.31 bn | −6 % | inside |
| 5 | HDPE, Hyperzone (as Phillips slurry) | 500 kt/y = 1,100 MMlb/y (2 × 550) | $725 MM, 2016–19 (2017 basis), Texas | LyondellBasell news releases Aug 2016, May 2017 | $620 MM | −15 % | inside |
Four of five land inside the Class 5 band, spread −15 % to +12 % around zero (mean −2 %) on the fluids plants. The first run of this back-test used the Con Edison 35 % as the Class 5 contingency default and overshot every case by +5 % to +37 %; the default was changed to T&S Table 7.5's 10 % (the point-estimate contingency that belongs with the Table 7.1 correlations), with the 35–40 % retained as the upper end of the benchmark range and the −50/+100 % band carrying the class uncertainty. Cases 3–5 are brownfield projects on integrated sites (shared utilities, hydrogen, ethylene supply), which explains the residual negative errors on 4 and 5. Case 2 is recorded as a known failure (known_failure in the file; the suite asserts it stays outside so a silent change is noticed): the ISBL correlation alone is ≈ +27 % over a design-build dry-mill package, and fluids OSBL/D&E/contingency on top nearly doubles it. It is not tuned away — the lesson for a solids/biofuels plant is to use lower OSBL and engineering allowances than the fluids defaults, which the estimator can do on the Factors page and record in the assumptions register.
Scope caveats are stated in each file's notes.assumptions: NETL's TOC includes owner's costs (ours are 0 %); the Shintech figure also covers VCM/PVC tie-ins; cost dates for multi-year builds are taken at the construction mid-point. These are synthetic in the sense that no project is the user's own, but every number traces to a public document.
4. Known limitations that affect validation
- Vessels and columns — T&S correlations take shell mass; Turton's take volume and, since 2026-09-21, the Eq. A.2 pressure factor (
turton_vessel_a2) reads the diameter the user entered on the line'svessel_volume/column_shell_volumesizing step — still no mechanical design (§1): a pressurised Turton vessel with no sizing diameter refuses to price rather than silently taking F_P = 1. Turton's own Examples 7.13/7.14 substitute P + 1 (absolute bar) into an equation whose text defines P in barg; the engine follows the equation's text, so cases 11 and 12 miss by −3.9 % / −2.9 %. Decided 2026-09-21: P stays the vessel design pressure, gauge. Eq. A.2 / 7.10 is the ASME BPVC VIII-1 UG-27 thickness form, whose P is the internal design pressure (gauge) — the book's text says so on both pages — and the two examples' P + 1 is the book's own substitution, not the method; noP_offset_baris added and cases 11 and 12 remain documented misses with engine anchors. Turton's stainless F_M (Fig. A.18) and tray F_BM (Fig. A.9) remain graphical and unheld. - Class 5 process correlations are Jan 2006 (T&S Table 7.1) and 2000 (PTW Table 6-11). Escalating 17–23 years by CEPCI alone ignores real-terms cost inflation in process plant construction since 2006; totals should be read as indicative. The back-test (§3) shows a consistent overshoot rather than undershoot on fluids plants once default allowances are applied.
- Location factors: the library ships
US= 1.0 only — any other location comes from a company location set or a noted override; the ≈1997 table of unidentified authorship was withdrawn 2026-09-21 (values preserved in the transcription log). CEPCI 2017–2023 are single-secondary-source (1987–2001 checked against PTW5 Table 6-2 and 1996–2016 except 2009 against Turton Table 7.4 from the owner's copies). Both are flagged in the transcription log. - Second-pass sign-off — done 2026-09-21 for every Turton 5th ed., Towler & Sinnott 3rd ed. and PTW5 correlation, factor and Class 5 record against the owner's copies (
checked 407 / unchecked 4onpnpm validate:library --release; 4 float-residue corrections in T&S Table 7.1, none elsewhere — docs/transcription-log.md TUR5, TS3 and PTW5 sections). Still pending: the Butene-1 BP pair (one reading), theclasses.jsonclass:4 and class:3 rows (bands unchecked, indirect defaults unsourced on all three classes), the IRS MACRS tables (transcribed from recall), and, as a caution rather than a gap, the Table 19.1 U-value and Ch. 8 opex rows (transcribed and markedcheckedon the same pass from a single reading, with the task reviewer's spot-check of every row against the PDF; an independent second reader should re-read them before a tagged release).
How to read a miss
A known failure is a documented difference between the book’s own working and the method as written — a factor read off a chart, a substitution the book makes in an equation, tax paid a year in arrears. The tool follows the method as written and states the gap, rather than tuning to the printed answer. The back-test’s one miss outside the Class 5 band is kept as a miss for the same reason.