Модульная система хранения и анализа данных о нарушениях
Тестовое задание. Система принимает выгрузки с портала «Наш город» (сообщения о нарушениях и ответы ОИВ), хранит их в нормализованной БД, считает статистику превышения срока ответа по округам и формирует PPTX-слайд «Сравнительная статистика превышения».
Автор: Викоренко Владислав.
Быстрый старт
pip install -r requirements.txt
cd src
python -m violations.cli load # XLSX -> output/violations.sqlite
python -m violations.cli report --json ../output/exceed_statistics.json # -> output/exceed_statistics.pptx
cd .. && python -m pytest -q # автотесты
Готовый пример слайда: output/exceed_statistics.pptx, превью output/exceed_statistics.png.
Структура репозитория
├── README.md
├── requirements.txt
├── pytest.ini
├── data/input/ исходные XLSX из задания (messages.xlsx, answers.xlsx)
├── db/
│ ├── schema_postgres.sql DDL PostgreSQL (основная СУБД)
│ ├── schema_sqlite.sql DDL SQLite (локальный запуск, тесты)
│ └── schema.dbml схема в DBML
├── docs/
│ ├── 01_system_statement.md системная постановка
│ ├── 02_data_analysis.md результаты анализа XLSX
│ ├── 03_architecture_c4.md C4 Context / Container, контракты
│ ├── 04_database.md схема БД, нормализация, ключи, индексы
│ ├── 05_pptx_report.md класс генерации слайда
│ ├── 06_architecture_defense.md защита архитектурных решений
│ ├── 07_scaling.md масштабирование до миллионов строк
│ ├── 08_run_and_check.md запуск и проверка
│ ├── contracts/openapi.yaml REST-контракт
│ └── diagrams/ *.drawio и PNG: C4 Context, C4 Container, ERD
├── src/violations/
│ ├── config.py пути, имена колонок, справочник округов, параметры
│ ├── cli.py интерфейс управления (команды load, report)
│ ├── storage/db.py подключение к БД, создание схемы
│ ├── ingest/loader.py модуль загрузки XLSX
│ ├── analytics/exceed_stats.py сервис аналитики (расчёт превышения)
│ └── reporting/pptx_slide.py сервис отчётов: класс ExceedSlideBuilder
├── scripts/profile_xlsx.py профилирование исходных файлов
├── tests/ автотесты (pytest)
└── output/ результаты: БД, PPTX, JSON
Документация
Читать по порядку: постановка → анализ данных → архитектура → БД → слайд → защита решений → масштабирование → запуск.
Стек
Python 3.10+, pandas, openpyxl, python-pptx, pytest; SQLite / PostgreSQL; Markdown; draw.io; DBML.