Skill 寫法圖鑑

lbo-model

Anthropic | 金融與投資 | 原文 | Apache-2.0

用範本在 Excel 建 LBO 模型,全用公式並逐段落跟你確認

中文翻譯

---
name: lbo-model
description: 在 Excel 中完成 LBO(槓桿收購)模型範本時使用這個 skill,適用於私募股權交易、交易資料或投資委員會簡報。這個 skill 會填入公式、驗證計算,並確保專業的格式標準,能適應任何範本結構。
---

---

## 範本要求

**這個 skill 使用範本來建 LBO 模型。一律先檢查有沒有附上範本檔案。**

開始任何 LBO 模型之前:
1. **如果有附上/提供範本檔案**:完全照該範本的結構,複製後填入使用者的資料
2. **如果沒有附範本**:問使用者:*「你有指定要我用的 LBO 範本嗎?如果沒有,我可以用標準範本,裡面包含 Sources & Uses、Operating Model、Debt Schedule 和 Returns Analysis。」*
3. **如果使用標準範本**:複製 `examples/LBO_Model.xlsx` 作為起點,填入使用者的假設

**重要**:當附上像 `LBO_Model.xlsx` 這樣的檔案時,你一定要拿它當範本,不准從頭建。即使範本看起來很複雜、功能比需要的多,也要複製後依使用者的需求調整。有提供範本時,絕對不准決定「從頭建」。

---

## 給 CLAUDE 的關鍵指示:先讀這段

### 環境:Office JS vs Python

**如果在 Excel 裡執行(Office Add-in / Office JS 環境):**
- 直接用 Office JS(`Excel.run(async (context) => {...})`),不要用 Python/openpyxl
- 用 `range.formulas = [["=B5*B6"]]` 寫公式,Office JS 的公式在即時活頁簿中會原生重算
- 一樣適用「公式優先於寫死數值」的規則:任何該是計算的東西,都設 `range.formulas`,絕對不要設 `range.values`
- 用 `range.format.font.color` / `range.format.fill.color` 做藍/黑/紫/綠的色彩慣例
- 不需要另外的重算步驟,Excel 原生處理計算
- **合併儲存格的陷阱:** 不要先呼叫 `.merge()` 再對合併後的範圍設 `.values`(會丟 `InvalidArgument`,因為該範圍仍然回報原始尺寸)。正確做法:只把值寫進左上角的儲存格(`ws.getRange("A7").values = [["SOURCES & USES"]]`),再合併並格式化整個範圍(`ws.getRange("A7:F7").merge(); ws.getRange("A7:F7").format.fill.color = "#1F4E79";`)

**如果是產生獨立的 .xlsx 檔案(沒有即時 Excel session):**
- 照下面的說明用 Python/openpyxl
- 寫公式字串(`ws["D20"] = "=B5*B6"`),交付前先執行 `recalc.py`

這個 skill 其餘部分是用 openpyxl 的範例寫的,但同樣的原則也適用 Office JS,把 API 呼叫轉換過去就好。

### 核心原則
* **每一個計算都必須是 Excel 公式**:絕對不要在 Python 裡算好值再把結果寫死進儲存格。用 openpyxl 時,寫 `cell.value = "=B5*B6"`(公式字串),不是 `cell.value = 1250`(算出來的結果)。模型必須是動態的,輸入變了就會更新。
* **用範本的結構**:照 `examples/LBO_Model.xlsx` 或使用者提供的範本的組織方式。不要自己發明版面。
* **用正確的儲存格參照**:所有公式都應該參照適當的儲存格。絕對不要把應該來自其他儲存格的數字手打進去。
* **維持正負號慣例一致**:範本用什麼正負號慣例就照著用(有些用負數表示流出,有些用正數)。全程保持一致。
* **一個段落一個段落做,每一步都跟使用者確認**:完整做完一個段落,把做出來的東西給使用者看,跑該段落的驗證檢查,並在進入下一段之前取得確認。不要把整個模型從頭建到尾才呈現,後面的段落依賴前面的,等報酬都建好了才發現 Sources & Uses 有錯,會到處都要重做。

