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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions