Releases: signal-yield/revenue-kun
Release list
revenue-kun v0.5.2 — OER版・費用詳細版の独立計算化
revenue-kun v0.5.2
v0.5.2では、レントロールから生成するdirect_cap.xlsxの計算構造を整理し、OER方式と費用積上方式の両方を、独立した計算シートとして同時に出力するようにしました。
主な変更
直接還元法_OERと直接還元法‗費用詳細版を常に同時出力- 賃料・共益費・水道代収入・駐車場収入・その他収入を両シートのGPIへ自動反映
- Local Web UIの付帯収入選択チェックボックスを廃止
- 付帯収入の抽出結果・月額・年額・GPI年額を読み取り専用で表示
直接還元法_OERは、EGIに採用OERを乗じて運営費用を推計直接還元法‗費用詳細版は、入力された個別費用を積み上げてNOI・収益試算値を算定- 両計算シートは互いの入力値・計算値を参照せず、それぞれ独立して計算
- OER・空室損失率・個別費用・資本的支出・還元利回り等は、Excel出力後に利用者が入力
- 従来の
optional_income設定は後方互換のため受理するものの、計算結果には影響しない非推奨設定へ変更
生成されるExcel
direct_cap.xlsxは次の3シートで構成されます。
直接還元法_OER直接還元法‗費用詳細版読み取りレントロール
対応入力
- CSV
- テキスト抽出可能なPDF
スキャンPDF、スマートフォン撮影画像、OCRには未対応です。
検証
- pytest:401 passed
- 合成CSV・合成PDFによるCLI検証
- Docker Web UIのbuild/run
/healthz/api/preview/api/generate- Microsoft Excel実機によるフル再計算、保存、再オープン
- OER版と費用詳細版の独立性
- 非収入項目のGPI除外
注意事項
本ツールは収益試算を支援するOSSです。正式な不動産鑑定評価、投資判断、法務・税務判断を代替するものではありません。生成されたExcelと元資料を照合し、入力する前提条件の妥当性を利用者自身で確認してください。
v0.5.1 — Version and documentation alignment
revenue-kun v0.5.1
v0.5.1 is a version and documentation alignment patch for the v0.5.0 Local Web UI MVP.
Changes
- Aligned internal
__version__and the rootVERSIONfile with the current release line. - Updated README and GitHub Pages to identify v0.5.1 as the current release.
- Updated the README to reflect successful Docker Web UI build/run verification.
- Added a version consistency regression test.
Functional scope
There are no functional changes to:
- rent-roll extraction
- direct-capitalization calculations
- optional-income behavior
- CLI behavior
- Local Web UI behavior
- Excel workbook structure
Docker Web UI verification
Verified using a working Docker Desktop environment:
Dockerfile.webbuild- no-cache build
- loopback-bound container run
/healthz/api/preview/api/generatedirect_cap.xlsxgeneration- optional-income opt-out and explicit opt-in
Scope limitations
- OCR and scanned PDFs remain unsupported.
- Smartphone-captured images remain unsupported.
- This is a local-first tool, not a hosted SaaS.
- Real-world PDF evaluation currently covers 3 samples believed to belong to the same template family; broader layout diversity remains unverified.
Disclaimer
Outputs are direct-capitalization revenue estimates and are not formal real estate appraisals or appraised values.
v0.5.0 — Local Web UI MVP
v0.5.0 — Local Web UI MVP
Highlights
- Added a local browser-based Web UI MVP on top of the existing CLI workflow.
- Upload rent roll CSV or text-based PDF files from the browser.
- Preview extracted rent-roll rows before workbook generation.
- Review missing-information results before generating output.
- Explicitly select optional-income categories for GPI inclusion.
- Download
direct_cap.xlsxfrom the browser. - Added Web UI Docker packaging with
Dockerfile.web. - Added README quick-start documentation and synthetic screenshots.
- Added
.gitattributesbinary handling for PDF/PNG/XLSX-style assets.
Local Web UI
Run locally without Docker:
python -m pip install -r requirements-web.txt
python -m uvicorn webui.app:app --host 127.0.0.1 --port 8000Then open:
http://127.0.0.1:8000
Run locally with Docker:
docker build -f Dockerfile.web -t revenue-kun-web .
docker run --rm -p 127.0.0.1:8000:8000 revenue-kun-webThe Docker Web UI build/run path was validated with Docker Desktop using loopback binding (127.0.0.1:8000:8000).
Output
The Web UI generates:
direct_cap.xlsx
Workbook sheets:
直接還元法_OER直接還元法‗費用詳細版読み取りレントロール
Optional income behavior
Water income, parking income, and other income are excluded from GPI by default.
Only explicitly selected optional-income categories are included in GPI.
Validation
Validated on the release candidate commit:
python -m pytest -q—375 passed- CLI smoke test — passed
- CLI-generated workbook sheet check — passed
- Local Web UI smoke test without Docker — passed
- Docker Web UI build/run smoke test — passed
- Docker Web UI
/api/previewand/api/generate— passed - Generated workbook 3-sheet check — passed
Notes and limitations
This release is local-first.
It supports:
- CSV rent roll input
- text-based PDF rent roll input
- local CLI workflow
- local browser Web UI workflow
- local Docker Web UI workflow
It does not include:
- OCR
- scanned-PDF support
- smartphone photo ingestion
- hosted SaaS
- authentication
- accounts
- billing
- permanent cloud storage
- automatic assumptions
- automatic capitalization-rate recommendations
The generated workbook is a revenue-estimation workbook. It is not a real estate appraisal, appraised income value, investment advice, legal advice, or tax advice.
Related Issues
Completed:
Still open:
revenue-kun v0.4.2 — Docker-ready CLI and optional income support
出力される金額は「収益試算値」であり、鑑定評価による「収益価格」ではありません。
正式な価格判断・投資判断には不動産鑑定士等の専門家に確認してください。
Highlights
- Docker support for reproducible CLI execution
- Optional income support for rent-roll-derived ancillary income (water / parking / other)
- Improved header-row detection and summary-row filtering for text-based PDFs
- Version string corrected to match VERSION file
What changed (since v0.4.1)
Docker
- Added
Dockerfile(python:3.12-slim, WORKDIR /app, default CMD --help) - Added
.dockerignore - README: added Docker usage section (bash + PowerShell examples)
Optional income
assumptions.yaml: newoptional_incomesection (include_in_gpi: falseby default)- PDF extraction: added header tokens for water / parking / other_income columns
RentRollUnit: 3 new optional income fields (月額水道代_円,月額駐車場収入_円,月額その他収入_円)- GPI: includes optional income only when explicitly opted in via
include_in_gpi: true+columns - 読み取りレントロール: always displays extracted optional income values (display ≠ GPI inclusion)
- 直接還元法_OER:
=0+(算入対象外)label when opt-out; cross-sheet ref when opt-in - Column label:「水道代収入」(income side) — not「水道光熱費」(expense side)
PDF extraction
- Header rows beyond row 1 now recognized
- 月額・年額 summary rows filtered as non-data rows
Tests
- 246 passed (host Python 3.11 + Docker python:3.12-slim)
- 32+ new tests for optional income (A–F categories + display/GPI separation)
Docker verification
| Step | Result |
|---|---|
docker build -t revenue-kun . |
✅ |
docker run --rm revenue-kun (help) |
✅ |
docker run --rm revenue-kun python src/main.py --version |
✅ revenue-kun 0.4.2 |
| PDF dry-run inside container | ✅ 5 units, 0 missing cells |
docker run --rm revenue-kun python -m pytest -q |
✅ 246 passed |
--excel-output with bind-mounted output dir |
✅ direct_cap.xlsx written to host |
Scope
This is a revenue-estimation CLI tool (収益試算ツール).
It is not:
- a SaaS product
- an OCR tool or scanned-PDF parser
- a smartphone capture workflow
- an appraisal tool(鑑定評価ではありません)
- investment, legal, or tax advice
OCR / scanned PDF / smartphone capture are out of scope (future consideration).
Issue status
#19 remains open#21 remains open— qualifying real-world text-based PDF evaluation not complete#48 remains open
v0.4.1 — PDF ingestion regression hardening
v0.4.1 is a minor hardening release after v0.4.0.
It focuses on regression coverage and wording cleanup around PDF ingestion behavior.
Included
- Updated stale CLI wording.
- Added/confirmed summary row filtering regression coverage.
- Covered full-width-space summary label: 合 計.
- Added false-positive guard so ordinary rows containing 計 in non-summary fields are not excluded.
- Added GPI impact regression to ensure summary rows do not inflate monthly GPI.
- Added/confirmed status column detection and status normalization regression coverage.
Validation
- Full test suite: 161 passed, 0 failed.
- Planning PR: #43.
- Implementation PR: #45.
- Release readiness PR: #46.
Non-claims
- This release does not claim real-world PDF verification.
- This release does not add OCR or scanned PDF support.
- This tool is not appraisal, investment advice, legal advice, or a replacement for professional judgment.
- Private PDFs, PII, tenant names, property names, and local paths are not included.
Open follow-up issues
v0.4.0 — PDF ingestion hardening
v0.4.0 — PDF ingestion hardening
Release Highlights
v0.4.0 は PDF ingestion hardening リリースです。
PDF 抽出スコープ(text-based の単純な表形式 PDF)は v0.3.0 と変わらず、
status column 誤検出と summary row 混入を防ぐフィルタを追加しました。
重要: 本ツールは不動産鑑定評価ではありません。出力される金額は「収益試算値」であり、
鑑定評価による「収益価格」ではありません。欠損項目は補完しません。
Changes
Japanese status column detection hardening(Issue #29 / PR #31–#35)
| 変更 | 詳細 |
|---|---|
ステータス column の認識 |
カタカナの ステータス ヘッダーを status alias として追加 |
| tenant-name 列の false positive 抑制 | _PERSON_NAME_DENY = {"者名", "テナント名", "入居者"} — 入居者名 / 契約者名 / テナント名 / 入居者 等が status に誤マッピングされるのを防ぐ |
| date-type 列の false positive 抑制 | _DATE_HEADER_DENY = {"入居日", "開始日", "満了日", "契約日"} — 入居日 / 契約開始日 / 契約満了日 等が status に誤マッピングされるのを防ぐ |
入居 alias の保持 |
入居 alias は維持しつつ deny-set でスクリーニング(破壊的変更なし) |
背景: 入居者名(tenant name col)が 入居 alias に先にマッチし、
status column(ステータス)が認識されない → 全ユニットの status が None → GPI = 0
という silent wrong result が発生していた。
total / summary row filtering(Issue #30 / PR #37)
| 変更 | 詳細 |
|---|---|
_SUMMARY_ROW_LABELS 追加 |
{"合計", "小計", "総計", "計", "total", "subtotal"} |
_is_non_data_row 条件3 追加 |
room フィールドをスペース除去・小文字化後に完全一致で照合 |
| 除外行の記録 | ExtractionReport.notes に記録(--dry-run 出力に表示) |
除外対象となるラベル(スペース除去・小文字化後に完全一致):
合計, 合 計, 小計, 総計, 計, TOTAL, Total, total, Subtotal, SUBTOTAL, Sub total, subtotal
部分一致しないため、計画棟101 等の正常な部屋番号は除外されません。
背景: 合 計 行が unit row として抽出され、rows_extracted = 21 / vacant = 4
と誤カウントされていた。
Verified Behavior
realistic_anonymized_001(PR #36 / #38)
| 項目 | 値 |
|---|---|
| rows_extracted | 20(合 計 行1件除外済み) |
| occupied units | 17 |
| vacant units | 3 |
| monthly GPI | 2,030,000 円 |
| annual GPI | 24,360,000 円 |
| status column | col 13(ステータス) |
| column_map | room=0, area=3, rent=7, cam=8, status=13, notes=14 |
| exit code | 0 |
| summary row excluded | Yes — 合 計 を除外、notes に記録 |
Synthetic samples regression check(PR #39)
| Sample ID | rows | occupied | vacant | monthly GPI | Regression? |
|---|---|---|---|---|---|
| sample-private-001 | 8 | 6 | 2 | 632,000 円 | None ✓ |
| sample-private-002 | 7 | 6 | 1 | 678,000 円 | None ✓ |
| sample-private-003 | 6 | 4 | 2 | 508,000 円 | None ✓ |
Evaluation Status
qualifying real-world PDF 評価: 未完了
samples/private/に qualifying real-world text-based rent roll PDF は存在しない- すべての評価済みサンプルは synthetic(reportlab 生成)または realistic anonymized
- Issue #21 はオープンのまま
v0.4.0 では「real-world PDF 検証済み」とは表記しない。
Known Limitations
| 制限 | 詳細 |
|---|---|
| qualifying real-world PDF 評価未完了 | Issue #21 open — 実務検証済みとは言わない |
| text-based PDF 限定 | pdfplumber でテキスト抽出できる PDF のみ |
| OCR 未対応 | スキャン PDF・画像 PDF は対象外 |
| 単純なレントロール表に限定 | 複数ページ結合・複雑な結合セル・ページをまたぐ表は対象外 |
| vendor-specific heuristics なし | 根拠のない特定フォーマット専用ロジックは実装しない |
| PII マスキングなし | private PDF は samples/private/(gitignore 済み)のみで扱う |
_PERSON_NAME_DENY / _DATE_HEADER_DENY は既知パターンのみ |
未知の日本語・英語ヘッダーは deny-set 外になる可能性あり |
| 鑑定評価・投資助言・法律助言ではない | 収益試算値を出力するツール。実務意思決定の根拠として単独使用しない |
Open Issues
| Issue | タイトル | 状態 |
|---|---|---|
| #21 | Evaluate additional private rent roll PDF samples | open — qualifying PDF 待ち |
| #19 | Plan v0.4.0 additional real-world PDF evaluation | open — depends on #21 |
| #22 | Summarize v0.4.0 PDF evaluation findings and decide next scope | open — depends on #21 |
Release Recommendation
v0.4.0 を PDF ingestion hardening マイルストーンとしてリリース可能。
- Issue #29 / #30 の fix chain が完了し、acceptance criteria をすべて満足
realistic_anonymized_001で正しい結果(rows=20 / occupied=17 / vacant=3 / GPI=2,030,000 円/月)を確認- synthetic 3件でリグレッションなし
ただし以下を明示すること:
- qualifying real-world PDF での評価は未完了(Issue #21 open)
- 「real-world PDF 検証済み」とは表記しない
- 実務投入前に
--dry-runで対象 PDF を事前確認することを推奨
Next Trigger
qualifying real-world text-based rent roll PDF が samples/private/ に追加された時点で:
- sample_id を付与(例:
real_world_001) PYTHONPATH=src python -m revenue_kun.cli --rent-roll-pdf <path> --assumptions assumptions.sample.yaml --dry-runを実行- sanitized 結果を記録(sample_id・exit code・rows_extracted・column_map・GPI・occupied/vacant 件数・推奨アクションのみ)
- PDF 本体・実ファイル名・物件名・テナント名・その他 PII はコミットしない
- Issue #21 クローズ条件を満たせば Issue #21 → #22 → #19 の順でクローズを検討
PRs Included in v0.4.0
| PR | タイトル | Issue |
|---|---|---|
| #31 | fix(issue-29): remove 入居 alias, add ステータス alias | #29 |
| #32 | fix(issue-29): restore 入居 alias with _PERSON_NAME_DENY | #29 |
| #33 | fix(issue-29): exclude 入居者 from status matching | #29 |
| #34 | docs(v040): re-evaluation after alias fix — 入居日 false positive found | #29 |
| #35 | fix(issue-29): add _DATE_HEADER_DENY to suppress date-type header false positives | #29 |
| #36 | docs(v040): re-evaluation after date header fix — Issue #29 criteria met | #29 |
| #37 | fix(issue-30): filter total and summary rows from rent roll PDF extraction | #30 |
| #38 | docs(v040): re-evaluation after summary row fix — Issue #30 criteria met | #30 |
| #39 | docs(v040): real-world PDF evaluation after Issue #29/#30 fixes | #21 |
| #40 | docs(v040): status snapshot after PR #39 | — |
| #41 | docs(v040): prepare release readiness notes | #19 #21 #22 |
Draft created: 2026-06-14
Target main HEAD at draft creation: 66c9006
revenue-kun v0.3.0
revenue-kun v0.3.0
This release improves CLI UX and diagnostics for CSV and limited text-based PDF ingestion.
revenue-kun remains a direct-capitalization-based income estimate CLI. It does not provide formal real estate valuation, investment advice, or legal advice. Outputs should be treated as supporting estimates for practitioner review, not as a substitute for professional judgment.
Added
- CLI extraction diagnostics summary for CSV and limited text-based PDF inputs
- Diagnostics output showing:
- input type
- recognized canonical fields for PDF inputs
- extracted unit count
- failure state
- existing
failure_reasonwhen extraction fails
--dry-runmode for validating input extraction and diagnostics without running calculations or generating output artifacts- CLI help test to ensure
--dry-runremains visible in--help
Changed
- README updated with v0.3.0 usage examples
- README now documents:
- CSV normal execution
- CSV dry-run
- text-based PDF normal execution
- text-based PDF dry-run
- diagnostics summary
- safe failure handling
extraction_log.json
- README
failure_reasonexplanation corrected to match the current implementation - Package version bumped to
0.3.0
Scope
Supported:
- CSV input workflow
- Limited text-based PDF input workflow from v0.2.0
- CLI diagnostics summary
- Dry-run validation without calculation or output artifact generation
Not supported / unchanged:
- OCR
- Scanned PDFs
- Multi-page table stitching
- Complex merged cells
- Vendor-specific heuristics
- PII masking
- Broad real-world PDF support expansion
- Formal valuation, investment advice, or legal advice
Verification
revenue-kun v0.2.0
revenue-kun v0.2.0
This release adds limited text-based PDF ingestion support for simple rent roll tables.
revenue-kun remains a direct-capitalization-based income estimate CLI. It does not provide formal real estate valuation, investment advice, or legal advice. Outputs should be treated as supporting estimates for practitioner review, not as a substitute for professional judgment.
Added
- Text-based PDF ingestion for simple rent roll tables
- Column alias mapping for rent roll PDF fields
- Safe failure handling for unreliable PDF extraction
- Machine-readable
failure_reasonin extraction logs V020_PDF_INGESTION_ACCEPTANCE_REPORT.mdacceptance report
Changed
- PDF extraction now excludes sub-header rows and repeated-header-like rows
- Sample C extraction behavior improved:
extracted_units_count8 → 6 - README updated to clarify v0.2.0 PDF ingestion scope and limitations
- CHANGELOG updated with v0.2.0 notes
Fixed
- Unsafe PDF extraction no longer fails silently in known unreliable cases
- Safe failure conditions added for:
- no table detected on all pages
- header detected but no data rows
- occupied units exist but all monthly rents are non-numeric
Scope
Supported:
- Text-based PDFs
- Simple rent roll tables
- Basic column alias mapping
- Sub-header / repeated-header row exclusion
- Safe failure logging
Not supported:
- OCR
- Scanned PDFs
- Multi-page table stitching
- Complex merged cells
- Vendor-specific heuristics
- PII masking
- Formal valuation, investment advice, or legal advice
Verification
revenue-kun v0.1.0
revenue-kun v0.1.0
収益還元法ベースの不動産収益試算CLIです。
鑑定評価ではなく、前提条件に基づく「収益試算値」を出力する研究・検証用プロトタイプです。
Highlights
assumptions.sample.yamlに基づく収益試算- NOI、収益試算値、感応度分析の出力
- CSV / 合成PDF rent roll のE2E確認
missing_info.md/extraction_log.json/revenue_analysis.xlsx出力- 入力バリデーション
- JSON Schema による extraction_log 検証
- GitHub Actions による pytest / CLI / PDF E2E 検証
Not included in v0.1.0
- DCF
- OCR
- 本物PDF対応
- 複数ページPDF対応
- 結合セル対応
- 個人情報マスキング自動化
- 鑑定評価、法律助言、投資助言
Basic usage
通常実行:
python src/main.py --assumptions assumptions.sample.yaml --output ./outputPDFサンプル生成・実行:
python scripts/make_sample_pdf.py --output data/sample_rentroll_simple.pdf
python src/main.py --assumptions assumptions.sample.yaml --rent-roll-pdf data/sample_rentroll_simple.pdf --output ./outputDisclaimer
本ツールは、情報提供・業務効率化・研究検証を目的としたプロトタイプです。
不動産鑑定評価、法律助言、投資助言を提供するものではありません。
出力結果は前提条件に強く依存します。最終判断はご自身または有資格専門家の責任で行ってください。