### 公式色彩慣例
* **藍色 (0000FF)**:寫死的輸入,手打的數字,不參照其他儲存格
* **黑色 (000000)**:有計算的公式,任何使用運算子或函數的公式(`=B4*B5`、`=SUM()`、`=-MAX(0,B4)`)
* **紫色 (800080)**:連到**同一個分頁**儲存格的連結,直接參照、沒有計算(`=B9`、`=B45`)
* **綠色 (008000)**:連到**不同分頁**儲存格的連結,跨工作表參照(`=Assumptions!B5`、`='Operating Model'!C10`)

### 填色色盤:專業的藍與灰(除非使用者/範本另有指定,否則用這個預設)
* **保持極簡**:儲存格填色只用藍和灰。不要加入綠、黃、紅或多種強調色。專業的 LBO 模型講究克制。
* **預設填色色盤:**
  * **段落標題**(Sources & Uses、Operating Model 等):深藍 `#1F4E79` 配白色粗體字
  * **欄位標題**(Year 1、Year 2 等):淺藍 `#D9E1F2` 配黑色粗體字
  * **輸入儲存格**:淺灰 `#F2F2F2`(或直接白色),藍色*字體*才是訊號,填色是次要的
  * **公式/計算儲存格**:白色,不填色
  * **關鍵輸出**(IRR、MOIC、Exit Equity):中藍 `#BDD7EE` 配黑色粗體字
* **色盤就這些。** 3 種藍 + 1 種灰 + 白。如果範本有自己的顏色,就跟著範本。
* 注意:上面的藍/黑/紫/綠**字體**顏色,是用來區分輸入 vs 公式 vs 連結。它們跟這裡的**填色**色盤是分開的,兩者搭配使用。

### 數字格式標準
* **貨幣**:`$#,##0;($#,##0);"-"` 或 `$#,##0.0`,依範本而定
* **百分比**:`0.0%`(一位小數)
* **倍數**:`0.0"x"`(一位小數)
* **MOIC/詳細比率**:`0.00"x"`(兩位小數以求精確)
* **所有數值儲存格**:靠右對齊

---

### 先釐清需求

填入任何公式之前:

* **檢視範本結構**:找出所有段落,理解時間軸(哪些欄位是哪些期間),記下任何既有的公式
* **有不清楚的就問使用者**:如果範本結構、計算方法或需求有模糊的地方,先問再繼續
* **確認關鍵假設**:任何關鍵輸入、計算偏好或特定需求
* **只有在理解範本之後**,才開始填公式

---

## 範本分析階段:先做這個

填入任何公式之前,徹底檢視範本:

1. **描繪結構**:找出每個段落在哪裡、彼此如何關聯。註明哪些段落會餵給其他段落。

2. **理解時間軸**:哪些欄位代表哪些期間?有沒有「Closing」或「Pro Forma」欄?預測期從哪裡開始?

3. **辨識輸入 vs 公式儲存格**:範本常用顏色標示、框線或底色,來表示哪些儲存格要輸入、哪些要公式。尊重這些慣例。

4. **仔細讀既有的標籤**:列標籤明確告訴你預期是什麼計算。不要假設,讀範本問的是什麼。

5. **檢查既有的公式**:有些範本是半填好的。除非被明確要求,否則不要覆寫正常運作的公式。

6. **註記範本特有的慣例**:正負號慣例、小計結構、段落如何組織、不同組成是否分在不同分頁等等。

---

## 填入公式:通用做法

每個需要公式的儲存格,依下列優先順序處理:

### 步驟 1:檢查範本
* 這個儲存格已經有公式了嗎?有的話,驗證它是對的然後繼續。
* 有沒有註解或備註指出預期的計算?
* 列/欄標籤是否讓計算很明顯?
* 鄰近的儲存格有沒有顯示該遵循的模式?

### 步驟 2:檢查使用者的指示
* 使用者有指定特定的計算方法嗎?
* 有沒有影響這個公式的既定假設?
* 有提到任何特殊要求嗎?

