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_
InPaymentRegistrationService — упрощённые требования
1. Назначение
Сервис читает CSV выписку за дату, зачисляет суммы на полисные счета, фиксирует изменения и помечает файл как обработанный.
2. Входные данные и файл
bankStatements_{YYYY}_{M}_{D}.csvdirectory_processed_ничего не делать и завершить без ошибки3. Формат CSV
Id,Reference,AccountingDate,AccountNumber,Amount4. Обработка
AccountingDateиAmountAmountдолжен быть больше нуля, иначе пропуск и логAccountNumberInPayment(amount, accountingDate)и зарегистрироватьUpdateв репозитории5. Идемпотентность
Idлибо по комбинацииReference + AccountNumber + AccountingDate + Amount6. Завершение
commit_processed_исходный файл не изменять до коммитаdisposecommitи не создавать_processed_7. Логирование и аудит
8. Критерии приемки
_processed_, изменения закоммичены, ресурсы освобождены_processed__processed_