Розробка AI-системи для автоматизації видачі дозволів та ліцензій
Дозвільна діяльність державних органів — один з найбільш бюрократично навантажених процесів. Будівельні дозволи, ліцензії на медичну діяльність, торговельні дозволи — кожен тип має свій регламент, пакет документів, терміни та підстави для відмови. AI-система автоматизує перевірку комплектності, відповідності вимогам та формування рішень.
Архітектура дозвільної системи
Процес видачі дозволу складається з кількох етапів, кожен з яких автоматизується по-різному:
Прийом та реєстрація заяви — перевірка коректності заявника, реєстрація з присвоєнням номера, розрахунок терміну розгляду за адміністративним регламентом.
Перевірка комплектності — AI перевіряє наявність та відповідність кожного документу з переліку, передбаченого регламентом. Автоматичне повідомлення заявника про браковані документи.
Міжвідомчі запити — автоматичне формування та відправлення запитів до суміжних відомств (податкова служба, Реєстр земель, МВС та ін.).
Правова експертиза — перевірка відповідності заяви вимогам нормативних актів, виявлення підстав для відмови.
Формування рішення — проект дозволу або мотивованої відмови.
Перевірка комплектності документів
class DocumentRequirement(BaseModel):
doc_type: str # тип документу
is_mandatory: bool
conditions: list[str] # при яких умовах потрібен
validity_period_days: int | None # строк дії документу
acceptable_formats: list[str] # формати (pdf, jpg, ...)
issuing_authority: str | None # кем видається
class CompletenessCheck(BaseModel):
is_complete: bool
missing_documents: list[str]
expired_documents: list[str] # документи з терміном дії
suspicious_documents: list[str] # підозрілі / нечитаємі
can_obtain_via_smev: list[str] # що можна запросити міжвідомчо
def check_completeness(
application: Application,
uploaded_docs: list[UploadedDocument],
regulation: PermitRegulation
) -> CompletenessCheck:
results = []
for req in regulation.required_documents:
# Перевіряємо умову застосовуваності
if not req.applies_to(application):
continue
# Шукаємо документ серед завантажених
matched = find_matching_document(uploaded_docs, req)
if matched:
# Перевіряємо строк дії, автентичність (QR-код, підпис)
validity = check_document_validity(matched, req)
results.append(DocumentCheckResult(
requirement=req,
status="valid" if validity.ok else "expired",
document=matched
))
elif req.is_mandatory and not req.can_be_obtained_via_smev():
results.append(DocumentCheckResult(
requirement=req,
status="missing"
))
return CompletenessCheck.from_results(results)
Видобування даних з документів
Заявники завантажують документи у різних форматах: PDF-сканування, фото, електронні документи з кваліфікованим підписом. Завдання видобування:
Документи на право власності: видобування адреси, площі, призначення, власника — для звірки з даними Реєстру.
Медичні ліцензії та сертифікати: спеціалізація, строк дії, ПІБ фахівця — для перевірки за реєстром медичних працівників.
Витяги з реєстрів: дата реєстрації, коди видів діяльності, засновники — автоматично запитуються зі служби через міжвідомчу систему, видобування з відповіді.
Технічні документи: структуроване видобування технічних параметрів для порівняння з нормативами.
class BuildingPermitData(BaseModel):
applicant_inn: str
object_address: str
land_plot_cadastral: str # кадастровий номер ділянки
construction_type: str # нове будівництво / реконструкція
object_category: str # житловий / нежитловий / лінійний
total_area: float | None
floors: int | None
project_organization: str # проектна організація
project_sro_number: str | None # номер допуску
Правова експертиза та підстави для відмови
Для кожного типу дозволу система підтримує базу знань підстав для відмови (з закону та адміністративного регламенту). LLM перевіряє заяву по кожній підставі:
def legal_review(application: Application, docs: list) -> LegalReviewResult:
grounds_for_refusal = load_refusal_grounds(application.permit_type)
checks = []
for ground in grounds_for_refusal:
result = llm.parse(
f"""Перевір, чи є підстава для відмови:
Підстава: {ground.description}
Нормативна ссилка: {ground.legal_reference}
Дані заяви: {application.to_text()}
Документи: {summarize_docs(docs)}
Відповідь: підстава застосовна (так/ні/потребує уточнення) та поясни.""",
response_format=GroundCheck
)
checks.append(result)
refusals = [c for c in checks if c.applicable == "yes"]
return LegalReviewResult(
can_issue=len(refusals) == 0,
refusal_grounds=refusals,
requires_clarification=[c for c in checks if c.applicable == "requires_clarification"],
draft_decision=generate_decision_draft(application, refusals)
)
Міжвідомче взаємодія
Запити формуються автоматично на основі даних з заяви. Система знає, які відомості можна запросити для кожного типу дозволу:
| Тип дозволу | Джерело | Запитувані відомості |
|---|---|---|
| Будівельна | Реєстр | Права на земельну ділянку, обтяження |
| Будівельна | Податкова | Дані про юридичну особу |
| Медична ліцензія | Мінздрав | Реєстр медичних працівників |
| Розничної торгівлі | Служба захисту | Постанови, порушення |
| Алкогольна ліцензія | Служба | Історія ліцензій, порушення |
Повідомлення та особистий кабінет заявника
Заявник у реальному часі відстежує статус: «Документи прийняті», «Направлені міжвідомчі запити», «На експертизі», «Рішення прийнято». Усі повідомлення — через портал державних послуг або email/SMS. Автоматичне повідомлення про необхідність донести документи з детальним зазначенням, що саме та в якій формі.
Терміни впровадження
Місяць 1-2: Розробка модуля перевірки комплектності для одного типу дозволу (пілот)
Місяць 3-4: Інтеграція з міжвідомчою системою (Реєстр, податкова служба), особистий кабінет заявника
Місяць 5-6: Модуль правової експертизи, генерація проектів рішень
Місяць 7-8: Підключення другого типу дозволів, адміністративна аналітика
Місяць 9-10: Повний охоп типів дозволів відомства, інтеграція з портальними системами