### 步驟 3:套用標準做法
* 如果範本和使用者都沒指定,就用標準的 LBO 建模慣例
* 記錄你做的任何假設
* 真的不確定就問使用者

---

## 常見問題區

下列計算模式在各種 LBO 模型中經常出問題。遇到時要特別留意:

### 平衡的段落
* 當兩個段落必須相等時(例如 Sources = Uses),通常有一個項目是「plug」(平衡數字)
* 辨識哪個項目是 plug,並以差額來計算它

### 稅務計算
* 稅務公式只應該參照相關的收入列和稅率
* 不應該參照不相關的段落(例如債務明細表)
* 考慮虧損是產生稅盾,還是直接忽略

### 利息與循環參照
* 如果利息計算參照了會被現金流影響的餘額,就會造成循環
* 用**期初餘額**(不是平均或期末)來打破循環參照
* 模式:利息 → 現金流 → 還款 → 期末餘額(如果利息用期末餘額,就會繞回來形成循環)

### 債務還款/現金掃除(cash sweep)
* 有多個債務層級(tranche)時,通常有一個優先順序
* 現金掃除要遵守優先順序的 waterfall
* 餘額不能變成負的,適當使用 MAX 或 MIN 函數

### 報酬計算(IRR/MOIC)
* 現金流的正負號必須正確:投資 = 負、收回 = 正
* 如果用 XIRR,需要對應的日期
* 如果用 IRR,現金流應該是連續的期間
* MOIC = 總收回金額 / 總投資金額

### 敏感度表
* **用奇數維度**(5×5 或 7×7),絕對不要 4×4 或 6×6。奇數維度保證有真正的中心儲存格。
* **中心儲存格 = base case。** 列和欄的軸值要圍繞模型實際的假設對稱建立(例如 base 進場倍數 = 10.0x,軸就是 `[8.0x, 9.0x, 10.0x, 11.0x, 12.0x]`)。中心儲存格的 IRR/MOIC 就必須等於模型實際的 IRR/MOIC 輸出,這是證明表格接對了的證據。
* **凸顯中心儲存格**:中藍填色(`#BDD7EE`)加粗體字,讓 base case 在視覺上有錨點。
* Excel 的 DATA TABLE 函數可能無法搭配 openpyxl,改為寫明確的公式去參照列/欄標題
* 每個儲存格都該顯示不同的值,如果全部一樣,代表公式沒有正確變動
* 使用混合參照(例如 `$A5` 用於列輸入、`B$4` 用於欄輸入)

---

## 驗證 Checklist:完成後執行

### 執行公式驗證
```bash
python /mnt/skills/public/xlsx/recalc.py model.xlsx
```
必須回傳成功且零錯誤。

### 段落平衡
- [ ] 任何必須平衡的段落(Sources/Uses、資產/負債)都精確平衡
- [ ] Plug 項目已正確以平衡數字計算
- [ ] 應該跨段落一致的金額都一致

### 損益/營運預測
- [ ] 營收/營業收入由驅動因子或成長率正確推算
- [ ] 所有成本和費用項目都適當計算
- [ ] 小計與總計加總正確
- [ ] 利潤率和比率合理
- [ ] 與假設的連結正確

### 資產負債表(如適用)
- [ ] 資產 = 負債 + 權益(必須平衡)
- [ ] 所有項目都連到適當的明細表或 roll-forward
- [ ] 期初餘額 = 前一期期末餘額
- [ ] 包含檢查列且顯示為零

### 現金流量(如適用)
- [ ] 以正確的收益數字起算
- [ ] 非現金項目適當加減
- [ ] 營運資金變動的正負號正確
- [ ] 期末現金 = 期初現金 + 淨現金流
- [ ] 各報表之間的現金餘額一致

### 支援明細表
- [ ] Roll-forward 明細表平衡(期初 + 變動 = 期末)
- [ ] 明細表與主要報表連結正確
- [ ] 計算項目使用適當的驅動因子
- [ ] 所有期間的計算方式一致

