Первичная Аналитика проекта - Alex-mur/MIFI_Globus_Finance GitHub Wiki

Аналитика проекта "Финансовый мониторинг и отчетность"

Технологический стек

  • Бэкенд: Java 17+, Spring Boot 3.x
  • Фронтенд: ?
  • База данных: PostgreSQL 15+
  • Библиотеки отчетов: Apache POI (Excel), JasperReports (PDF) - Предварительно
  • Аутентификация: Spring Security
  • Сборка: Maven
  • Деплой: Docker + Docker Compose

Логическая модель данных

image

Sequence diagram для создания транзакции

image

Архитектура приложения

Данная модель, как и вся первичная аналитика является лишь наброском, а не строгой определенной структурой

src/main/java/it/globus/finance/
├── config/
│   ├── JwtAuthenticationFilter.java
│   ├── SecurityConfiguration.java
│   └── SwaggerConfig.java             # Документация API
│
├── controller/
│   ├── auth/
│   │   ├── AuthController.java
│   │   └── TestController.java
│   ├── transaction/
│   │   ├── TransactionController.java # Новый
│   │   └── ReportController.java      # Новый
│   └── admin/
│       └── AdminController.java       # Для админ-функций
│
├── dto/
│   ├── auth/
│   │   ├── JwtAuthenticationResponse.java
│   │   ├── SignInRequest.java
│   │   └── SignUpRequest.java
│   ├── transaction/                   # Новый
│   │   ├── TransactionDto.java
│   │   ├── TransactionFilterDto.java
│   │   └── ReportRequestDto.java
│   └── response/                      # Новый
│       └── ApiResponse.java           # Стандартный формат ответа
│
├── exception/
│   ├── ErrorResponse.java
│   ├── GlobalExceptionHandler.java
│   └── custom/
│       ├── TransactionException.java  # Новый
│       └── ReportGenerationException.java
│
├── model/
│   ├── entity/
│   │   ├── auth/
│   │   │   ├── User.java
│   │   │   └── Role.java
│   │   ├── transaction/               # Новый
│   │   │   ├── Transaction.java
│   │   │   ├── Bank.java
│   │   │   └── Category.java
│   │   └── audit/
│   │       └── AuditLog.java          # Для логирования изменений
│   ├── enums/
│   │   ├── TransactionType.java       # ПОСТУПЛЕНИЕ/СПИСАНИЕ
│   │   ├── TransactionStatus.java     # Статусы операций
│   │   └── EntityType.java            # Физ/Юр лицо
│   └── projection/                    # Новый
│       └── TransactionStats.java      # Для статистики
│
├── repository/
│   ├── auth/
│   │   └── UserRepository.java
│   ├── transaction/                   # Новый
│   │   ├── TransactionRepository.java
│   │   ├── BankRepository.java
│   │   └── CategoryRepository.java
│   └── custom/                        # Новый
│       └── TransactionCustomRepo.java # Для сложных запросов
│
├── service/
│   ├── auth/
│   │   ├── AuthenticationService.java
│   │   ├── JwtService.java
│   │   └── UserService.java
│   ├── transaction/                   # Новый
│   │   ├── TransactionService.java
│   │   ├── ReportService.java
│   │   └── BankService.java
│   └── validator/                    # Новый
│       └── TransactionValidator.java  # Валидация транзакций
│
├── util/
│   ├── SecurityUtils.java
│   ├── ReportGenerator.java           # Генерация PDF/Excel
│   └── FieldUpdater.java              # Для частичного обновления
│
└── FinanceApplication.java

