Fintech Solutions LLC
CPAY-1842
В работеВысокий5 SP

Реализовать валидацию IBAN для международных переводов

Редактировать
Создано 8 апр 2026, 10:23Обновлено 2 часа назадАвтор: Мария СидороваCore Payments

Описание

Бизнес-контекст

При pilot rollout платежного модуля в Германии и Нидерландах выявлена проблема: текущая логика валидации не учитывает страновые стандарты IBAN, что приводит к отклонению ~12% валидных платежей.


Техническое требование

Необходимо реализовать полную валидацию IBAN согласно стандарту ISO 13616:

1. Проверка длины по коду страны

2. Расчёт контрольной суммы MOD-97

3. Валидация структуры национального кода банка


Поведение API

При валидном IBAN — стандартная обработка платежа

При невалидном IBAN — блокировка вызова внешнего провайдера

Возврат HTTP 400 с детализированной ошибкой

Логирование попытки в audit trail


Страны первой волны

DE (Германия), FR (Франция), NL (Нидерланды), BE (Бельгия)


Ссылки

[Спецификация IBAN](https://www.swift.com/standards/data-standards/iban)

[Внутренняя документация API](/docs/payments-api)

Критерии приёмки

2/6
Валидация формата IBAN реализована для DE, FR, NL, BE
Контрольная сумма проверяется по алгоритму MOD-97
Вызов API провайдера блокируется при невалидном IBAN
При ошибке возвращается HTTP 400 с кодом INVALID_IBAN
Событие логируется в audit trail
Unit-тесты написаны и проходят (coverage ≥ 90%)

Вложения (3)

iban-validation-spec.pdf

245 KB · Мария С. · 8 апр

api-contract-v2.json

12 KB · Дмитрий П. · 9 апр

screenshot-error-case.png

156 KB · Елена В. · 10 апр

АК
МС
Мария СидороваPM8 апр, 10:45

Приоритет на DE и NL — там основной объём платежей в Q2. FR и BE можно добавить следом.

АК
Алексей КозловBackend8 апр, 14:30

Начал с DE. Нашёл edge case: некоторые банки используют legacy формат без leading zeros. Уточню у провайдера.

ДП
Дмитрий ПетровBackend9 апр, 09:15

По поводу response code — предлагаю использовать стандартный формат ошибки с полем `validation_errors[]`. Так проще будет фронту показать конкретную проблему.

АК
Алексей КозловBackend9 апр, 11:40

Согласен. Добавлю поля `field`, `code`, `message` в каждую ошибку. Пример: `{"field": "iban", "code": "INVALID_CHECKSUM", "message": "Контрольная сум����а не совпадает"}`

ЕВ
Елена ВолковаQA9 апр, 16:20

QA: подготовила тестовые IBAN для всех 4 стран — валидные и с типичными ошибками. Файл в attachments.

Детали

ПроектCore Payments
Тип
Задача
СтатусВ работе
ПриоритетВысокий
Метки
IBANvalidationpaymentsbackendeu-compliance

Люди

Исполнитель
АКАлексей Козлов
Автор
МСМария Сидорова
Наблюдатели
ДПЕВ

Планирование

SprintSprint 24.04
КомпонентPayments API
Версия / Релизv2.4.0
Срок14 апреля 2026

Оценка

Story Points5
Оценка
Затрачено1д 4ч
Осталось1д 4ч

Дополнительно

ОкружениеProduction, Staging
Версия сборки2.3.1