V

violations-analytics

Модульная система хранения и анализа данных о нарушениях

Тестовое задание. Система принимает выгрузки с портала «Наш город» (сообщения о нарушениях и ответы ОИВ), хранит их в нормализованной БД, считает статистику превышения срока ответа по округам и формирует 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.