Ключевые компоненты:

  1. Сущности для финансового мониторинга:

    • Transaction - основная сущность операций
    • Bank - банки отправителей/получателей
    • Category - категории транзакций
  2. Слои для работы с транзакциями:

    • Контроллеры, сервисы и репозитории
    • Кастомный репозиторий для сложных фильтров
    • DTO для запросов и ответов
  3. Отчетность:

    • Отдельный сервис и контроллер
    • Утилита для генерации разных форматов
  4. Валидация:

    • Отдельный валидатор для бизнес-правил:
    public void validateTransaction(TransactionDto dto) {
        if (dto.getStatus() == TransactionStatus.CONFIRMED && dto.getAmount() <= 0) {
            throw new TransactionException("Confirmed transaction must have positive amount");
        }
        // Другие правила
    }
    
  5. Фильтрация:

    • Специальный DTO для параметров фильтрации:
    public class TransactionFilterDto {
        private LocalDate startDate;
        private LocalDate endDate;
        private BigDecimal minAmount;
        private BigDecimal maxAmount;
        private TransactionType type;
        // Остальные поля
    }
    

Пример структуры Transaction entity:

@Entity
@Table(name = "transactions")
public class Transaction {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @ManyToOne
    private User user;
    
    @Enumerated(EnumType.STRING)
    private TransactionType type;
    
    private BigDecimal amount;
    private String comment;
    
    @Enumerated(EnumType.STRING)
    private TransactionStatus status;
    
    @ManyToOne
    private Bank senderBank;
    
    private String senderAccount;
    
    @ManyToOne
    private Bank receiverBank;
    
    private String receiverInn;
    private String receiverAccount;
    
    @ManyToOne
    private Category category;
    
    // Даты, аудит-поля и т.д.
}

Дополнительные улучшения:

  1. Разделение на подпакеты по функциональности (auth, transaction)
  2. Поддержка аудита изменений через AuditLog
  3. Готовность к расширению (например, добавление модуля аналитики)
  4. Стандартизированная обработка ошибок
  5. Поддержка Swagger для API документации

Особенности реализации

  1. Валидация:

    • Регулярные выражения для ИНН: ^\d{11}$
    • Телефон: ^(\+7|8)\d{10}$
    • Дата: ^\d{2}\.\d{2}\.\d{4}$
  2. Безопасность:

    • HTTPS обязателен
    • CSRF защита
    • Хеширование паролей (BCrypt)
  3. Производительность:

    • Пагинация для списка транзакций ??
    • Кэширование часто запрашиваемых отчетов ??
  4. Масштабируемость:

    • Разделение на микросервисы в будущем
    • API-first подход

Основные API endpoints

  1. Транзакции

    • POST /api/transactions - Создание транзакции
    • PUT /api/transactions/{id} - Обновление транзакции
    • GET /api/transactions - Получение списка всех транзакций
    • GET /api/transactions/{id} - Получить транзакцию по id
    • DELETE /api/transactions/{id} - Удаление (изменение статуса)
    • POST /api/transactions/filter - Получить транзакции по фильтрам
  2. Отчеты

    • POST /api/reports/generate - Генерация отчета
    • GET /api/reports/{id}/download - Скачивание отчета
  3. Аутентификация

    • POST /api/auth/login - Вход
    • POST /api/auth/register - Регистрация

План реализации по спринтам (Scrum)

Спринт 1 (3 дня)

Цель: Подготовка инфраструктуры и базовых компонентов

  • Настройка Spring Boot проекта
  • Конфигурация PostgreSQL + Liquibase
  • Базовая аутентификация (Spring Security)
  • Простые UI шаблоны *

Спринт 2 (5 дней)

Цель: Реализация CRUD для транзакций

  • Модель и репозиторий Transaction
  • API для создания/чтения транзакций
  • Валидация входных данных
  • Базовый UI для ввода транзакций *

Спринт 3 (5 дней)

Цель: Фильтрация и отчеты

  • Реализация фильтров для транзакций
  • Генерация отчетов в CSV/Excel/PDF
  • Дашборды с графиками (Chart.js) *

Спринт 4 (3 дня)

Цель: Тестирование и доработки

  • Юнит-тесты (JUnit 5)
  • Интеграционные тесты
  • Исправление багов

Спринт 5 (2 дня)

Цель: Деплой и презентация

  • Docker-контейнеризация
  • Демо-версия на облаке *
  • Подготовка презентации