Cách dùng

Một lệnh, ba việc: chạy, soạn hồ sơ, đọc memo

Chạy hồ sơ mẫu để xem memo trông thế nào; soạn hồ sơ tổng hợp của bạn từ một bản sao; đọc memo để biết số nào đủ bằng chứng và số nào còn thiếu.

Chạy hồ sơ mẫu

Dùng khi bạn mới cài, hoặc muốn xem lại khuôn memo. Câu nói mẫu với agent: «Chạy Agent Real Estate với hồ sơ mẫu căn hộ và tóm tắt phần dòng tiền thuê.»

1

Mở PowerShell ở thư mục checkout

Đặt PYTHONPATH như ở trang Cài đặt.

2

Chọn hồ sơ mẫu

apartment.json cho căn hộ, house.json cho nhà ở; cả hai đều là dữ liệu tổng hợp.

3

Chạy lệnh

cmd /c "python -m agent_real_estate < tests\fixtures\house.json"

Đầu ra: memo Markdown trên màn hình gồm thông tin hồ sơ, bảng comparable, bằng chứng, dòng tiền thuê và giới hạn; mã thoát 0.

Soạn hồ sơ tổng hợp của bạn

Dùng khi bạn muốn thử luật chọn comparable hay dòng tiền với số liệu tự đặt. Câu nói mẫu: «Thêm ba comparable tổng hợp vào bản sao hồ sơ căn hộ, chạy lại và cho tôi khoảng đơn giá.»

1

Chép hồ sơ mẫu ra thư mục làm việc

Copy-Item tests\fixtures\apartment.json $HOME\ho-so.json

2

Thêm bằng chứng và comparable

Mỗi comparable trỏ tới một evidence có thật trong hồ sơ; tiền và diện tích viết dạng chuỗi số, không dấu phẩy.

3

Chạy và lưu memo

cmd /c "python -m agent_real_estate < %USERPROFILE%\ho-so.json > %USERPROFILE%\memo.md"

Đầu ra: file memo.md nằm nơi bạn chọn; chương trình không tự ghi file nào khác.

Bảng lệnh

Công cụ chỉ có một lệnh, không có cờ; khác nhau ở hồ sơ bạn đưa vào và nơi bạn lưu memo.

LệnhViệcVí dụ
python -m agent_real_estateĐọc một hồ sơ từ đầu vào, in memo ra màn hìnhcmd /c "python -m agent_real_estate < tests\fixtures\apartment.json"
… > memo.mdLưu memo vào file bạn chọncmd /c "python -m agent_real_estate < ho-so.json > memo.md"
$LASTEXITCODEXem mã thoát: 0 đạt, 2 dữ liệu sai, 1 lỗi đọc/ghi$LASTEXITCODE ngay sau lệnh chạy

Ví dụ đầu-cuối

Hồ sơ dưới đây có bốn comparable tổng hợp; một dòng khác cơ sở diện tích nên bị loại.

ho-so.json
{
  "version": 1,
  "case": {"id": "apt-demo", "asset_type": "apartment", "as_of": "2026-11-07",
           "area_basis": "net_usable", "price_type": "asking_sale"},
  "evidence": [
    {"id": "ev1", "description": "Synthetic listing A", "source": "Synthetic label"},
    {"id": "ev2", "description": "Synthetic listing B", "source": "Synthetic label"},
    {"id": "ev3", "description": "Synthetic listing C", "source": "Synthetic label"}
  ],
  "comparables": [
    {"id": "comp1", "asset_type": "apartment", "area_basis": "net_usable", "price_type": "asking_sale",
     "observed_on": "2026-10-01", "price_vnd": "2000000000", "area_m2": "50", "evidence_id": "ev1"},
    {"id": "comp2", "asset_type": "apartment", "area_basis": "net_usable", "price_type": "asking_sale",
     "observed_on": "2026-10-15", "price_vnd": "2640000000", "area_m2": "60", "evidence_id": "ev2"},
    {"id": "comp3", "asset_type": "apartment", "area_basis": "net_usable", "price_type": "asking_sale",
     "observed_on": "2026-09-20", "price_vnd": "2550000000", "area_m2": "68", "evidence_id": "ev3"},
    {"id": "comp4", "asset_type": "apartment", "area_basis": "saleable", "price_type": "asking_sale",
     "observed_on": "2026-10-05", "price_vnd": "3000000000", "area_m2": "70", "evidence_id": "ev3"}
  ],
  "rental": null
}
Kết quả (trích)
| `comp3` | 2026-09-20 | … | 37500000.00 | `ev3` | yes | included |
| `comp4` | 2026-10-05 | … | 42857142.86 | `ev3` | no | basis |

Included count: 3
Comparison status: asking_price_context
Min / median / max VND/m2: 37500000.00 / 40000000.00 / 44000000.00

Rental status: insufficient_evidence
Hồ sơ sai
Set-Content -Encoding ascii $HOME\sai.json '{"version": 1}'
cmd /c "python -m agent_real_estate < %USERPROFILE%\sai.json"
$LASTEXITCODE
# in ra: invalid_input rồi 2 — không có memo

Từ điển đầu ra

Các từ bạn sẽ gặp trong memo và trên màn hình.

needs_human_review
Memo luôn chờ người xem xét; công cụ không ra quyết định.
legal_status: unknown
Pháp lý luôn là chưa biết; công cụ không đọc hay xác minh giấy tờ.
insufficient_evidence
Chưa đủ ba comparable với ba bằng chứng khác nhau, hoặc thiếu số thuê.
asking_price_context
Khoảng đơn giá dựng từ giá rao, không phải giao dịch.
reported_transaction_context
Khoảng đơn giá từ giao dịch do người nhập báo, chưa được xác minh độc lập.
asset · basis · price_type · future
Lý do một comparable bị loại: khác loại tài sản, khác cơ sở diện tích, khác loại giá, hoặc ngày sau mốc định giá.
NOI · Cap rate
Thu nhập ròng năm sau thất thu và chi phí vận hành; cap rate là NOI chia giá mua, viết dạng tỷ lệ (0.0480 = 4,8%).
invalid_input · io_error
Hồ sơ sai hợp đồng dữ liệu (mã 2) · lỗi đọc hoặc ghi luồng (mã 1).

Hỏi đáp

Sao memo không có khoảng giá?

Cần ít nhất ba comparable được chọn với ba mã bằng chứng khác nhau. Xem cột Reason để biết dòng nào bị loại và vì sao.

Tôi nhập dữ liệu thật được không?

Không. Đây là nguyên mẫu cho dữ liệu tổng hợp; đừng nhập địa chỉ, tên người hay giao dịch thật.

Chi phí vay, thuế có được tính không?

Không. Công cụ chỉ dùng số bạn nhập cho tiền thuê, tỷ lệ trống, chi phí vận hành và giá mua; không tự suy nợ, thuế hay chi phí đầu tư.