From 6f69a6a484f434827a5ffa25b3de221da0615ac9 Mon Sep 17 00:00:00 2001 From: Andrew Yim Date: Thu, 28 May 2026 02:22:33 +0900 Subject: [PATCH] Route estimate outputs to central archive (ourdigital-space/estimates) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All estimates now archive to ~/Workspaces/ourdigital-space/estimates/ __/ (single 견적 archive). Engine SKILL.md documents the output-home convention (engine stays --out-dir-agnostic). presales-seo Stage 5 writes the estimate to $EST (archive); Stage 6 deck reads from $EST but stays in the engagement bundle. (Workspace side, not in this repo: SHR estimate moved to the archive, pointer left in the engagement, ourdigital-space/CLAUDE.md documents estimates/.) Co-Authored-By: Claude Opus 4.7 (1M context) --- custom-skills/95-ourdigital-presales-seo/SKILL.md | 11 ++++++----- custom-skills/96-ourdigital-estimate-engine/SKILL.md | 7 +++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/custom-skills/95-ourdigital-presales-seo/SKILL.md b/custom-skills/95-ourdigital-presales-seo/SKILL.md index f5a4193..dac0eb3 100644 --- a/custom-skills/95-ourdigital-presales-seo/SKILL.md +++ b/custom-skills/95-ourdigital-presales-seo/SKILL.md @@ -55,17 +55,18 @@ headless Chrome, python-pptx. Create `data/` subfolder. Initialize `findings.jso → write `03_presales-opportunity-brief.md`. ## Stage 5 — Estimate (견적) — REVIEW GATE -Pricing is delegated to the **`ourdigital-estimate-engine`** skill (`../96-ourdigital-estimate-engine`); this skill only maps findings → scope, then calls the engine: -- `python scripts/findings_to_scope.py --findings /data/findings.json --out /data/scope.json --seq [--tier auto|smb|basic|treatment] [--billing 0.70]` -- `ENG=../96-ourdigital-estimate-engine; python $ENG/scripts/estimate.py --rate-card $ENG/references/rate_card.yaml --catalog-dir $ENG/catalog --scope /data/scope.json --out-dir ` +Pricing is delegated to the **`ourdigital-estimate-engine`** skill (`../96-ourdigital-estimate-engine`). Estimates are archived **centrally in OurDigital's space**, not in the engagement bundle: +- `EST=~/Workspaces/ourdigital-space/estimates/__seo` — create it (central 견적 archive). +- `python scripts/findings_to_scope.py --findings /data/findings.json --out "$EST/data/scope.json" --seq [--tier auto|smb|basic|treatment] [--billing 0.70]` +- `ENG=../96-ourdigital-estimate-engine; python $ENG/scripts/estimate.py --rate-card $ENG/references/rate_card.yaml --catalog-dir $ENG/catalog --scope "$EST/data/scope.json" --out-dir "$EST"` - Engine (effort method, `seo` catalog): auto-tier (smb/basic/treatment) by portfolio + premium-vertical floor; On-page hours scale by `subbrands_total` (cap ×2.0); 제안가 = 합계 절사. Reproduces Basic ₩10.5M / Treatment ₩25.0M; SMB ~₩3M; 25-property chain ~₩29.5M. -- Produces `05_estimate_ko.md`, `05_estimate.xlsx`, `data/estimate.json` (effort shape → consumed by `build_deck.py`). Present the 견적; get sign-off. +- Produces `05_estimate_ko.md`, `05_estimate.xlsx`, `data/estimate.json` in `$EST` (the central quote archive; effort shape → consumed by `build_deck.py`). Present the 견적; get sign-off. - SEO findings→scope/tier mapping lives here (`findings_to_service.md`); **rates/hours/tiers live in the engine** (`rate_card.yaml` + `catalog/seo.yaml`) — edit pricing there, not here. ## Stage 6 — Deliverables — REVIEW GATE before send - **Client PDF**: author the short brief HTML from `templates/client_brief.html` (fill the content; keep the CSS), then `bash scripts/render_pdf.sh .html` → PDF. Verify Korean renders (Read the PDF). -- **Sales deck**: `python scripts/build_deck.py --findings /data/findings.json --estimate /data/estimate.json --out /sales-deck.pptx` +- **Sales deck**: `python scripts/build_deck.py --findings /data/findings.json --estimate "$EST/data/estimate.json" --out /sales-deck.pptx` (deck stays in the engagement bundle; reads the archived estimate.json from `$EST`) - Sanitize the client-facing pieces: no internal pricing strategy beyond the 견적; tasteful competitor benchmark only. ## Stage 7 — Archive (standard) diff --git a/custom-skills/96-ourdigital-estimate-engine/SKILL.md b/custom-skills/96-ourdigital-estimate-engine/SKILL.md index 99578da..37e3ce2 100644 --- a/custom-skills/96-ourdigital-estimate-engine/SKILL.md +++ b/custom-skills/96-ourdigital-estimate-engine/SKILL.md @@ -54,6 +54,13 @@ Example consumer: `ourdigital-presales-seo` (`findings_to_scope.py` → engine real quote data. All current catalogs are real. - Rates change in `rate_card.yaml` only (single source). Validate against a known real quote. +## Output location +Estimates are archived centrally in OurDigital's space: +`~/Workspaces/ourdigital-space/estimates/__/` +(e.g. `…/estimates/2026-05-27_shr_seo/`). The engine stays `--out-dir`-agnostic — the caller +passes that path. Client engagements keep their audit docs/deck in their own workspace but the +견적 lives here (single quote archive). + ## Conventions Korean-first output · 부가세 별도 · 유효기간 14d · 현금 · `OD-YYYY-NNN`. Don't invent rates — stub and flag instead. Legal entity (주)디인텔리전스 / info@ourdigital.org.