No description
- Python 87.2%
- JavaScript 7%
- Cython 2.8%
- C 1.6%
- HTML 0.6%
- Other 0.6%
| .venv311 | ||
| __pycache__ | ||
| adapters | ||
| docs | ||
| domain | ||
| graphify-out | ||
| project-wiki | ||
| static | ||
| templates | ||
| tests | ||
| use_cases | ||
| .DS_Store | ||
| .env | ||
| .env.example | ||
| .gitignore | ||
| .graphify_analysis.json | ||
| .graphify_ast.json | ||
| .graphify_chunk_01.json | ||
| .graphify_detect.json | ||
| .graphify_extract.json | ||
| .graphify_labels.json | ||
| .graphify_semantic.json | ||
| .graphify_uncached.txt | ||
| AGENTS.md | ||
| app.py | ||
| bank_programs.db | ||
| build_subsidy_matrix_web.py | ||
| compose.override.yml | ||
| crm_debug.json | ||
| docker-compose.yml | ||
| Dockerfile | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.js | ||
| README.md | ||
| requirements.txt | ||
Матрица субсидирования банков — веб-приложение
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
Первая сборка образа занимает 3–7 минут (установка Tesseract + Python-зависимостей).
Конфигурация
Параметры задаются через переменные окружения в файле .env:
| Переменная | По умолчанию | Описание |
|---|---|---|
APP_PORT |
5000 |
Внешний порт для доступа к приложению |
GUNICORN_LOG_LEVEL |
info |
Уровень логирования (debug/info/warning) |
Использование
- Откройте
http://<server-ip>:5000 - Перетащите или выберите файлы банков (PDF, XLSX, DOCX)
- При необходимости скорректируйте параметры в разделе ⚙️
- Нажмите ▶ Запустить — в журнале появятся строки парсинга в реальном времени
- По завершении нажмите 📥 Скачать Excel
Поддерживаемые файлы банков
| Банк | Формат |
|---|---|
| Дом.РФ | DOCX |
| МКБ | XLSX |
| Альфа-Банк | XLSX |
| Совкомбанк | XLSX |
| ВТБ | |
| Сбербанк | |
| ТКБ | XLSX |
| Урал ФД |
Управление контейнером
# Посмотреть статус
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