feat(skill): lab cost structure + pricing — full cost stack before quoting a price - #117
feat(skill): lab cost structure + pricing — full cost stack before quoting a price#117areliw wants to merge 1 commit into
Conversation
…ricing Close the "count only direct cost" trap: labs routinely price on reagent/consumable cost alone and underprice, ignoring indirect/hidden cost that can equal direct cost. lab-clinic-business-judgment: - Fork 7: build the full cost stack (fixed + variable) before quoting a per-test price or judging viability; 4 hidden-cost buckets (fully-loaded headcount incl. leave/coverage, rent+utilities+internet, service/repair contracts + non-lab staff, equipment depreciation); rule price >= true unit cost even for non-profit/government; the govt-ignores-fixed-cost dynamic that keeps MT wages low - Fork 8: price-floor dynamics — why a cartel/price-fix breaks and why government procurement is the biggest price-suppressor - Fork 6 unit-economics bullet now points to Fork 7; 3 new anti-patterns finance-judgment: - Fork 8: general true-unit-cost bullet for pricing your own service, plus one anti-pattern, cross-linked to the lab skill (principle only, no duplication) Regenerated skills/INDEX.md and dist/all-skills.md via build_triage.py; validate_repo.py passes. Numbers hedged as teaching illustrations that vary by unit; PII-clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d1b52c49d1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| 2. **สถานที่/utilities** — **ค่าเช่า** + น้ำ + ไฟ + **เน็ต** (LIS/เบิกรัฐ/ผลออนไลน์ ต้องมี) | ||
| 3. **operation** — สัญญา service/ซ่อมเครื่อง (PM/calibration) + **คนนอกสายแล็บ** (แม่บ้าน · ช่างแอร์/ช่างที่มาราวด์) | ||
| 4. **ค่าเสื่อม (depreciation)** — เครื่อง/ทุนที่ซื้อ ต้องเฉลี่ยลงต่อปี/ต่อ test ไม่ใช่ "จ่ายทีเดียวจบ = ฟรีตลอด" | ||
| - **สูตรตัดสิน:** `true unit cost ≈ variable/test + (fixed รวมต่อเดือน ÷ จำนวน test/เดือน)` → **เช็ค ราคาขาย ≥ true unit cost เสมอ แม้เป็น non-profit/แล็บรัฐ** (ไม่งั้น "ยิ่งตรวจยิ่งขาดทุน" — volume ต่ำยิ่งเจ็บ เพราะ fixed หารด้วยเลขน้อย) |
There was a problem hiding this comment.
Qualify full-cost price floor for subsidized work
For labs with spare capacity or fixed costs already committed/subsidized, work priced below fully allocated average cost can still improve contribution margin when the price exceeds variable cost; volume only makes losses worse when price is below variable cost or triggers new fixed costs. The unconditional ราคาขาย ≥ true unit cost เสมอ rule would make the skill reject viable government/non-profit or incremental contracts, so please frame this as the long-run/full-cost sustainability floor and add the variable-cost contribution exception.
Useful? React with 👍 / 👎.
What
Closes a coverage gap in two draft judgment skills: labs routinely price on direct cost alone (reagents/consumables) and underprice, ignoring indirect/hidden cost that can equal direct cost.
skills/lab-clinic-business-judgment.md(primary home)true unit cost ≈ variable/test + (fixed/month ÷ tests/month)→ price ≥ true unit cost even for non-profit / government.skills/finance-judgment.mdWhy
Community landmine from a Thai MT group expert (de-identified), analogous to a well-known restaurant that miscalculated cost and failed. Frames as decision-support, not a cost-accounting lecture — the judgment is "before you quote a price, build the full fixed+variable stack and check price ≥ true unit cost."
Reviewer notes
status: draft(ADVISE, not clinical 🩸) — no A/B gate required by CI.skills/INDEX.md+dist/all-skills.mdviabuild_triage.py;validate_repo.pypasses (96 skills, frontmatter + links OK).prompts/triage.mdunchanged (taglines didn't move).🤖 Generated with Claude Code