pacs008 API başvurusu
Проєкт надає як 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 |