Перейти к основному содержимому

bank_transactions

Общее описание проекта

Проект представляет собой систему для автоматизации банковских операций, в основном связанных с платежными поручениями. Он разработан на основе Django и включает в себя интеграцию с внешними системами трекинга задач и банковскими API. Основной упор сделан на внутреннюю логику обработки данных, а не на пользовательский интерфейс.

Описание модулей проекта

  1. Модуль Обработки Платежных Поручений: Предназначен для генерации и обработки платежных поручений на основе информации из внешних систем управления задачами и банковских счетов.

  2. Модуль Интеграции с Банковскими Системами: Обеспечивает связь с различными банковскими API для выполнения банковских операций.

  3. Модуль Авторизации и Управления Правами Доступа: Контролирует доступ к различным функциям системы, основываясь на правах пользователя.

  4. Модуль Интеграции с Внешними Системами Трекинга Задач: Позволяет связываться с внешними системами для получения информации о задачах и инвойсах.

Общая логика работы системы

Система работает следующим образом: получает данные о задачах и инвойсах из внешних систем, обрабатывает их для создания платежных поручений, затем интерактивно работает с банковскими системами для выполнения финансовых операций. Пользовательская аутентификация и управление правами доступа обеспечивают безопасность и корректность рабочего процесса.

Интеграции с внешними системами

Система интегрируется с несколькими ключевыми внешними сервисами:

  1. Внешние Системы Управления Задачами: Для получения информации о задачах и инвойсах.

  2. Банковские API: Для выполнения банковских операций, таких как генерация платежных поручений.

Система ориентирована на внутреннюю обработку данных, минимизируя необходимость в пользовательском интерфейсе.

Действия в системе

  1. generate_payment_order: Генерация платежного поручения.
  2. generate_curl: Создание cURL команды для взаимодействия с банковским API.
  3. payment_orders_processing: Обработка платежных поручений.
  4. payment_orders_processing_by_user_and_tracker: Обработка платежных поручений для конкретного пользователя и трекера.
  5. get_bua_and_invoice: Получение информации о банковском пользовательском аккаунте и инвойсе.
  6. generate_payment_order_impl: Реализация генерации платежного поручения.

Эти действия отражают основные функции системы, связанные с обработкой и генерацией платежных поручений и взаимодействием с банковскими системами.

Пример использования проекта

Представьте, что вы управляющий IT-компании. Ваша компания регулярно заключает договоры на разработку ПО и получает соответствующие инвойсы от контрагентов. Чтобы автоматизировать процесс оплаты, вы используете данный проект.

  1. Генерация платежного поручения: Когда вы получаете инвойс от контрагента, система автоматически генерирует платежное поручение на основе данных инвойса.

  2. Создание cURL команды: Для выполнения транзакции система создает cURL команду, которая обеспечивает взаимодействие с банковским API.

  3. Обработка платежных поручений: После генерации платежного поручения система обрабатывает его, убеждаясь в корректности всех данных и соответствии с банковскими требованиями.

  4. Получение информации о банковском аккаунте: При необходимости, вы можете получить детальную информацию о банковском аккаунте и конкретном инвойсе через систему.

Этот процесс значительно упрощает и ускоряет работу финансового отдела вашей компании, минимизируя ручной труд и возможность ошибок.

Описание модели данных проекта:

  1. BankAccountUser: Сущность, представляющая пользовательский банковский аккаунт.

    • user: Ссылка на пользователя системы.
    • type: Тип банковской системы.
    • api_key: Ключ API для доступа к банковскому API.
  2. CurrencyAccount: Сущность для учета валютных счетов.

    • trackerUser: Связь с пользователем трекера.
    • accountIds: Идентификаторы счетов, связанных с пользователем.
  3. RightsSupport: Сущность для поддержки прав доступа.

    • permissions: Права доступа, например, на обработку платежных поручений.

Эти сущности обеспечивают основу для работы системы, позволяя интегрировать пользовательские банковские аккаунты, управлять валютными счетами и контролировать доступ к различным операциям в системе.

На основе предоставленного кода, можно создать следующую диаграмму состояний в синтаксисе Mermaid:

Диаграмма Состояний

Данная диаграмма представляет последовательность операций в системе. Начиная с инициализации, система переходит к получению данных инвойса, затем генерирует платежное поручение, обрабатывает платежные поручения по конкретному пользователю и трекеру, генерирует cURL команду и завершает работу. Также возможен переход от генерации платежного поручения к обработке всех платежных поручений.

Обзор кода проекта

  1. Функция get_bua_and_invoice (bank_transactions/browse.py):

    • Множественные точки выхода из функции и обработка исключений. Это затрудняет чтение и поддержку кода. Рекомендую упростить логику, сократив количество try-except блоков и точек выхода.
    • Применение строкового форматирования для создания SQL-запросов (строки 59-65) потенциально уязвимо для SQL-инъекций. Лучше использовать параметризованные запросы.
  2. Функция generate_payment_order_impl (bank_transactions/browse.py):

    • Обработка ошибок выполняется путем генерации исключений. Это может быть неэффективным в некоторых сценариях. Возможно, стоит пересмотреть этот подход, учитывая контекст использования функции.
    • Непосредственное использование json.loads без проверки содержимого (строка 112) может привести к ошибкам. Рекомендуется ввести проверку данных перед их обработкой.
  3. Функция payment_orders_processing_by_user_and_tracker (bank_transactions/processing.py):

    • Сложная логика с множественными уровнями вложенности и условиями. Это затрудняет понимание и поддержку кода. Предлагаю разделить функцию на более мелкие, каждая из которых будет выполнять одну задачу.

Общая оценка:

  • Код в целом показывает продуманный подход к решению задач, но есть области, требующие оптимизации и улучшения читаемости.
  • Оценка проекта: 7 из 10.

Оценка времени на разработку:

  • Для опытной команды разработки создание такого проекта могло бы занять примерно от 2 до 3 недель, учитывая время на планирование, разработку, тестирование и рефакторинг.