### 債務/融資明細表(如適用)
- [ ] 期初餘額對得上資金來源或前一期
- [ ] 利息以適當的餘額計算(通常是期初)
- [ ] 還款尊重現金可用量和優先順序
- [ ] 期末餘額不能為負
- [ ] 合計正確加總各層級

### 報酬/輸出分析
- [ ] 退出/終值計算正確
- [ ] 包含所有相關調整
- [ ] 現金流正負號正確(投資為負、收回為正)
- [ ] IRR/MOIC 公式參照完整範圍
- [ ] 結果對該情境來說合理

### 敏感度表(如適用)
- [ ] 表格維度是奇數(5×5 或 7×7),有真正的中心儲存格
- [ ] 列和欄的軸值圍繞 base case 對稱(`[base-2Δ, base-Δ, base, base+Δ, base+2Δ]`)
- [ ] 中心儲存格的輸出等於模型實際的 IRR/MOIC,確認表格接對了
- [ ] 中心儲存格已凸顯(中藍填色 `#BDD7EE`、粗體字)
- [ ] 列和欄標題包含適當的輸入值
- [ ] 每個資料儲存格都含公式(不是寫死的)
- [ ] 每個資料儲存格都顯示不同的值
- [ ] 值往預期的方向變動(出場倍數越高 → IRR 越高,等等)

