bank_transactions
Общее описание проекта
Проект представляет собой систему для автоматизации банковских операций, в основном связанных с платежными поручениями. Он разработан на основе Django и включает в себя интеграцию с внешними системами трекинга задач и банковскими API. Основной упор сделан на внутреннюю логику обработки данных, а не на пользовательский интерфейс.
Описание модулей проекта
-
Модуль Обработки Платежных Поручений: Предназначен для генерации и обработки платежных поручений на основе информации из внешних систем управления задачами и банковских счетов.
-
Модуль Интеграции с Банковскими Системами: Обеспечивает связь с различными банковскими API для выполнения банковских операций.
-
Модуль Авторизации и Управления Правами Доступа: Контролирует доступ к различным функциям системы, основываясь на правах пользователя.
-
Модуль Интеграции с Внешними Системами Трекинга Задач: Позволяет связываться с внешними системами для получения информации о задачах и инвойсах.
Общая логика работы системы
Система работает следующим образом: получает данные о задачах и инвойсах из внешних систем, обрабатывает их для создания платежных поручений, затем интерактивно работает с банковскими системами для выполнения финансовых операций. Пользовательская аутентификация и управление правами доступа обеспечивают безопасность и корректность рабочего процесса.
Интеграции с внешними системами
Система интегрируется с несколькими ключевыми внешними сервисами:
-
Внешние Системы Управления Задачами: Для получения информации о задачах и инвойсах.
-
Банковские API: Для выполнения банковских операций, таких как генерация платежных поручений.
Система ориентирована на внутреннюю обработку данных, минимизируя необходимость в пользовательском интерфейсе.
Действия в системе
- generate_payment_order: Генерация платежного поручения.
- generate_curl: Создание cURL команды для взаимодействия с банковским API.
- payment_orders_processing: Обработка платежных поручений.
- payment_orders_processing_by_user_and_tracker: Обработка платежных поручений для конкретного пользователя и трекера.
- get_bua_and_invoice: Получение информации о банковском пользовательском аккаунте и инвойсе.
- generate_payment_order_impl: Реализация генерации платежного поручения.
Эти действия отражают основные функции системы, связанные с обработкой и генерацией платежных поручений и взаимодействием с банковскими системами.
Пример использования проекта
Представьте, что вы управляющий IT-компании. Ваша компания регулярно заключает договоры на разработку ПО и получает соответствующие инвойсы от контрагентов. Чтобы автоматизировать процесс оплаты, вы используете данный проект.
-
Генерация платежного поручения: Когда вы получаете инвойс от контрагента, система автоматически генерирует платежное поручение на основе данных инвойса.
-
Создание cURL команды: Для выполнения транзакции система создает cURL команду, которая обеспечивает взаимодействие с банковским API.
-
Обработка платежных поручений: После генерации платежного поручения система обрабатывает его, убеждаясь в корректности всех данных и соответствии с банковскими требованиями.
-
Получение информации о банковском аккаунте: При необходимости, вы можете получить детальную информацию о банковском аккаунте и конкретном инвойсе через систему.
Этот процесс значительно упрощает и ускоряет работу финансового отдела вашей компании, минимизируя ручной труд и возможность ошибок.
Описание модели данных проекта:
-
BankAccountUser: Сущность, представляющая пользовательский банковский аккаунт.
- user: Ссылка на пользователя системы.
- type: Тип банковской системы.
- api_key: Ключ API для доступа к банковскому API.
-
CurrencyAccount: Сущность для учета валютных счетов.
- trackerUser: Связь с пользователем трекера.
- accountIds: Идентификаторы счетов, связанных с пользователем.
-
RightsSupport: Сущность для поддержки прав доступа.
- permissions: Права доступа, например, на обработку платежных поручений.
Эти сущности обеспечивают основу для работы системы, позволяя интегрировать пользовательские банковские аккаунты, управлять валютными счетами и контролировать доступ к различным операциям в системе.
На основе предоставленного кода, можно создать следующую диаграмму состояний в синтаксисе Mermaid:
Диаграмма Состояний
Данная диаграмма представляет последовательность операций в системе. Начиная с инициализации, система переходит к получению данных инвойса, затем генерирует платежное поручение, обрабатывает платежные поручения по конкретному пользователю и трекеру, генерирует cURL команду и завершает работу. Также возможен переход от генерации платежного поручения к обработке всех платежных поручений.
Обзор кода проекта
-
Функция
get_bua_and_invoice(bank_transactions/browse.py):- Множественные точки выхода из функции и обработка исключений. Это затрудняет чтение и поддержку кода. Рекомендую упростить логику, сократив количество
try-exceptблоков и точек выхода. - Применение строкового форматирования для создания SQL-запросов (строки 59-65) потенциально уязвимо для SQL-инъекций. Лучше использовать параметризованные запросы.
- Множественные точки выхода из функции и обработка исключений. Это затрудняет чтение и поддержку кода. Рекомендую упростить логику, сократив количество
-
Функция
generate_payment_order_impl(bank_transactions/browse.py):- Обработка ошибок выполняется путем генерации исключений. Это может быть неэффективным в некоторых сценариях. Возможно, стоит пересмотреть этот по дход, учитывая контекст использования функции.
- Непосредственное использование
json.loadsбез проверки содержимого (строка 112) может привести к ошибкам. Рекомендуется ввести проверку данных перед их обработкой.
-
Функция
payment_orders_processing_by_user_and_tracker(bank_transactions/processing.py):- Сложная логика с множественными уровнями вложенности и условиями. Это затрудняет понимание и поддержку кода. Предлагаю разделить функцию на более мелкие, каждая из которых будет выполнять одну задачу.
Общая оценка:
- Код в целом показывает продуманный подход к решению задач, но есть области, требующие оптимизации и улучшения читаемости.
- Оценка проекта: 7 из 10.
Оценка времени на разработку:
- Для опытной команды разработки создание такого проекта могло бы занять примерно от 2 до 3 недель, учитывая время на планирование, разработку, тестирование и рефакторинг.