No description
  • Python 87.2%
  • JavaScript 7%
  • Cython 2.8%
  • C 1.6%
  • HTML 0.6%
  • Other 0.6%
Find a file
2026-05-27 11:58:42 +03:00
.venv311 Initial commit 2026-05-27 11:58:42 +03:00
__pycache__ Initial commit 2026-05-27 11:58:42 +03:00
adapters Initial commit 2026-05-27 11:58:42 +03:00
docs Initial commit 2026-05-27 11:58:42 +03:00
domain Initial commit 2026-05-27 11:58:42 +03:00
graphify-out Initial commit 2026-05-27 11:58:42 +03:00
project-wiki Initial commit 2026-05-27 11:58:42 +03:00
static Initial commit 2026-05-27 11:58:42 +03:00
templates Initial commit 2026-05-27 11:58:42 +03:00
tests Initial commit 2026-05-27 11:58:42 +03:00
use_cases Initial commit 2026-05-27 11:58:42 +03:00
.DS_Store Initial commit 2026-05-27 11:58:42 +03:00
.env Initial commit 2026-05-27 11:58:42 +03:00
.env.example Initial commit 2026-05-27 11:58:42 +03:00
.gitignore Initial commit 2026-05-27 11:58:42 +03:00
.graphify_analysis.json Initial commit 2026-05-27 11:58:42 +03:00
.graphify_ast.json Initial commit 2026-05-27 11:58:42 +03:00
.graphify_chunk_01.json Initial commit 2026-05-27 11:58:42 +03:00
.graphify_detect.json Initial commit 2026-05-27 11:58:42 +03:00
.graphify_extract.json Initial commit 2026-05-27 11:58:42 +03:00
.graphify_labels.json Initial commit 2026-05-27 11:58:42 +03:00
.graphify_semantic.json Initial commit 2026-05-27 11:58:42 +03:00
.graphify_uncached.txt Initial commit 2026-05-27 11:58:42 +03:00
AGENTS.md Initial commit 2026-05-27 11:58:42 +03:00
app.py Initial commit 2026-05-27 11:58:42 +03:00
bank_programs.db Initial commit 2026-05-27 11:58:42 +03:00
build_subsidy_matrix_web.py Initial commit 2026-05-27 11:58:42 +03:00
compose.override.yml Initial commit 2026-05-27 11:58:42 +03:00
crm_debug.json Initial commit 2026-05-27 11:58:42 +03:00
docker-compose.yml Initial commit 2026-05-27 11:58:42 +03:00
Dockerfile Initial commit 2026-05-27 11:58:42 +03:00
package-lock.json Initial commit 2026-05-27 11:58:42 +03:00
package.json Initial commit 2026-05-27 11:58:42 +03:00
playwright.config.js Initial commit 2026-05-27 11:58:42 +03:00
README.md Initial commit 2026-05-27 11:58:42 +03:00
requirements.txt Initial commit 2026-05-27 11:58:42 +03:00

Матрица субсидирования банков — веб-приложение

Flask-приложение с Docker-деплоем. Замена настольного GUI для серверного использования.

Требования

  • Docker Engine ≥ 24
  • Docker Compose plugin ≥ 2.20 (или docker-compose ≥ 1.29)
  • Минимум 1 ГБ RAM на контейнер (рекомендуется 2 ГБ — OCR тяжёлый)

Быстрый старт

# 1. Перейдите в директорию с приложением
cd web_app/

# 2. (Опционально) Создайте .env из шаблона
cp .env.example .env
# Отредактируйте .env при необходимости

# 3. Соберите и запустите
docker compose up --build -d

# 4. Откройте в браузере
# http://localhost:5000

Первая сборка образа занимает 37 минут (установка Tesseract + Python-зависимостей).


Конфигурация

Параметры задаются через переменные окружения в файле .env:

Переменная По умолчанию Описание
APP_PORT 5000 Внешний порт для доступа к приложению
GUNICORN_LOG_LEVEL info Уровень логирования (debug/info/warning)

Использование

  1. Откройте http://<server-ip>:5000
  2. Перетащите или выберите файлы банков (PDF, XLSX, DOCX)
  3. При необходимости скорректируйте параметры в разделе ⚙️
  4. Нажмите ▶ Запустить — в журнале появятся строки парсинга в реальном времени
  5. По завершении нажмите 📥 Скачать Excel

Поддерживаемые файлы банков

Банк Формат
Дом.РФ DOCX
МКБ XLSX
Альфа-Банк XLSX
Совкомбанк XLSX
ВТБ PDF
Сбербанк PDF
ТКБ XLSX
Урал ФД PDF

Управление контейнером

# Посмотреть статус
docker compose ps

# Просмотр логов
docker compose logs -f

# Остановить
docker compose down

# Пересобрать после обновления кода
docker compose up --build -d

# Перезапустить без пересборки
docker compose restart

Работа за обратным прокси (Nginx)

Если вы хотите выставить приложение на 80/443 через Nginx, добавьте в конфиг сервера:

server {
    listen 80;
    server_name your-domain.com;

    # Важно для SSE (стриминг лога): отключаем буферизацию
    proxy_buffering          off;
    proxy_cache              off;

    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;

        proxy_set_header   Host              $host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;

        # SSE: не закрывать соединение раньше времени
        proxy_read_timeout  600s;
        proxy_send_timeout  600s;

        # SSE: не буферизовать ответ
        proxy_set_header   X-Accel-Buffering no;
    }
}

Устранение неполадок

Ошибка «файл не найден» для PDF-банков (ВТБ, Сбербанк, Урал ФД)

Проверьте, что Tesseract и Poppler установлены в контейнере:

docker compose exec subsidy-matrix tesseract --version
docker compose exec subsidy-matrix pdftoppm -v

Если команды не найдены — пересоберите образ:

docker compose build --no-cache

Ошибка «file too large»

Увеличьте лимит загрузки в app.py (переменная MAX_CONTENT_LENGTH).

Контейнер падает из-за нехватки памяти (OOM)

Увеличьте limits.memory в docker-compose.yml (минимум 1.5g для файлов с OCR).

SSE-лог не стримится (только спиннер)

Скорее всего, обратный прокси буферизует ответ. Убедитесь, что у Nginx задан proxy_buffering off (см. раздел выше).


Файловая структура

web_app/
├── app.py                       # Flask-приложение (бэкенд)
├── build_subsidy_matrix_web.py  # Ядро парсинга и формирования Excel
├── templates/
│   └── index.html               # Интерфейс (единственный HTML-файл)
├── static/                      # Статика (зарезервировано)
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── .env.example
└── README.md