### 格式
- [ ] 寫死的輸入是藍色 (0000FF)
- [ ] 計算公式是黑色 (000000)
- [ ] 同分頁連結是紫色 (800080)
- [ ] 跨分頁連結是綠色 (008000)
- [ ] 所有數字都靠右對齊
- [ ] 全面套用適當的數字格式
- [ ] 沒有儲存格顯示錯誤值(#REF!、#DIV/0!、#VALUE!、#NAME?)

### 邏輯合理性檢查
- [ ] 數字的數量級合理
- [ ] 趨勢合理(成長、下滑、穩定符合預期)
- [ ] 沒有明顯錯誤的值(該為正卻是負、不可能的百分比等)
- [ ] 關鍵輸出落在該分析類型的合理範圍內

---

## 要避免的常見錯誤

| 錯誤 | 會出什麼問題 | 如何修正 |
|-------|-----------------|------------|
| 把計算出來的值寫死 | 輸入改了模型不會更新 | 一律使用參照來源儲存格的公式 |
| 複製後儲存格參照錯誤 | 公式指向錯的儲存格 | 驗證所有連結,適當使用 $ 錨定 |
| 循環參照錯誤 | 模型無法計算 | 利息類計算用期初餘額,打破循環 |
| 段落不平衡 | 應該吻合的合計不吻合 | 確保有一個項目是 plug(以差額計算) |
| 不可能出現的負餘額 | 支付/使用的超過可用量 | 適當使用 MAX(0, ...) 或 MIN 函數 |
| IRR/報酬錯誤 | 正負號錯或範圍不完整 | 檢查現金流正負號,並確保公式涵蓋所有期間 |
| 敏感度表顯示同一個值 | 公式沒有隨輸入變動 | 檢查儲存格參照,需要混合參照($A5、B$4) |
| Roll-forward 對不上 | 期初 ≠ 前一期期末 | 驗證各期間之間的連結 |
| 正負號慣例不一致 | 加項變成減項,反之亦然 | 全程一致遵循範本的慣例 |

---

## 與使用者合作:逐段落的檢查點

* **如果範本結構不清楚**,先問再繼續
* **如果使用者的需求與範本衝突**,確認他們的偏好
* **每完成一個主要段落後**,停下來,與使用者確認後才繼續:
  - **Sources & Uses 之後** → 呈現平衡的表格,確認 plug 正確,取得簽核後才建 operating model
  - **Operating Model / 預測之後** → 呈現預測損益表,確認成長率和利潤率看起來正確,取得簽核後才做債務明細表
  - **債務明細表之後** → 呈現期初/期末餘額和利息,確認 waterfall 邏輯,取得簽核後才做報酬
  - **報酬(IRR/MOIC)之後** → 呈現現金流序列和輸出,確認正負號和範圍,取得簽核後才做敏感度表
  - **敏感度表之後** → 展示每個儲存格都會變動,確認 base case 落在預期的位置
* **如果驗證時發現錯誤**,先修正再進入下一段
* **展示你的過程**:有幫助時說明關鍵公式或假設
* **絕對不要在沒有逐段落確認過的情況下呈現完成的模型**,在源頭抓到錯的儲存格參照,比從壞掉的 IRR 往回追查快多了

---

**這個 skill 透過用正確的公式、適當的格式和經過驗證的計算來填寫範本,產出投資銀行等級的 LBO 模型。這個 skill 能適應任何範本結構,同時確保財務正確性和專業的呈現標準。**

英文原文

---
name: lbo-model
description: This skill should be used when completing LBO (Leveraged Buyout) model templates in Excel for private equity transactions, deal materials, or investment committee presentations. The skill fills in formulas, validates calculations, and ensures professional formatting standards that adapt to any template structure.
---

---

## TEMPLATE REQUIREMENT

**This skill uses templates for LBO models. Always check for an attached template file first.**

Before starting any LBO model:
1. **If a template file is attached/provided**: Use that template's structure exactly - copy it and populate with the user's data
2. **If no template is attached**: Ask the user: *"Do you have a specific LBO template you'd like me to use? If not, I can use the standard template which includes Sources & Uses, Operating Model, Debt Schedule, and Returns Analysis."*
3. **If using the standard template**: Copy `examples/LBO_Model.xlsx` as your starting point and populate it with the user's assumptions

**IMPORTANT**: When a file like `LBO_Model.xlsx` is attached, you MUST use it as your template - do not build from scratch. Even if the template seems complex or has more features than needed, copy it and adapt it to the user's requirements. Never decide to "build from scratch" when a template is provided.

---

## CRITICAL INSTRUCTIONS FOR CLAUDE - READ FIRST

### Environment: Office JS vs Python

**If running inside Excel (Office Add-in / Office JS environment):**
- Use Office JS (`Excel.run(async (context) => {...})`) directly — do NOT use Python/openpyxl
- Write formulas via `range.formulas = [["=B5*B6"]]` — Office JS formulas recalculate natively in the live workbook
- The same formulas-over-hardcodes rule applies: set `range.formulas`, never `range.values` for anything that should be a calculation
- Use `range.format.font.color` / `range.format.fill.color` for the blue/black/purple/green convention
- No separate recalc step needed — Excel handles calculation natively
- **Merged cell pitfall:** Do NOT call `.merge()` then set `.values` on the merged range (throws `InvalidArgument` — range still reports original dimensions). Instead: write value to top-left cell alone (`ws.getRange("A7").values = [["SOURCES & USES"]]`), then merge + format the full range (`ws.getRange("A7:F7").merge(); ws.getRange("A7:F7").format.fill.color = "#1F4E79";`)

**If generating a standalone .xlsx file (no live Excel session):**
- Use Python/openpyxl as described below
- Write formula strings (`ws["D20"] = "=B5*B6"`), then run `recalc.py` before delivery

The rest of this skill is written with openpyxl examples, but the same principles apply to Office JS — just translate the API calls.

### Core Principles
* **Every calculation must be an Excel formula** - NEVER compute values in Python and hardcode results into cells. When using openpyxl, write `cell.value = "=B5*B6"` (formula string), NOT `cell.value = 1250` (computed result). The model must be dynamic and update when inputs change.
* **Use the template structure** - Follow the organization in `examples/LBO_Model.xlsx` or the user's provided template. Do not invent your own layout.
* **Use proper cell references** - All formulas should reference the appropriate cells. Never type numbers that should come from other cells.
* **Maintain sign convention consistency** - Follow whatever sign convention the template uses (some use negative for outflows, some use positive). Be consistent throughout.
* **Work section by section, verify with user at each step** - Complete one section fully, show the user what was built, run the section's verification checks, and get confirmation BEFORE moving to the next section. Do NOT build the entire model end-to-end and then present it — later sections depend on earlier ones, so catching a mistake in Sources & Uses after the returns are already built means rework everywhere.

### Formula Color Conventions
* **Blue (0000FF)**: Hardcoded inputs - typed numbers that don't reference other cells
* **Black (000000)**: Formulas with calculations - any formula using operators or functions (`=B4*B5`, `=SUM()`, `=-MAX(0,B4)`)
* **Purple (800080)**: Links to cells on the **same tab** - direct references with no calculation (`=B9`, `=B45`)
* **Green (008000)**: Links to cells on **different tabs** - cross-sheet references (`=Assumptions!B5`, `='Operating Model'!C10`)

### Fill Color Palette — Professional Blues & Greys (Default unless user/template specifies otherwise)
* **Keep it minimal** — only use blues and greys for cell fills. Do NOT introduce greens, yellows, reds, or multiple accents. A professional LBO model uses restraint.
* **Default fill palette:**
  * **Section headers** (Sources & Uses, Operating Model, etc.): Dark blue `#1F4E79` with white bold text
  * **Column headers** (Year 1, Year 2, etc.): Light blue `#D9E1F2` with black bold text
  * **Input cells**: Light grey `#F2F2F2` (or just white) — the blue *font* is the signal, fill is secondary
  * **Formula/calculated cells**: White, no fill
  * **Key outputs** (IRR, MOIC, Exit Equity): Medium blue `#BDD7EE` with black bold text
* **That's the whole palette.** 3 blues + 1 grey + white. If the template uses its own colors, follow the template instead.
* Note: The blue/black/purple/green **font** colors above are for distinguishing inputs vs formulas vs links. Those are separate from the **fill** palette here — both work together.

### Number Formatting Standards
* **Currency**: `$#,##0;($#,##0);"-"` or `$#,##0.0` depending on template
* **Percentages**: `0.0%` (one decimal)
* **Multiples**: `0.0"x"` (one decimal)
* **MOIC/Detailed Ratios**: `0.00"x"` (two decimals for precision)
* **All numeric cells**: Right-aligned

---

### Clarify Requirements First

Before filling any formulas:

* **Examine the template structure** - Identify all sections, understand the timeline (which columns are which periods), note any existing formulas
* **Ask the user if anything is unclear** - If the template structure, calculation methods, or requirements are ambiguous, ask before proceeding
* **Confirm key assumptions** - Any key inputs, calculation preferences, or specific requirements
* **ONLY AFTER understanding the template**, proceed to fill in formulas

---

## TEMPLATE ANALYSIS PHASE - DO THIS FIRST

Before filling any formulas, examine the template thoroughly:

1. **Map the structure** - Identify where each section lives and how they relate to each other. Note which sections feed into others.

2. **Understand the timeline** - Which columns represent which periods? Is there a "Closing" or "Pro Forma" column? Where does the projection period start?

3. **Identify input vs formula cells** - Templates often use color coding, borders, or shading to indicate which cells need inputs vs formulas. Respect these conventions.

4. **Read existing labels carefully** - The row labels tell you exactly what calculation is expected. Don't assume - read what the template is asking for.

5. **Check for existing formulas** - Some templates come partially filled. Don't overwrite working formulas unless specifically asked.

6. **Note template-specific conventions** - Sign conventions, subtotal structures, how sections are organized, whether there are separate tabs for different components, etc.

---

## FILLING FORMULAS - GENERAL APPROACH

For each cell that needs a formula, follow this hierarchy:

### Step 1: Check the Template
* Does the cell already have a formula? If yes, verify it's correct and move on.
* Is there a comment or note indicating the expected calculation?
* Does the row/column label make the calculation obvious?
* Do neighboring cells show a pattern you should follow?

### Step 2: Check the User's Instructions
* Did the user specify a particular calculation method?
* Are there stated assumptions that affect this formula?
* Any special requirements mentioned?

### Step 3: Apply Standard Practice
* If neither template nor user specifies, use standard LBO modeling conventions
* Document any assumptions you make
* If genuinely uncertain, ask the user

---

## COMMON PROBLEM AREAS

The following calculation patterns frequently cause issues across LBO models. Pay special attention when you encounter these:

### Balancing Sections
* When two sections must equal (e.g., Sources = Uses), one item is typically the "plug" (balancing figure)
* Identify which item is the plug and calculate it as the difference

### Tax Calculations
* Tax formulas should only reference the relevant income line and tax rate
* Should NOT reference unrelated sections (e.g., debt schedules)
* Consider whether losses create tax shields or are simply ignored

### Interest and Circular References
* Interest calculations can create circularity if they reference balances affected by cash flows
* Use **Beginning Balance** (not average or ending) to break circular references
* Pattern: Interest → Cash Flow → Paydown → Ending Balance (if interest uses ending balance, this circles back)

### Debt Paydown / Cash Sweeps
* When multiple debt tranches exist, there's usually a priority order
* Cash sweep should respect the priority waterfall
* Balances cannot go negative - use MAX or MIN functions appropriately

### Returns Calculations (IRR/MOIC)
* Cash flows must have correct signs: Investment = negative, Proceeds = positive
* If using XIRR, need corresponding dates
* If using IRR, cash flows should be in consecutive periods
* MOIC = Total Proceeds / Total Investment

### Sensitivity Tables
* **Use ODD dimensions** (5×5 or 7×7) — never 4×4 or 6×6. Odd dimensions guarantee a true center cell.
* **Center cell = base case.** Build the row and column axis values symmetrically around the model's actual assumptions (e.g., if base entry multiple = 10.0x, axis = `[8.0x, 9.0x, 10.0x, 11.0x, 12.0x]`). The center cell's IRR/MOIC MUST then equal the model's actual IRR/MOIC output — this is the proof the table is wired correctly.
* **Highlight the center cell** — medium-blue fill (`#BDD7EE`) + bold font so the base case is visually anchored.
* Excel's DATA TABLE function may not work with openpyxl — instead write explicit formulas that reference row/column headers
* Each cell should show a DIFFERENT value — if all same, formulas aren't varying correctly
* Use mixed references (e.g., `$A5` for row input, `B$4` for column input)

---

## VERIFICATION CHECKLIST - RUN AFTER COMPLETION

### Run Formula Validation
```bash
python /mnt/skills/public/xlsx/recalc.py model.xlsx
```
Must return success with zero errors.

### Section Balancing
- [ ] Any sections that must balance (Sources/Uses, Assets/Liabilities) balance exactly
- [ ] Plug items are calculated correctly as the balancing figure
- [ ] Amounts that should match across sections are consistent

### Income/Operating Projections
- [ ] Revenue/top-line builds correctly from drivers or growth rates
- [ ] All cost and expense items calculated appropriately
- [ ] Subtotals and totals sum correctly
- [ ] Margins and ratios are reasonable
- [ ] Links to assumptions are correct

### Balance Sheet (if applicable)
- [ ] Assets = Liabilities + Equity (must balance)
- [ ] All items link to appropriate schedules or roll-forwards
- [ ] Beginning balances = prior period ending balances
- [ ] Check row included and shows zero

### Cash Flow (if applicable)
- [ ] Starts with correct income figure
- [ ] Non-cash items added/subtracted appropriately
- [ ] Working capital changes have correct signs
- [ ] Ending Cash = Beginning Cash + Net Cash Flow
- [ ] Cash balances are consistent across statements

### Supporting Schedules
- [ ] Roll-forward schedules balance (Beginning + Changes = Ending)
- [ ] Schedules link correctly to main statements
- [ ] Calculated items use appropriate drivers
- [ ] All periods are calculated consistently

### Debt/Financing Schedules (if applicable)
- [ ] Beginning balances tie to sources or prior period
- [ ] Interest calculated on appropriate balance (typically beginning)
- [ ] Paydowns respect cash availability and priority
- [ ] Ending balances cannot be negative
- [ ] Totals sum tranches correctly

### Returns/Output Analysis
- [ ] Exit/terminal values calculated correctly
- [ ] All relevant adjustments included
- [ ] Cash flow signs are correct (negative for investment, positive for proceeds)
- [ ] IRR/MOIC formulas reference complete ranges
- [ ] Results are reasonable for the scenario

### Sensitivity Tables (if applicable)
- [ ] Grid dimensions are ODD (5×5 or 7×7) — there is a true center cell
- [ ] Row and column axis values are symmetric around the base case (`[base-2Δ, base-Δ, base, base+Δ, base+2Δ]`)
- [ ] Center cell output equals the model's actual IRR/MOIC — confirms the table is wired correctly
- [ ] Center cell is highlighted (medium-blue fill `#BDD7EE`, bold font)
- [ ] Row and column headers contain appropriate input values
- [ ] Each data cell contains a formula (not hardcoded)
- [ ] Each data cell shows a DIFFERENT value
- [ ] Values move in expected directions (higher exit multiple → higher IRR, etc.)

### Formatting
- [ ] Hardcoded inputs are blue (0000FF)
- [ ] Calculated formulas are black (000000)
- [ ] Same-tab links are purple (800080)
- [ ] Cross-tab links are green (008000)
- [ ] All numbers are right-aligned
- [ ] Appropriate number formats applied throughout
- [ ] No cells show error values (#REF!, #DIV/0!, #VALUE!, #NAME?)

### Logical Sanity Checks
- [ ] Numbers are reasonable order of magnitude
- [ ] Trends make sense (growth, decline, stabilization as expected)
- [ ] No obviously wrong values (negative where should be positive, impossible percentages, etc.)
- [ ] Key outputs are within reasonable ranges for the type of analysis

---

## COMMON ERRORS TO AVOID

| Error | What Goes Wrong | How to Fix |
|-------|-----------------|------------|
| Hardcoding calculated values | Model doesn't update when inputs change | Always use formulas that reference source cells |
| Wrong cell references after copying | Formulas point to wrong cells | Verify all links, use appropriate $ anchoring |
| Circular reference errors | Model can't calculate | Use beginning balances for interest-type calcs, break the circle |
| Sections don't balance | Totals that should match don't | Ensure one item is the plug (calculated as difference) |
| Negative balances where impossible | Paying/using more than available | Use MAX(0, ...) or MIN functions appropriately |
| IRR/return errors | Wrong signs or incomplete ranges | Check cash flow signs and ensure formula covers all periods |
| Sensitivity table shows same value | Formula not varying with inputs | Check cell references - need mixed references ($A5, B$4) |
| Roll-forwards don't tie | Beginning ≠ prior ending | Verify links between periods |
| Inconsistent sign conventions | Additions become subtractions or vice versa | Follow template's convention consistently throughout |

---

## WORKING WITH THE USER — SECTION-BY-SECTION CHECKPOINTS

* **If the template structure is unclear**, ask before proceeding
* **If the user's requirements conflict with the template**, confirm their preference
* **After completing each major section**, STOP and verify with the user before continuing:
  - **After Sources & Uses** → show the balanced table, confirm the plug is correct, get sign-off before building the operating model
  - **After Operating Model / Projections** → show the projected P&L, confirm growth rates and margins look right, get sign-off before the debt schedule
  - **After Debt Schedule** → show beginning/ending balances and interest, confirm the waterfall logic, get sign-off before returns
  - **After Returns (IRR/MOIC)** → show the cash flow series and outputs, confirm signs and ranges, get sign-off before sensitivity tables
  - **After Sensitivity Tables** → show that each cell varies, confirm the base case lands where expected
* **If errors are found during verification**, fix them before moving to the next section
* **Show your work** - explain key formulas or assumptions when helpful
* **Never present a completed model without having checked in at each section** — it's faster to catch a wrong cell reference at the source than to trace it backwards from a broken IRR

---

**This skill produces investment banking-quality LBO models by filling templates with correct formulas, proper formatting, and validated calculations. The skill adapts to any template structure while ensuring financial accuracy and professional presentation standards.**