pacs008 API başvurusu pacs008 API başvurusu
Проєкт надає як REST API, так і CLI для операційних потоків обробки платіжних повідомлень.
Нотатки з впровадження Нотатки з впровадження
- Використовуйте синхронне генерування для операторських перевірок і невеликих пакетів, коли викликач очікує негайний XML-файл.
- Використовуйте асинхронне генерування, коли вхідні файли великі, потрібні повторні спроби або генерування є частиною ширшого оркестраційного процесу.
- Зберігайте і вихідні вхідні дані, і звіт валідації, щоб служба підтримки могла відтворити XML під час інциденту.
- Фіксуйте шляхи до шаблонів і XSD у конфігурації розгортання, щоб уникнути непомітних оновлень.
Встановлення Встановлення
Встановіть пакет із PyPI. Потрібен Python 3.9.2 або вище.
bash
python -m pip install pacs008REST API REST API
Запустіть вбудований сервер FastAPI для надання HTTP-ендпоінтів валідації та генерації.
Запустити сервер Запустити сервер
bash
uvicorn pacs008.api.app:app --reload --host 0.0.0.0 --port 8000Ендпоінти Ендпоінти
| Endpoint | Опис |
|---|---|
GET /health | Перевірка стану — повертає статус сервісу |
POST /validate | Валідувати платіжні дані за схемою без генерації XML |
POST /generate | Синхронно згенерувати XML і повернути файл |
POST /generate/async | Надіслати завдання на асинхронну генерацію |
GET /status/{job_id} | Опитати статус завдання за ідентифікатором |
GET /download/{job_id} | Завантажити згенерований XML після завершення завдання |
DELETE /jobs/{job_id} | Скасувати очікувану або виконувану задачу |
GET /docs | Інтерактивний Swagger UI для перегляду та тестування всіх ендпоінтів |
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.
bash
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"
}]
}'json
{
"valid": true,
"message_type": "pacs.008.001.13",
"errors": [],
"warnings": []
}Приклад синхронної генерації Приклад синхронної генерації
Згенерувати XML-файл pacs.008.001.13 із даних JSON.
bash
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Асинхронна генерація Асинхронна генерація
Для великих файлів або використання в пайплайні надішліть асинхронне завдання та опитуйте статус до завершення.
bash
# 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.xmljson
{
"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 CLI
Інтерфейс командного рядка приймає файл даних, версію повідомлення, шаблон і схему. Він валідує вхідні дані та записує згенерований XML у вихідний каталог.
Базове використання Базове використання
bash
pacs008 -t <message_type> \
-m <template_file> \
-s <schema_file> \
-d <data_file>Приклад Приклад
bash
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).
bash
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 API
Використовуйте бібліотеку безпосередньо в Python-скриптах або сервісах.
Згенерувати XML зі списку платіжних записів Згенерувати XML зі списку платіжних записів
python
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
Валідуйте та очищайте дані за правилами набору символів і довжини полів SWIFT перед генерацією.
python
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 Docker
Запустіть API у контейнері за допомогою наданого Dockerfile.
bash
docker build -t pacs008:latest .
docker run -p 8000:8000 pacs008:latestbash
docker run --rm -e PACS008_LOG_LEVEL=INFO -v $PWD/examples:/data -p 8000:8000 pacs008:latestВалідація IBAN та BIC Валідація IBAN та BIC
Перевіряйте фінансові ідентифікатори незалежно від генерації XML.
python
from pacs008.validation import validate_iban, validate_bic
is_valid, error = validate_iban("DE89370400440532013000", strict=False)
is_valid, error = validate_bic("DEUTDEFF", strict=False)Потокова обробка Потокова обробка
Завантажуйте великі набори даних налаштовуваними порціями для обмеження використання пам'яті.
python
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")python
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())Сервіс валідації Сервіс валідації
Запускайте повний конвеєр валідації перед генерацією програмно.
python
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 |