Публичный паспорт проекта в LUMIS Studio. Ниже — только то, что записал сам прогон.
Подписи у этого проекта нет: страница показывает только то, что действительно записано. Никаких оценок кода, сходимости и рисков LUMIS не измеряет и здесь не показывает.
Проект открыт автором. Ниже — документы того же прогона, как их записал консилиум.
RentGuard — B2B SaaS-платформа для мгновенной (до 60 секунд) автоматизированной проверки благонадежности, подлинности документов и реальной платежеспособности потенциальных арендаторов. Система основана на сочетании Machine Learning (ML) анализа банковских выписок, прямого подключения через Open Banking, OCR-распознавания документов, удостоверяющих личность, и глубинного антифрод-анализа метаданных файлов.
Современный рынок долгосрочной аренды жилой недвижимости сталкивается с высокими рисками неплатежей, простоя объектов и мошенничества:
RentGuard позиционируется как ключевой технический инструмент проверки (Verification Gateway) для профессиональных участников рынка недвижимости.
| Персона | Роль и контекст | Боли и проблемы | Потребности в RentGuard |
|---|---|---|---|
| Анна | Менеджер УК (портфель 300+ квартир) | Огромный ручной поток кандидатов, рутинная проверка выписок, страх пропустить мошенника с поддельным PDF, задержки в сдаче объектов. | Быстрая отправка ссылки на проверку, готовый скоринг-балл за 60 секунд, прозрачная декомпозиция доходов/расходов, Webhook-уведомления. |
| Игорь | Частный лендлорд (12 квартир бизнес-класса) | Опыт взаимодействия с неплательщиками, сложность независимой оценки реального дохода кандидата, опасение отпугнуть жильцов долгими проверками. | Удобный веб-дашборд, юридическая чистота процесса, защита от сканов/распечаток, четкая рекомендация: «Одобрено / Высокий риск». |
| Алексей | Потенциальный арендатор (Кандидат) | Проходит проверку со смартфона, опасается за безопасность личных финансов, не хочет передавать сырые выписки третьим лицам. | Быстрый Mobile Web интерфейс, выбор между Open Banking и загрузкой PDF, мгновенный OTP-вход, гарантия удаления его данных. |
Таблица шире экрана — её можно прокрутить вбок.
[1. Инициация] ──> [2. Согласие & OTP] ──> [3. Загрузка данных] ──> [4. Скоринг (≤60s)] ──> [5. Purge ПДн] ──> [6. Решение]Автоматический скоринг благонадежности и доходов арендатора за 60 секунд с точностью 99%, гарантированно защищающий собственников недвижимости от поддельных выписок, финансовых дефолтов и убыточных простоев объектов.
Во избежание компрометации архитектуры и бизнеса, следующие правила обязательны к исполнению на программном уровне:
High Risk с автоматическим требованием загрузки оригинального векторного PDF из банк-клиента или подключения Open Banking.Мобильный веб-интерфейс, оптимизированный для работы на iOS и Android без необходимости установки приложений из App Store / Google Play.
Серверная архитектура обработки данных и вычисления рисков.
┌────────────────┐ ┌──────────────────────┐ ┌───────────────────────┐ ┌──────────────────┐
│ Vector PDF / │ ──> │ Anti-Fraud Pipeline │ ──> │ Cash Flow Engine │ ──> │ Score Generation │
│ Open Banking │ │ (Metadata & Forensic)│ │ (Categorization & ML) │ │ (& Purge Raw Data│
└────────────────┘ └──────────────────────┘ └───────────────────────┘ └──────────────────┘High Risk при выявлении любых манипуляций.New, In Progress, Approved, High Risk, Rejected).| Операция / Взаимодействие | Максимально допустимый SLA (Latency) | Поведение при превышении SLA |
|---|---|---|
| Первичная валидация PDF на клиенте/API | $\le 2000 \text{ ms}$ | Прерывание загрузки, показ ошибки пользователю. |
| Доставка OTP SMS/Email | $\le 2000 \text{ ms}$ | Автоматический ретрай через альтернативный SMS-шлюз. |
| Polling API (Опрос состояния) | $\le 1000 \text{ ms}$ | - |
| Webhook notification | $\le 2000 \text{ ms}$ | Повторные попытки с экспоненциальной задержкой. |
| Полный цикл скоринга (End-to-End) | $\le 60 \text{ секунд}$ | Уведомление пользователя о фоновой обработке, отправка результатов через Webhook/Push по готовности. |
Таблица шире экрана — её можно прокрутить вбок.
Во избежание размытия фокуса продукта и нарушения юридических границ, в объем функций RentGuard строго не входят следующие направления:
| № | Описание риска | Уровень риска | Стратегия митигации (Mitigation Strategy) |
|---|---|---|---|
| 1 | Атака распечаткой и сканированием (Print-and-Scan Attack): Обход ML-антифрода путем распечатки поддельной выписки и её последующего сканирования для уничтожения цифровых следов редактирования PDF. | Критический | Архитектурный инвариант №4: Автоматическая маркировка всех растровых сканов как High Risk. Система блокирует автоматический расчет и требует от кандидата либо загрузки оригинального векторного PDF прямо из банк-клиента, либо верификации через Open Banking. |
| 2 | Высокий отвал кандидатов (Drop-off): Массовый отказ кандидатов делиться финансовыми данными или подключать Open Banking из-за опасений за конфиденциальность. | Высокий | 1. Гранулярный прозрачный интерфейс (UX): явное визуальное подтверждение того, что сырые данные стираются. 2. Реализация двух альтернативных каналов на выбор (PDF или Open Banking). 3. Отображение официального сертификата безопасности данных на экране онбординга. |
| 3 | Юридические претензии и иски от арендаторов: Обвинения в дискриминации или незаконном ведении «черных списков». | Высокий | 1. Явный Non-Goal №5: Отказ от ведения единых баз неплательщиков. 2. Оценка проводится изолированно для каждого конкретного запроса. 3. Скоринг выдает математическую вероятность и математический бал, решение принимает исключительно менеджер УК. |
| 4 | Низкая конверсия при попытке переложить оплату проверки на кандидата (Application Fee): Сопротивление рынка при попытке взимать плату за проверку с арендатора. | Средний | Модель B2B SaaS ориентирована на оплату подписки самим лендлордом или УК как частью их операционных расходов на заполнение вакансий. Монетизация через Application Fee для кандидатов исключена из базового ценника и может включаться только по желанию УК. |
| 5 | Внутренний фрод сотрудников УК: Сговор менеджера с кандидатом для ручного одобрения неблагонадежного жильца. | Средний | Архитектурный инвариант №5: Использование криптографически защищенного неизменяемого лога (Immutable Audit Trail). Любая смена статуса или перепроверка фиксируются в системе без возможности удаления или редактирования админом УК. |
Таблица шире экрана — её можно прокрутить вбок.
Документ показан не целиком — полный документ в ZIP владельца.
Версия документа: 1.0.0 Дата актуализации: 04 сентября 2026 г. Статус: Утверждено (Approved) Автор: Principal Enterprise Architect
RentGuard — это специализированный Micro-SaaS/API сервис мгновенного антифрод-скоринга банковских выписок и документов потенциальных арендаторов. Система предназначена для управляющих компаний (УК) и индивидуальных лендлордов. Главная задача системы — автоматическая валидация финансовой состоятельности арендатора, выявление подделок банковских выписок (PDF-фрод) и расчет индекса платежеспособности в течение 60 секунд, с соблюдением требований защиты персональных данных (152-ФЗ / GDPR).
Salted SHA-256).tmpfs). После завершения анализа и формирования метрик файлы мгновенно и безвозвратно уничтожаются без записи на физический диск.High Risk (is_vector_pdf = False).SHA-256 хэш предыдущей записи (cryptographic hash chain), образуя непрерывную цепочку. Любая попытка модификации исторической записи нарушает валидность всей последующей цепочки.Write-Ahead Logging) с полным шифрованием базы данных на лету с использованием расширения SQLCipher (ключ шифрования AES-256).Система спроектирована по паттерну Модульный монолит с асинхронным конвейером обработки событий (Event-Driven Pipeline).
graph TB
subgraph Client Layer [Frontend / Client Applications]
UI_Dash["React 18 Dashboard<br/>(Desktop Landlord UI)"]
UI_Onb["React 18 Tenant Onboarding<br/>(Mobile Responsive)"]
Ext_API["External API Clients<br/>(Webhooks / REST)"]
end
subgraph API Layer [Modular Monolith API Gateway]
FastAPI["FastAPI 0.110+ Application<br/>(Python 3.12, Pydantic v2)"]
WS_Handler["WebSocket Manager<br/>(Real-time 60s Tracking)"]
Security_Module["Security & Hash Module<br/>(Salted SHA-256 / Auth)"]
end
subgraph Memory Storage [Ephemeral Storage (RAM)]
TMPFS["/tmp/rentguard_proc<br/>(tmpfs RAM Storage)"]
end
subgraph Async Pipeline [Event Queue & Processing Pipeline]
Broker["Taskiq / Celery Broker<br/>(Async Scoring Queue)"]
Worker_PDF["PDF Analyzer Service<br/>(Vector / Raster Analysis)"]
Worker_Score["Scoring Engine Service<br/>(Financial Risk Calculation)"]
Worker_Audit["Audit Log Engine<br/>(Cryptographic Chain Building)"]
end
subgraph Persistence Layer [Encrypted Data Store]
DB[("SQLite 3 + SQLCipher<br/>(AES-256, WAL Mode)")]
end
%% Interactions
UI_Dash -->|REST / OpenAPI| FastAPI
UI_Dash <-->|WebSockets| WS_Handler
UI_Onb -->|REST Document Upload| FastAPI
Ext_API -->|REST API & Webhooks| FastAPI
FastAPI --> Security_Module
FastAPI -->|Save Docs to RAM| TMPFS
FastAPI -->|Dispatch Task| Broker
Broker --> Worker_PDF
Worker_PDF -->|Read/Delete Temp Doc| TMPFS
Worker_PDF --> Worker_Score
Worker_Score --> Worker_Audit
Worker_Audit -->|Async IO Write| DB
Worker_Score -->|Publish Status| WS_Handler
Worker_Score -->|Trigger Hook| Ext_APIDashboard.tsx: Рабочее место управляющей компании для создания проверок, отслеживания их статуса и анализа отчетов.TenantOnboarding.tsx: Мобильный интерфейс для арендатора. Позволяет загружать скан/фото паспорта и банковскую выписку в формате PDF за несколько кликов.Write-Ahead Logging) обеспечивает высокую скорость параллельных операций чтения и записи.erDiagram
Organization ||--o{ User : "has_many"
Organization ||--o{ TenantVerification : "owns"
Organization ||--o{ ImmutableAuditLog : "generates"
User ||--o{ ImmutableAuditLog : "triggers"
TenantVerification ||--o| BankStatementMetadata : "contains"
Organization {
uuid id PK
string name
string inn
string api_key_hash
datetime created_at
}
User {
uuid id PK
uuid organization_id FK
string email
string password_hash
string role
datetime created_at
}
TenantVerification {
uuid id PK
uuid organization_id FK
string tenant_phone_hash "Salted SHA-256"
string passport_hash "Salted SHA-256"
string status "PENDING|PROCESSING|COMPLETED|FAILED"
integer risk_score "0-100"
json summary_data_json
datetime created_at
datetime completed_at
}
BankStatementMetadata {
uuid id PK
uuid verification_id FK
boolean is_vector_pdf
boolean open_banking_connected
numeric monthly_income
numeric stability_index
datetime created_at
}
ImmutableAuditLog {
bigint id PK
uuid organization_id FK
uuid user_id FK
string action
string resource
string prev_hash "SHA-256 preceding record"
string log_hash "SHA-256 payload+prev_hash"
datetime created_at
}Ниже представлена реализация моделей системы на Python 3.12 с использованием SQLAlchemy 2.0 AsyncIO (rentguard-backend/app/db/models.py).
import hashlib
import uuid
from datetime import datetime, timezone
from typing import Optional
from sqlalchemy import (
String, DateTime, ForeignKey, Boolean, Integer, Numeric, JSON, BigInteger, Text
)
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
class Base(DeclarativeBase):
pass
class Organization(Base):
__tablename__ = "organizations"
id: Mapped[uuid.UUID] = mapped_column(primary_key=True, default=uuid.uuid4)
name: Mapped[str] = mapped_column(String(255), nullable=False)
inn: Mapped[str] = mapped_column(String(12), nullable=False, index=True)
api_key_hash: Mapped[str] = mapped_column(String(64), nullable=False)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)
)
users: Mapped[list["User"]] = relationship(back_populates="organization")
verifications: Mapped[list["TenantVerification"]] = relationship(back_populates="organization")
class User(Base):
__tablename__ = "users"
id: Mapped[uuid.UUID] = mapped_column(primary_key=True, default=uuid.uuid4)
organization_id: Mapped[uuid.UUID] = mapped_column(ForeignKey("organizations.id"), nullable=False)
email: Mapped[str] = mapped_column(String(255), unique=True, nullable=False, index=True)
password_hash: Mapped[str] = mapped_column(String(255), nullable=False)
role: Mapped[str] = mapped_column(String(50), default="analyst")
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)
)
organization: Mapped["Organization"] = relationship(back_populates="users")
class TenantVerification(Base):
__tablename__ = "tenant_verifications"
id: Mapped[uuid.UUID] = mapped_column(primary_key=True, default=uuid.uuid4)
organization_id: Mapped[uuid.UUID] = mapped_column(ForeignKey("organizations.id"), nullable=False)
tenant_phone_hash: Mapped[Optional[str]] = mapped_column(String(64), nullable=True)
passport_hash: Mapped[Optional[str]] = mapped_column(String(64), nullable=True)
status: Mapped[str] = mapped_column(String(32), default="PENDING", index=True)
risk_score: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
summary_data_json: Mapped[Optional[dict]] = mapped_column(JSON, nullable=True)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)
)
completed_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True)
organization: Mapped["Organization"] = relationship(back_populates="verifications")
statement_metadata: Mapped[Optional["BankStatementMetadata"]] = relationship(
back_populates="verification", uselist=False
)
class BankStatementMetadata(Base):
__tablename__ = "bank_statement_metadata"
id: Mapped[uuid.UUID] = mapped_column(primary_key=True, default=uuid.uuid4)
verification_id: Mapped[uuid.UUID] = mapped_column(ForeignKey("tenant_verifications.id"), nullable=False)
is_vector_pdf: Mapped[bool] = mapped_column(Boolean, default=False)
open_banking_connected: Mapped[bool] = mapped_column(Boolean, default=False)
monthly_income: Mapped[float] = mapped_column(Numeric(12, 2), default=0.0)
stability_index: Mapped[float] = mapped_column(Numeric(3, 2), default=0.0)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)
)
verification: Mapped["TenantVerification"] = relationship(back_populates="statement_metadata")
class ImmutableAuditLog(Base):
__tablename__ = "immutable_audit_logs"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
organization_id: Mapped[uuid.UUID] = mapped_column(ForeignKey("organizations.id"), nullable=False)
user_id: Mapped[Optional[uuid.UUID]] = mapped_column(ForeignKey("users.id"), nullable=True)
action: Mapped[str] = mapped_column(String(100), nullable=False)
resource: Mapped[str] = mapped_column(String(255), nullable=False)
prev_hash: Mapped[str] = mapped_column(String(64), nullable=False)
log_hash: Mapped[str] = mapped_column(String(64), nullable=False, unique=True)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)
)
@staticmethod
def compute_hash(prev_hash: str, org_id: uuid.UUID, user_id: Optional[uuid.UUID], action: str, resource: str, timestamp: str) -> str:
payload = f"{prev_hash}|{org_id}|{user_id or 'SYSTEM'}|{action}|{resource}|{timestamp}"
return hashlib.sha256(payload.encode("utf-8")).hexdigest()sequenceDiagram
autonumber
actor Tenant as Арендатор (Mobile)
actor Landlord as Лендлорд / УК (Dashboard)
participant API as FastAPI Gateway
participant WS as WebSocket Hub
participant Queue as Taskiq Queue
participant PDF as PDF Analyzer Service
participant Engine as Scoring Engine
participant DB as SQLCipher DB
Landlord->>API: POST /api/v1/verifications (Создание сессии)
API->>DB: Сохранение сессии (PENDING)
API-->>Landlord: 201 Created + Onboarding Link & WS Auth Token
Landlord->>WS: Подключение к /api/v1/verifications/{id}/status
Tenant->>API: POST /api/v1/verifications/{id}/documents/passport
API->>API: Соленое хэширование ПДн (Salted SHA-256)
API->>DB: Запись passport_hash, удаление фотки из RAM
Tenant->>API: POST /api/v1/verifications/{id}/documents/bank-statement
API->>API: Сохранение PDF во временный RAM-диск (/tmpfs)
API->>Queue: Публикация задачи "process_verification"
API-->>Tenant: 202 Accepted (Загрузка завершена)
Queue->>PDF: Извлечение PDF из RAM
PDF->>PDF: Валидация векторных слоев и шрифтов банк-клиента
alt Растровый или сканированный PDF
PDF->>Engine: is_vector_pdf = False
else Истинный векторный PDF
PDF->>Engine: is_vector_pdf = True
end
PDF->>PDF: Безвозвратный wipe PDF-файла из RAM
Engine->>Engine: Расчет Stability Index, Monthly Income, Risk Score
Engine->>DB: Сохранение BankStatementMetadata & TenantVerification (COMPLETED)
Engine->>DB: Запись записи в ImmutableAuditLog (расчет prev_hash -> log_hash)
Engine->>WS: Отправка ивента status=COMPLETED, risk_score
WS-->>Landlord: WebSocket Event: Скоринг завершен (< 60 сек)
Engine->>Landlord: Webhook Notification (если зарегистрирован)Модуль pdf_analyzer.py проводит проверку подлинности PDF без обращения к сторонним облачным сервисам:
pdfminer / fitz). Если PDF содержит только растровые изображения (изображение скана / фото) — параметр is_vector_pdf устанавливается в False.is_vector_pdf == False автоматически снижают финансовый балл доверия, устанавливая статус итоговой сессии в категории High Risk (Risk Score >= 75).POST /api/v1/verificationsСоздание новой сессии скоринга управляющей компанией.
{
"tenant_reference_id": "REQ-2026-0904-01"
}{
"verification_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"status": "PENDING",
"onboarding_url": "https://rentguard.app/onboard/9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"websocket_url": "wss://rentguard.app/api/v1/verifications/9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d/status",
"created_at": "2026-09-04T11:15:00Z"
}POST /api/v1/verifications/{id}/documents/passportЗагрузка документа арендатором. Выполняет моментное соленое хэширование ПДн в RAM.
multipart/form-data (file: photo_bytes, phone: string){
"verification_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"passport_hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"tenant_phone_hash": "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e",
"status": "PASSPORT_UPLOADED"
}POST /api/v1/verifications/{id}/documents/bank-statementЗагрузка PDF-выписки банк-клиента. Файл помещается исключительно в tmpfs.
multipart/form-data (file: pdf_bytes){
"verification_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"status": "PROCESSING",
"message": "Выписка принято в обработку. Ожидайте результаты по WebSocket."
}GET /api/v1/verifications/{id}/statusПолучение текущего статуса обработки и WebSocket-хэндшейка.
{
"verification_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"status": "PROCESSING",
"progress_percent": 65,
"elapsed_seconds": 12
}GET /api/v1/verifications/{id}/reportЗапрос итогового отчета скоринга и вычисленных показателей.
{
"verification_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"status": "COMPLETED",
"risk_score": 18,
"risk_category": "LOW_RISK",
"bank_metadata": {
"is_vector_pdf": true,
"open_banking_connected": false,
"monthly_income": 185000.00,
"stability_index": 0.92
},
"summary": {
"affordability_ratio": 0.31,
"gambling_transactions_detected": false,
"microfinance_loans_detected": false
},
"completed_at": "2026-09-04T11:15:38Z"
}POST /api/v1/webhooks/subscriptionsРегистрация эндпоинта управляющей компании для получения событий о готовности отчета.
{
"target_url": "https://pms.landlord.ru/api/rentguard-callback",
"secret_token": "whsec_9a8b7c6d5e4f3a2b1c0d"
}{
"subscription_id": "sub_01hj89a2b3c4d5e6f7g8",
"target_url": "https://pms.landlord.ru/api/rentguard-callback",
"status": "ACTIVE"
}WS /api/v1/verifications/{id}/status?token={ws_token}{
"event": "VERIFICATION_PROGRESS",
"data": {
"step": "ANALYZING_PDF_VECTORS",
"progress_percent": 40,
"time_remaining_sec": 35
}
}Структура репозитория строго разделена на независимые слои backend и frontend.
rentguard/
├── rentguard-backend/
│ ├── app/
│ │ ├── main.py # Инициализация FastAPI приложения, ASGI роутов и CORS
│ │ ├── core/
│ │ │ ├── config.py # Settings (Pydantic BaseSettings), env переменные
│ │ │ └── security.py # Соленое хэширование (SHA-256), генерация токенов
│ │ ├── db/
│ │ │ ├── session.py # Async Engine SQLAlchemy + SQLCipher connection handler
│ │ │ └── models.py # ORM Модели (Organization, User, Verification, AuditLog)
│ │ ├── api/
│ │ │ └── v1/
│ │ │ ├── router.py # Главный роутер API v1
│ │ │ └── endpoints/
│ │ │ └── verifications.py# Эндпоинты для сессий, документооборота и статусов
│ │ └── services/
│ │ ├── scoring_engine.py # Алгоритм финансового скоринга и расчета индексовЧто оспорил Devil's Advocate и что решил Арбитр. Каждый риск получил вердикт; границы ниже — результат спора, а не первого черновика.
Добавлено арбитром:
Снято арбитром:
| # | risk | decision | action | | - | - | - | - | | 1 | Обход ML-антифрода путем распечатки и последующего сканирования поддельной выписки (Print-and-Scan attack), уничтожающий цифровые следы редактирования PDF | смягчено (добавлен инвариант) | Маркировать все растровые сканы выписок как High Risk и запрашивать оригинал цифрового PDF из интернет-банка или Open Banking. | | 2 | Массовый отказ кандидатов от прохождения верификации при требовании загрузки детальных банковских выписок или подключения Open Banking | смягчено (добавлен инвариант) | Внедрить гранулярный шеринг данных, показывающий кандидату агрегированный cash flow без отображения детальных наименований транзакций. | | 3 | Юридические иски со стороны арендаторов при внесении их в 'черные списки' платформы без вступившего в силу решения суда | принято (скоуп изменён) | Запретить ведение централизованных черных списков арендаторов и зафиксировать этот запрет в Non-Goals. | | 4 | Низкая конверсия в оплату Application Fee кандидатами в условиях высокой конкуренции среди лендлордов на рынке аренды | отклонено | Модель распределения расходов выбирается клиентом; B2B-подписка для УК является приоритетной моделью монетизации. | | 5 | Трансформация продукта в страховой сервис (Rent Guarantee Insurance) из-за давления клиентов при наступлении дефолтов у 'одобренных' жильцов | принято (скоуп изменён) | Прямой выкуп финансовых рисков и страхование выплат внесены в финальный список Non-Goals. | | 6 | Разработка юридического модуля автоматического формирования исков и сопровождения выселения неплательщиков | принято (скоуп изменён) | Формирование исков и сопровождение выселения прямо отнесены к Non-Goals. | | 7 | Постепенное разрастание до полноценной PMS-системы (учет ремонтов, сбор платежей, коммуналка) по запросам крупных УК | принято (скоуп изменён) | Сохранить строгий Non-Goal на разработку функций PMS-систем. |
Обоснование арбитра: RentGuard имеет четкую ценность в борьбе с PDF-фродом и снижением риска дефолта. Однако заявленное требование 100% детекции технически невыполнимо при Print-and-Scan атаках, а централизованные черные списки создают фатальные правовые риски. Зафиксировав рамки продукта как вероятностную оценку риска и исключив нецелевые функции (PMS, страхование, юридические иски), мы сохраняем высокую маржинальность Micro-SaaS и защищаем компанию от регуляторных претензий.
Уровень разногласий: 0.35