# Converting Evalplan To Tmap

> Convert Evaluation Plan CSV files into the official Datadog TMAP (Technical Mutual Activity Plan) XLSX format. Accepts two CSV input formats: (1) the 4-column CSV output from the creating-eval-plan skill (Depth, Title, Description, Success Criteria), or (2) the 10-column CSV exported from Homerun (Depth Value, Status, Assignee, Due Date, etc.). Produces a formatted XLSX matching the official ENT/MM Mutual Action Plan template with phases, categories, merged cells, and color-coded rows. Use when the user asks to convert an eval plan to TMAP, generate a TMAP XLSX, convert CSV to TMAP, or mentions "TMAP", "mutual action plan", or "convert eval plan to xlsx".

- Skill: `jek-bao-choo/converting-evalplan-to-tmap` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add jek-bao-choo/converting-evalplan-to-tmap`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jek-bao-choo/converting-evalplan-to-tmap/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: jek-bao-choo (https://skillmd.com/u/jek-bao-choo)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jek-bao-choo/converting-evalplan-to-tmap

---


# Evaluation Plan to TMAP Converter

Convert Evaluation Plan CSV files into the official Datadog TMAP XLSX format. TMAP (Technical Mutual Activity Plan) is the same as Evaluation Plan, just in the official Datadog XLSX template format.

## Supported Input Formats

### Format A: creating-eval-plan Output (4 columns)

```
Depth,Title,Description,Success Criteria
```

Generated by the `creating-eval-plan` skill. The `Depth` column encodes hierarchy (e.g., `1`, `1.1`, `1.1.1`).

### Format B: Homerun Export (10 columns)

```
Depth Value,Status,Assignee,Due Date,Status Text,Roll up children's status,Name,Description,Success Criteria,Shared
```

Exported from Datadog's internal Homerun system. Contains additional tracking metadata (status, assignee, due dates).

## Output Format

The official Datadog ENT/MM Mutual Action Plan XLSX template with 7 columns:

| Column | Header |
|--------|--------|
| A | Product Category |
| B | Configuration Item |
| C | Estimated Complete Time |
| D | Responsible Party |
| E | Target Completion Date |
| F | Status |
| G | Notes |

Read `references/tmap-format-spec.md` for the full formatting specification (colors, fonts, merged cells, column widths).

## Core Workflow

### Step 1: Read the Input CSV

Read the CSV file provided by the user. The user will provide the file path.

### Step 2: Detect Format

Check the CSV header row:
- If header starts with `Depth,Title,Description,Success Criteria` → **Format A**
- If header starts with `Depth Value,Status,Assignee,Due Date` → **Format B**

### Step 3: Parse Hierarchical Data

Parse each CSV row and classify by depth level:

- **Depth level 1** (integer, e.g., `1`, `2`, `3`): Phase row
- **Depth level 2** (one dot, e.g., `1.1`, `2.3`): Category row (Product Category)
- **Depth level 3+** (two+ dots, e.g., `1.1.1`, `2.3.4`): Item row (Configuration Item)

**Field mapping by format:**

| Target | Format A Source | Format B Source |
|--------|-----------------|-----------------|
| Title/Name | `Title` column | `Name` column |
| Description | `Description` column | `Description` column |
| Success Criteria | `Success Criteria` column | `Success Criteria` column |
| Status | Default: `Open` | `Status` column: `Complete` → `Complete`, anything else → `Open` |
| Responsible Party | _(empty)_ | `Assignee` column (drop `Not Assigned`) |
| Target Completion Date | _(empty)_ | `Due Date` column (drop `No due date`) |

### Step 4: Read Format Spec

Read `references/tmap-format-spec.md` for the exact XLSX formatting specification.

### Step 5: Generate Python Script

Write a Python script using `openpyxl` that creates the XLSX. The script must:

#### 5a. Setup

```python
import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils import get_column_letter
```

If `openpyxl` is not installed, run `pip3 install openpyxl` first.

#### 5b. Create Workbook and Sheet

- Sheet name: `Tech Config Plan`
- Column widths: A=20.33, B=53.66, C=13.66, D=23.16, E=24.16, F=21.83, G=35.16

#### 5c. Write Header Row (Row 1)

- Headers: `Product Category`, `Configuration Item`, `Estimated Complete Time`, `Responsible Party`, `Target Completion Date`, `Status`, `Notes`
- Font: Bold, white color (`FFFFFF`)
- Fill: Purple `674EA7`

#### 5d. Write Data Rows

Process the parsed CSV data in order:

**For each Phase (depth level 1):**
- Extract phase number: if the title contains `Phase N:`, use N. Otherwise, assign phase index starting from 0.
- Col A: `Phase {N}`
- Col B: the title after removing the `Phase N:` prefix (strip leading/trailing whitespace)
- Font: Bold, white color
- Fill: Phase 0 → `9900FF`, Phase 1 → `1E82FF`, Phase 2+ → `9900FF`
- Apply fill and font to all 7 columns in the row

**For each Category (depth level 2 WITH depth-3+ children):**
- Col A: the category title
- Font in A: Bold
- Fill in A: Light grey `F3F3F3`
- Count the number of child items (depth 3+) under this category
- Merge Col A from this row through (this row + child count - 1), and place the first child item's data (B through G) on the same row as the category
- Alignment for merged A cells: vertical top, wrap text

**For each Item (depth level 3+):**
- Col B: item title
- Col D: Responsible Party (Format B only; skip "Not Assigned")
- Col E: Target Completion Date (Format B only; skip "No due date")
- Col F: Status (`Open` or `Complete`)
- Col G: Notes, constructed as:
  - Both Description and Success Criteria present → `{Description} | {Success Criteria}`
  - Only Description → `{Description}`
  - Only Success Criteria → `{Success Criteria}`
  - Neither → empty

**Depth-2 rows with no depth-3 children (standalone items):**
- These are NOT categories. They are regular items that happen to be at depth 2.
- Leave Col A blank (no text, no grey fill, no bold).
- Write the title in Col B only, with item data in C through G (Status, Notes, etc.).

#### 5e. Save the XLSX

Save to the output path.

### Step 6: Run the Script

Execute the Python script with `python3`.

### Step 7: Report

Tell the user:
- Output file path
- Number of phases, categories, and items generated
- Any warnings (e.g., missing openpyxl, format detection issues)

## Output Path

Ask the user where to save the generated XLSX file, or use the path they provide upfront.

## Example

Given this Format A CSV:

```csv
Depth,Title,Description,Success Criteria
1,Phase 0: Scoping & Alignment,,
1.1,Technical Scope Validated,Validate PGW scope,All parties agree
1.2,Confirm Region,,Region confirmed
2,Phase 1: Sign Up,,
2.1,Sign Up,https://www.datadoghq.com/,Account created
3,Phase 2: Setup,,Configure monitoring
3.1,Infrastructure Monitoring,,Agents deployed
3.1.1,Deploy Agent on App Server 1,https://docs.datadoghq.com/agent/,Agent reporting
3.1.2,Deploy Agent on App Server 2,https://docs.datadoghq.com/agent/,Agent reporting
3.2,APM,,Traces visible
3.2.1,Install .NET Tracer,https://docs.datadoghq.com/tracing/,Traces in APM
```

Produces an XLSX where:
- Row 1: Header (purple `674EA7`)
- Row 2: Phase 0 | Scoping & Alignment (purple `9900FF`)
- Row 3: A=_(blank)_, B=Technical Scope Validated (standalone depth-2, no children → item row)
- Row 4: A=_(blank)_, B=Confirm Region (standalone depth-2, no children → item row)
- Row 5: Phase 1 | Sign Up (blue `1E82FF`)
- Row 6: A=_(blank)_, B=Sign Up (standalone depth-2 → item row, G=https://www.datadoghq.com/ | Account created)
- Row 7: Phase 2 | Setup (purple `9900FF`)
- Row 8-9: A=Infrastructure Monitoring (merged 2 rows, grey fill) | B=Deploy Agent on App Server 1 (row 8) | B=Deploy Agent on App Server 2 (row 9)
- Row 10: A=APM (category with 1 child, no merge needed) | B=Install .NET Tracer

## Validation

After generating the XLSX, verify:
1. The file opens correctly in Excel/Google Sheets
2. Phase rows have colored backgrounds and bold white text
3. Category cells in Col A are merged correctly
4. Status column shows "Open" or "Complete"
5. Notes column contains Description and Success Criteria where available

