Referință API pacs008
Проект предоставляет REST API и CLI для операционных сценариев обработки платёжных сообщений.
Заметки по внедрению
- Используйте синхронную генерацию для операторских проверок и небольших пакетов, когда вызывающая сторона ждёт XML сразу.
- Используйте асинхронную генерацию, когда входные файлы велики, нужны повторные попытки или генерация встроена в более широкий оркестрационный процесс.
- Храните и исходные входные данные, и отчёт о валидации, чтобы служба поддержки могла воспроизвести XML при инциденте.
- Фиксируйте пути к шаблонам и XSD в конфигурации развёртывания, чтобы избежать тихих обновлений.
Установка
Установите пакет из PyPI. Требуется Python 3.10 или выше.
python -m pip install pacs008
REST API
Запустите встроенный сервер FastAPI для предоставления HTTP-эндпоинтов валидации и генерации.
Запустить сервер
uvicorn pacs008.api.app:app --reload --host 0.0.0.0 --port 8000
Эндпоинты
| Endpoint | Описание |
|---|---|
GET /api/health | Health check that returns service status |
POST /api/validate | Validate payment data without generating XML |
POST /api/generate | Generate XML now and return the file |
POST /api/generate/async | Submit an async generation job |
GET /api/status/{job_id} | Check job status by ID |
GET /api/download/{job_id} | Download XML after the job completes |
DELETE /api/jobs/{job_id} | Cancel a pending or running job |
GET /api/docs | Swagger UI for testing all endpoints |
pacs.002.001.12— Отчёт о статусе платежа между финансовыми учреждениямиpacs.003.001.09— Клиентское прямое дебетование между финансовыми учреждениямиpacs.004.001.11— Возврат платежаpacs.007.001.11— Сторнирование платежа между финансовыми учреждениямиpacs.008.001.13— Клиентский кредитовый перевод между финансовыми учреждениямиpacs.009.001.10— Кредитовый перевод между финансовыми учреждениямиpacs.010.001.05— Прямое дебетование между финансовыми учреждениямиpacs.028.001.05— Запрос статуса платежа между финансовыми учреждениями
Пример валидации
Отправьте платёжные данные для валидации перед генерацией XML.
curl -X POST http://localhost:8000/api/validate \
-H "Content-Type: application/json" \
-d '{
"message_type": "pacs.008.001.13",
"data": [{
"msg_id": "MSG-2026-001",
"creation_date_time": "2026-01-15T10:30:00",
"nb_of_txs": "1",
"settlement_method": "CLRG",
"interbank_settlement_date": "2026-01-15",
"end_to_end_id": "E2E-INV-2026-001",
"interbank_settlement_amount": "25000.00",
"interbank_settlement_currency": "EUR",
"charge_bearer": "SHAR",
"debtor_name": "Acme Corp GmbH",
"debtor_agent_bic": "DEUTDEFF",
"creditor_agent_bic": "COBADEFF",
"creditor_name": "Widget Industries SA"
}]
}'
{
"valid": true,
"message_type": "pacs.008.001.13",
"errors": [],
"warnings": []
}
Пример синхронной генерации
Сгенерировать XML-файл pacs.008.001.13 из данных JSON.
curl -X POST http://localhost:8000/api/generate \
-H "Content-Type: application/json" \
-d '{
"message_type": "pacs.008.001.13",
"template": "pacs008/templates/pacs.008.001.13/template.xml",
"schema": "pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd",
"data": [{
"msg_id": "MSG-2026-001",
"creation_date_time": "2026-01-15T10:30:00",
"nb_of_txs": "1",
"settlement_method": "CLRG",
"interbank_settlement_date": "2026-01-15",
"end_to_end_id": "E2E-INV-2026-001",
"tx_id": "TX-001",
"interbank_settlement_amount": "25000.00",
"interbank_settlement_currency": "EUR",
"charge_bearer": "SHAR",
"debtor_name": "Acme Corp GmbH",
"debtor_agent_bic": "DEUTDEFF",
"creditor_agent_bic": "COBADEFF",
"creditor_name": "Widget Industries SA"
}]
}' --output pacs008_output.xml
Асинхронная генерация
Для больших файлов или использования в пайплайне отправьте асинхронное задание и опрашивайте статус до завершения.
# Submit the job
JOB=$(curl -s -X POST http://localhost:8000/api/generate/async \
-H "Content-Type: application/json" \
-d '{"message_type":"pacs.008.001.13","data":[...]}')
JOB_ID=$(echo $JOB | jq -r '.job_id')
# Poll for completion
curl http://localhost:8000/api/status/$JOB_ID
# Download the result
curl http://localhost:8000/api/download/$JOB_ID --output result.xml
{
"job_id": "8f7f0d4b-7df9-4d1a-8d47-19f4f28b6d38",
"status": "completed",
"message_type": "pacs.008.001.13",
"download_url": "/api/download/8f7f0d4b-7df9-4d1a-8d47-19f4f28b6d38"
}
CLI
Интерфейс командной строки принимает файл данных, версию сообщения, шаблон и схему. Он валидирует входные данные и записывает сгенерированный XML в выходной каталог.
Базовое использование
pacs008 -t \
-m \
-s \
-d
Пример
pacs008 -t pacs.008.001.13 \
-m pacs008/templates/pacs.008.001.13/template.xml \
-s pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd \
-d payments.csv
Режим проверки без генерации
Используйте --dry-run для валидации входных данных без генерации XML. Код возврата указывает, прошла ли валидация (0) или завершилась с ошибкой (1).
pacs008 -t pacs.008.001.13 \
-m pacs008/templates/pacs.008.001.13/template.xml \
-s pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd \
-d payments.csv \
--dry-run
Добавьте --verbose для подробного вывода в процессе генерации.
Python API
Используйте библиотеку непосредственно в Python-скриптах или сервисах.
Сгенерировать XML из списка платёжных записей
from pacs008 import generate_xml_string
payments = [{
"msg_id": "MSG-2026-001",
"creation_date_time": "2026-01-15T10:30:00",
"nb_of_txs": "1",
"settlement_method": "CLRG",
"interbank_settlement_date": "2026-01-15",
"end_to_end_id": "E2E-INV-2026-001",
"tx_id": "TX-001",
"interbank_settlement_amount": "25000.00",
"interbank_settlement_currency": "EUR",
"charge_bearer": "SHAR",
"debtor_name": "Acme Corp GmbH",
"debtor_agent_bic": "DEUTDEFF",
"creditor_agent_bic": "COBADEFF",
"creditor_name": "Widget Industries SA",
}]
xml = generate_xml_string(
payments,
"pacs.008.001.13",
"pacs008/templates/pacs.008.001.13/template.xml",
"pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd",
)
print(xml)
Проверка соответствия SWIFT
Валидировать и очистить данные по правилам набора символов и длины полей SWIFT перед генерацией.
from pacs008.compliance import cleanse_data_with_report
raw = [{"debtor_name": "Müller & Söhne™", "msg_id": "X" * 50}]
clean, report = cleanse_data_with_report(raw)
print(report.summary())
Docker
Запустите API в контейнере с помощью прилагаемого Dockerfile.
docker build -t pacs008:latest .
docker run -p 8000:8000 pacs008:latest
docker run --rm -e PACS008_LOG_LEVEL=INFO -v $PWD/examples:/data -p 8000:8000 pacs008:latest
Валидация IBAN и BIC
Проверяйте финансовые идентификаторы независимо от генерации XML.
from pacs008.validation import validate_iban, validate_bic
is_valid, error = validate_iban("DE89370400440532013000", strict=False)
is_valid, error = validate_bic("DEUTDEFF", strict=False)
Потоковая обработка
Загружайте большие наборы данных настраиваемыми порциями для ограничения использования памяти.
from pacs008.data.loader import load_payment_data_streaming
for chunk in load_payment_data_streaming("large_payments.csv", chunk_size=500):
print(f"Processing {len(chunk)} records")
from pacs008.validation import validate_batch
for chunk in load_payment_data_streaming("large_payments.csv", chunk_size=500):
report = validate_batch(chunk, "pacs.008.001.13")
print(report.summary())
Сервис валидации
Запускайте полный конвейер валидации перед генерацией программно.
from pacs008.validation import ValidationService, ValidationConfig
service = ValidationService()
report = service.validate_all(ValidationConfig(
xml_message_type="pacs.008.001.13",
xml_template_file_path="pacs008/templates/pacs.008.001.13/template.xml",
xsd_schema_file_path="pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd",
data_file_path="payments.csv",
))
print(report.is_valid, report.errors)
Обязательные поля данных
Каждая платёжная запись должна содержать следующие поля. Поля, специфичные для версий, отмечены там, где применимо.
| Поле | Описание | Ограничение |
|---|---|---|
msg_id | Идентификатор сообщения | Максимум 35 символов |
creation_date_time | Временная метка создания | Формат ISO 8601 |
nb_of_txs | Количество транзакций | Положительное целое число |
settlement_method | Метод расчёта | CLRG, INDA, COVE или INGA |
end_to_end_id | Сквозной идентификатор | Максимум 35 символов |
interbank_settlement_amount | Сумма межбанковского расчёта | Десятичное число, например `25000.00` |
interbank_settlement_currency | Валюта расчёта | Код ISO 4217 |
charge_bearer | Плательщик комиссий | DEBT, CRED, SHAR или SLEV |
debtor_name | Наименование дебитора | Максимум 140 символов |
debtor_agent_bic | BIC агента дебитора | 8 или 11 символов |
creditor_agent_bic | BIC агента кредитора | 8 или 11 символов |
creditor_name | Наименование кредитора | Максимум 140 символов |
Поля, специфичные для версий
| Поле | Описание | Ограничение |
|---|---|---|
uetr | Уникальная сквозная ссылка на транзакцию | Формат UUID — доступно начиная с v08 |
mandate_id | Идентификатор мандата | Доступно начиная с v10 |
expiry_date_time | Временная метка истечения срока сообщения | Доступно в v13 |