/
votter
/
NicheAI
Обзор
Документация
Войти
/
votter
/
NicheAI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/test_parser.py
75 строк
3 KB
Egor
add new methods of metrics calculation
17 июл 2026, 14:34
17 июл 2026, 14:34
57ce9f0
Код
Авторство
О чём код?
import pytest from conftest import ZAYAVKI from nicheai.parse_zayavka import parse_document @pytest.fixture(scope="module") def rechnoy(): return parse_document(ZAYAVKI / "zayavka1.docx") @pytest.fixture(scope="module") def severny(): return parse_document(ZAYAVKI / "zayavka2.docx") def test_meta_extracted(rechnoy): assert "Речной" in rechnoy["meta"]["project"] assert rechnoy["meta"]["date"] def test_market_claims_extracted(rechnoy): canon = {c["canonical"] for c in rechnoy["claims"]} assert "market_volume" in canon assert "target_share" in canon assert "region_avg_price" in canon def test_all_claims_are_numeric(rechnoy): for c in rechnoy["claims"]: assert isinstance(c["value"], (int, float)) def test_context_rows_not_in_claims(rechnoy): claim_indicators = {c["indicator"].lower() for c in rechnoy["claims"]} assert not any("класс жилья" in i for i in claim_indicators) assert not any("наименование" in i for i in claim_indicators) def test_inn_not_treated_as_claim(severny): values = {c["value"] for c in severny["claims"]} assert 1600457890 not in values def test_contradiction_case_cost_present(severny): cost_rows = [r for s in severny["sections"] if s["id"] == "3" for r in s["rows"] if r["canonical"] == "cost_per_sqm"] assert cost_rows and cost_rows[0]["value"] == 90000 def test_segment_context_carried(rechnoy): seg = rechnoy["segment_context"] assert seg["region"] and seg["housing_class"] def test_economics_claims_promoted(rechnoy): """total_cost/sellable_area/project_revenue живут в секции «3» (economics), как и уже промоутированный cost_per_sqm. Без этого промоуа internal_margin_sanity и internal_cost_consistency молча не срабатывают, потому что claim'ы для них просто не доходят до движка. """ canon = {c["canonical"] for c in rechnoy["claims"]} assert "total_cost" in canon assert "sellable_area" in canon assert "project_revenue" in canon def test_planned_completion_year_extracted_from_quarter_format(severny): """«Плановый ввод в эксплуатацию» в zayavka2.docx задан как «IV кв. 2028» — это бы нормально считалось value_type="period" с value=None. Для этого каноника парсер должен вытащить год и отдать его как число, чтобы claim дошёл до движка. """ year_claims = [c for c in severny["claims"] if c["canonical"] == "planned_completion_year"] assert year_claims, "planned_completion_year не дошёл до claims" assert year_claims[0]["value"] == 2028