Skip to content

Требования к приёму входящей платежей #8

@oveeernight

Description

@oveeernight

InPaymentRegistrationService — упрощённые требования

1. Назначение

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

2. Входные данные и файл

  • Имя файла: bankStatements_{YYYY}_{M}_{D}.csv
  • Каталог: аргумент directory
  • Если файла нет или уже есть пометка _processed_ ничего не делать и завершить без ошибки

3. Формат CSV

  • Заголовок: Id,Reference,AccountingDate,AccountNumber,Amount
  • Поля
    • Id — строка или число
    • Reference — строка
    • AccountNumber — строка
    • Amount — десятичное число с двумя знаками

4. Обработка

  • Для каждой строки
    • Парсить AccountingDate и Amount
    • Если парсинг неудачен пропустить строку и записать в лог
    • Amount должен быть больше нуля, иначе пропуск и лог
    • Найти счет по AccountNumber
    • Если счет не найден пропустить и записать в лог
    • Если счет найден выполнить InPayment(amount, accountingDate) и зарегистрировать Update в репозитории
  • Ошибки отдельных строк не прерывают обработку остальных

5. Идемпотентность

  • Повторные строки не должны зачисляться повторно
  • Дедупликация по Id либо по комбинации Reference + AccountNumber + AccountingDate + Amount
  • Дубликаты пропускать и логировать

6. Завершение

  • После успешной обработки всего файла
    • Выполнить один общий commit
    • Создать копию файла с префиксом _processed_ исходный файл не изменять до коммита
    • Освободить ресурсы dispose
  • При критической ошибке чтения или формата не выполнять commit и не создавать _processed_

7. Логирование и аудит

  • Логировать старт и завершение обработки путь и дату, количество успешных пропущенных и ошибочных строк, причины пропусков
  • Аудит начислений должен содержать дату учета сумму счет идентификатор или референс транзакции

8. Критерии приемки

  • Файл существует и строки валидны и счета известны суммы зачислены, репозиторий обновлен, файл помечен _processed_, изменения закоммичены, ресурсы освобождены
  • В файле есть строки с неизвестными счетами такие строки пропущены без ошибок, остальные обработаны, коммит выполнен, файл помечен _processed_
  • Файл отсутствует никаких изменений, без коммита, без _processed_

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions