Skip to content

Releases: signal-yield/revenue-kun

revenue-kun v0.5.2 — OER版・費用詳細版の独立計算化

Choose a tag to compare

@signal-yield signal-yield released this 12 Jul 01:27
76ba0f1

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シートで構成されます。

  1. 直接還元法_OER
  2. 直接還元法‗費用詳細版
  3. 読み取りレントロール

対応入力

  • 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

Choose a tag to compare

@signal-yield signal-yield released this 11 Jul 12:10
231ddac

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 root VERSION file 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.web build
  • no-cache build
  • loopback-bound container run
  • /healthz
  • /api/preview
  • /api/generate
  • direct_cap.xlsx generation
  • 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

Choose a tag to compare

@signal-yield signal-yield released this 11 Jul 06:55
df80392

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.xlsx from the browser.
  • Added Web UI Docker packaging with Dockerfile.web.
  • Added README quick-start documentation and synthetic screenshots.
  • Added .gitattributes binary 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 8000

Then 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-web

The 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 -q375 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/preview and /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

Choose a tag to compare

@signal-yield signal-yield released this 09 Jul 07:59

出力される金額は「収益試算値」であり、鑑定評価による「収益価格」ではありません。
正式な価格判断・投資判断には不動産鑑定士等の専門家に確認してください。

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: new optional_income section (include_in_gpi: false by 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

Choose a tag to compare

@signal-yield signal-yield released this 14 Jun 10:04
32571ad

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

  • #19 remains open.
  • #21 remains open.
  • #22 remains open.

v0.4.0 — PDF ingestion hardening

Choose a tag to compare

@signal-yield signal-yield released this 14 Jun 04:41
48e4551

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/ に追加された時点で:

  1. sample_id を付与(例: real_world_001
  2. PYTHONPATH=src python -m revenue_kun.cli --rent-roll-pdf <path> --assumptions assumptions.sample.yaml --dry-run を実行
  3. sanitized 結果を記録(sample_id・exit code・rows_extracted・column_map・GPI・occupied/vacant 件数・推奨アクションのみ)
  4. PDF 本体・実ファイル名・物件名・テナント名・その他 PII はコミットしない
  5. 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

Choose a tag to compare

@signal-yield signal-yield released this 13 Jun 00:57

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_reason when extraction fails
  • --dry-run mode for validating input extraction and diagnostics without running calculations or generating output artifacts
  • CLI help test to ensure --dry-run remains 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_reason explanation 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

  • #13 / PR #16: extraction diagnostics summary
  • #14 / PR #17: dry-run mode
  • #15 / PR #18: README usage examples and CLI help test
  • CHANGELOG updated for v0.3.0
  • pytest: 107/107 PASSED

revenue-kun v0.2.0

Choose a tag to compare

@signal-yield signal-yield released this 12 Jun 09:01

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_reason in extraction logs
  • V020_PDF_INGESTION_ACCEPTANCE_REPORT.md acceptance report

Changed

  • PDF extraction now excludes sub-header rows and repeated-header-like rows
  • Sample C extraction behavior improved: extracted_units_count 8 → 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

  • PR #9 / Issue #6: sub-header and repeated-header row exclusion
  • PR #10 / Issue #7: column alias mapping
  • PR #11 / Issue #8: safe failure handling
  • pytest:
    • PR #9: 42/42 PASSED
    • PR #10: 80/80 PASSED
    • PR #11: 84/84 PASSED
  • Acceptance report: V020_PDF_INGESTION_ACCEPTANCE_REPORT.md

revenue-kun v0.1.0

revenue-kun v0.1.0 Pre-release
Pre-release

Choose a tag to compare

@signal-yield signal-yield released this 10 Jun 15:44

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 ./output

PDFサンプル生成・実行:

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 ./output

Disclaimer

本ツールは、情報提供・業務効率化・研究検証を目的としたプロトタイプです。
不動産鑑定評価、法律助言、投資助言を提供するものではありません。
出力結果は前提条件に強く依存します。最終判断はご自身または有資格専門家の責任で行ってください。