API для управления банками, компаниями и банковскими счетами с поддержкой шифрования данных и аудита.
- Шифрование полей ИНН и номеров счетов (AES-256)
- Маскирование конфиденциальных данных в ответах API
- Аудит всех действий с записью в отдельную таблицу
- Валидация ИНН, БИК, номеров счетов
- Опциональная проверка ИНН через API ФНС
- Docker-контейнеризация
- Миграции с помощью Alembic
- Python 3.9-3.11
- PostgreSQL
- Docker и Docker Compose
-
Клонируйте репозиторий:
git clone <repository-url> cd testtask
-
Создайте файл
.envна основе.env.example:cp .env.example .env
-
Сгенерируйте ключ шифрования и добавьте его в
.env:python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" -
Запустите приложение:
docker-compose up --build
API будет доступно по адресу: http://localhost:8000
-
POST /companies/- Создание компании{ "name": "ООО Рога и Копыта", "inn": "7707083893", "kpp": "773601001", "legal_address": "г. Москва, ул. Примерная, д. 1", "ceo_name": "Иванов Иван Иванович" } -
GET /companies/{id}- Получение информации о компании -
PUT /companies/{id}- Обновление информации о компании -
DELETE /companies/{id}- Удаление компании -
GET /companies/search/?inn_part=770- Поиск компаний по части ИНН
-
POST /banks/- Создание банка{ "name": "Сбербанк", "bik": "044525225", "swift_code": "SABRRUMM" } -
GET /banks/{id}- Получение информации о банке -
PUT /banks/{id}- Обновление информации о банке -
DELETE /banks/{id}- Удаление банка
-
POST /accounts/- Создание счета{ "account_number": "40702810038000123456", "bank_id": 1, "currency": "RUB" } -
GET /accounts/{id}- Получение информации о счете -
PUT /accounts/{id}- Обновление информации о счете -
POST /accounts/{id}/block- Блокировка счета -
DELETE /accounts/{id}- Удаление счета
GET /audit/- Получение истории изменений- Параметры:
entity_type: тип сущности (Company/Bank/Account)entity_id: ID сущностиaction: тип действия (CREATE/UPDATE/DELETE)
- Параметры:
- ИНН: проверка контрольной суммы по алгоритму ФНС
- БИК: строго 9 цифр
- Номер счета: 20 цифр, уникальность в рамках банка
- SWIFT-код: 8-11 символов, формат: [A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?
- Шифрование конфиденциальных данных с использованием Fernet (AES-256)
- Маскирование данных в ответах API (например, ИНН: ******7890)
- Аудит всех действий с записью информации о пользователе, времени и типе операции
Полная документация API доступна по следующим адресам:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc