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

redvoice

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

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

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

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

Логика работы системы

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

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

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

Этот проект представляет собой сложную систему для автоматизации бизнес-процессов в ИТ-компании, ориентированную на финансовое и контрактное управление, без акцента на пользовательский интерфейс.

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

  1. agreement - обработка запросов связанных с договорами.
  2. agreement_create_or_update - создание или обновление договора.
  3. enrich_agreement - обогащение данных договора дополнительной информацией.
  4. get_details_api - получение детализированной информации по договору или инвойсу.
  5. invoice_updater_api - обновление данных инвойса.
  6. invoice_generator_api - генерация инвойсов.
  7. generate_details_api - создание детальной информации для инвойса.
  8. get_invoices_api - получение списка инвойсов.
  9. invoice_api - обработка запросов, связанных с инвойсами.

Сценарий использования

Представим ситуацию в ИТ-компании, где необходимо управлять договорами и инвойсами между подрядчиками и заказчиками. Менеджер проекта получает запрос от заказчика на разработку программного обеспечения. Используя систему, менеджер создает новый договор (agreement_create_or_update), указывая все необходимые детали и условия.

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

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

Модель данных

В проекте определены следующие основные сущности:

  1. RedvoiceTrackerSetting: Настройки трекера в системе Redvoice.

    • tracker_invoice: Идентификатор трекера для инвойсов.
    • tracker_agreement: Идентификатор трекера для договоров.
    • status_draft: Идентификатор статуса "черновик" для договоров/инвойсов.
    • priority_regular: Идентификатор обычного приоритета.
    • invoicing_date, sum_to_pay, payment_method, charge_by, details: Идентификаторы соответствующих полей в трекере.
  2. Agreement: Договор.

    • id, author, date, number, currency, customer, payment_method, rate, rate_formula, details, subcontractor: Поля, описывающие детали договора.
  3. RichInvoice: Подробный инвойс.

    • id, subject, status, project, tracker, agreement, assignee, customer, subcontractor, description, created_date, payment_date, reporting_period, date, due_date, duration, exchange_rate, is_private, payment_method, charge_by, payment_direction, pdf, comment, details, sum, sum_in_rub, vat: Поля, описывающие детали инвойса.
  4. Detalization: Детализация инвойса.

    • calculated_hours, calculated_sum, calculated_sum_in_rub, detalization: Поля, описывающие детальные расчеты по инвойсу.
  5. InvoiceData: Данные инвойса для запроса.

    • assignee_id, author_id, subject, sum_to_pay, sum_in_rub, status_id, invoicing_date, details, exchange_rate, pdf, payment_method, description, priority_id, estimated, is_private, charge_by, not_for_publishing, customer_id, subcontractor_id, payment_direction, attachments: Поля, используемые для формирования запроса на создание или обновление инвойса.

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

  • Draft: Начальное состояние, договор или инвойс создается или обновляется.
  • Review: Договор или инвойс находится на рассмотрении, возможно обновление данных.
  • Approved: Договор или инвойс утвержден, происходит обогащение данных.
  • Finalized: Инвойс окончательно сформирован и отправлен на оплату.

Каждое состояние отражает этап обработки договора или инвойса в системе, с возможностью перехода к следующему этапу посредством выполнения определенных действий.

Анализ кода проекта

Проанализировав предоставленный код, можно отметить несколько моментов для его улучшения:

  1. Модуль agreements.py: Функция agreement обрабатывает GET и PUT запросы. Однако, обе ветви условий (if request.method == 'GET' и elif request.method == 'PUT') вызывают разные функции без явного разделения логики. Рекомендуется разбить эту функцию на две отдельные функции для улучшения читаемости и поддержки кода.

  2. Обработка исключений: Во многих местах кода отсутствует явная обработка исключений, что может привести к нестабильности приложения при возникновении ошибок. Например, в agreements.py, details.py и invoices.py, где работа с внешним API может вызвать исключения.

  3. Модуль dto.py: В классе DTO метод to_dict рекурсивно обрабатывает вложенные структуры данных. Это может привести к проблемам с производительностью при большом объеме данных. Стоит рассмотреть оптимизацию данной функции.

  4. Модуль generator.py: Функция invoice_updater_api содержит сложную логику, которая может быть разделена на более мелкие части для улучшения читаемости и тестируемости.

Время на разработку такого проекта сильно зависит от конкретных требований и условий. Для опытной команды разработки с учетом рефакторинга, тестирования и документирования, проект такого масштаба может занять примерно от 3 до 6 месяцев.

Оценка кода: 7 из 10. Код функционален и соответствует задачам проекта, однако есть потенциал для улучшения структуры и поддерживаемости.