From 66b1cc597159671c72a745b5b9807bc1d4a73d52 Mon Sep 17 00:00:00 2001 From: maximen Date: Tue, 24 Mar 2026 22:35:56 +0100 Subject: [PATCH 1/7] feat: add French documentation for product features and localization support --- docs/.vuepress/theme/util/index.js | 63 +- docs/fr/product/README.md | 5 + docs/fr/product/features/ComplexXB.svg | 4 + docs/fr/product/features/CrossBorder.md | 29 + .../FXAPI_Discovery.plantuml | 216 +++++ .../CurrencyConversion/FXAPI_Discovery.svg | 1 + .../FXAPI_Payer_Agreement.plantuml | 236 ++++++ .../FXAPI_Payer_Agreement.svg | 1 + .../FXAPI_Payer_CurrencyConversion.plantuml | 384 +++++++++ .../FXAPI_Payer_CurrencyConversion.svg | 1 + .../FXAPI_Payer_Receive_Agreement.plantuml | 241 ++++++ .../FXAPI_Payer_Receive_Agreement.svg | 1 + .../FXAPI_Payer_Receive_Discovery.plantuml | 112 +++ .../FXAPI_Payer_Receive_Discovery.svg | 1 + ..._Payer_Receive_SenderConfirmation.plantuml | 57 ++ ...FXAPI_Payer_Receive_SenderConfirmation.svg | 1 + ...FXAPI_Payer_Receive_TransferPhase.plantuml | 254 ++++++ .../FXAPI_Payer_Receive_TransferPhase.svg | 1 + .../FXAPI_Payer_SenderConfirmation.plantuml | 157 ++++ .../FXAPI_Payer_SenderConfirmation.svg | 1 + .../FXAPI_Payer_Transfer.plantuml | 466 +++++++++++ .../FXAPI_Payer_Transfer.svg | 1 + .../PAYER_SEND_Agreement.plantuml | 182 ++++ .../PAYER_SEND_Agreement.svg | 1 + .../PAYER_SEND_Confirmation.plantuml | 78 ++ .../PAYER_SEND_Confirmation.svg | 1 + .../PAYER_SEND_CurrencyConversion.plantuml | 193 +++++ .../PAYER_SEND_CurrencyConversion.svg | 1 + .../PAYER_SEND_Transfer.plantuml | 259 ++++++ .../PAYER_SEND_Transfer.svg | 1 + .../Payer_SEND_ABORT_TransferPhase.plantuml | 337 ++++++++ .../Payer_SEND_ABORT_TransferPhase.svg | 1 + .../Payer_SEND_Discovery.plantuml | 113 +++ .../Payer_SEND_Discovery.svg | 1 + .../features/CurrencyConversion/README.md | 9 + docs/fr/product/features/FXP.svg | 4 + docs/fr/product/features/ForeignExchange.md | 55 ++ .../features/InterconnectingSchemes.md | 36 + .../Interscheme-Agreement.plantuml | 72 ++ .../Interscheme/Interscheme-Agreement.svg | 1 + .../Interscheme-ErrorCases.plantuml | 114 +++ .../Interscheme/Interscheme-ErrorCases.svg | 1 + .../Interscheme-GETTransfer.plantuml | 57 ++ .../Interscheme/Interscheme-GETTransfer.svg | 1 + .../Interscheme-Happypath.plantuml | 106 +++ .../Interscheme/Interscheme-Happypath.svg | 1 + .../Interscheme-OnDemandDiscovery.plantuml | 140 ++++ .../Interscheme-OnDemandDiscovery.svg | 1 + ...rscheme-StalePartyIdentifierCache.plantuml | 90 ++ .../Interscheme-StalePartyIdentifierCache.svg | 1 + .../Interscheme/Interscheme-Transfer.plantuml | 80 ++ .../Interscheme/Interscheme-Transfer.svg | 1 + .../InterschemeAccounts-Clearing.png | Bin 0 -> 405605 bytes .../Interscheme/SettingUpProxys.plantuml | 31 + .../features/Interscheme/SettingUpProxys.svg | 1 + .../features/Iso20022/v1.0/Appendix.md | 54 ++ .../Iso20022/v1.0/IntegrationPatterns.md | 0 .../Iso20022/v1.0/MarketPracticeDocument.md | 241 ++++++ .../v1.0/SequenceDiagrams/Agreement.plantuml | 96 +++ .../v1.0/SequenceDiagrams/Agreement.svg | 1 + .../AgreementConversion.plantuml | 92 ++ .../SequenceDiagrams/AgreementConversion.svg | 1 + .../ConversionTransfer.plantuml | 88 ++ .../SequenceDiagrams/ConversionTransfer.svg | 1 + .../v1.0/SequenceDiagrams/Discovery.plantuml | 59 ++ .../v1.0/SequenceDiagrams/Discovery.svg | 1 + .../v1.0/SequenceDiagrams/Transfer.plantuml | 88 ++ .../v1.0/SequenceDiagrams/Transfer.svg | 1 + .../Iso20022/v1.0/script/fxquotes_POST.md | 783 ++++++++++++++++++ .../Iso20022/v1.0/script/fxquotes_PUT.md | 780 +++++++++++++++++ .../v1.0/script/fxquotes_error_PUT.md | 184 ++++ .../Iso20022/v1.0/script/fxtransfers_PATCH.md | 186 +++++ .../Iso20022/v1.0/script/fxtransfers_POST.md | 780 +++++++++++++++++ .../Iso20022/v1.0/script/fxtransfers_PUT.md | 102 +++ .../v1.0/script/fxtransfers_error_PUT.md | 182 ++++ .../Iso20022/v1.0/script/parties_GET.md | 16 + .../Iso20022/v1.0/script/parties_PUT.md | 680 +++++++++++++++ .../Iso20022/v1.0/script/parties_error_PUT.md | 679 +++++++++++++++ .../Iso20022/v1.0/script/quotes_POST.md | 635 ++++++++++++++ .../Iso20022/v1.0/script/quotes_PUT.md | 638 ++++++++++++++ .../Iso20022/v1.0/script/quotes_error_PUT.md | 184 ++++ .../Iso20022/v1.0/script/transfers_PATCH.md | 184 ++++ .../Iso20022/v1.0/script/transfers_POST.md | 627 ++++++++++++++ .../Iso20022/v1.0/script/transfers_PUT.md | 103 +++ .../v1.0/script/transfers_error_PUT.md | 183 ++++ ...oduction_Readiness_Technical_Assessment.md | 32 + .../fr/product/features/SimpleInterscheme.svg | 4 + docs/fr/product/features/Test.png | Bin 0 -> 272873 bytes docs/fr/product/features/XB.svg | 4 + docs/fr/product/features/connectivity.md | 50 ++ .../connectivity/images/ITK_architecture.png | Bin 0 -> 225147 bytes .../images/PM4ML_system_architecture.png | Bin 0 -> 48899 bytes .../connectivity/participant-matrix.md | 180 ++++ .../participation_tools_mini_guides.md | 133 +++ docs/fr/product/features/deployment.md | 27 + .../product/features/deployment/deploying.md | 237 ++++++ docs/fr/product/features/deployment/tools.md | 138 +++ docs/fr/product/features/development.md | 49 ++ docs/fr/product/features/ecosystem.svg | 1 + docs/fr/product/features/engineering.md | 71 ++ docs/fr/product/features/fx.md | 160 ++++ docs/fr/product/features/htlc.md | 41 + docs/fr/product/features/interscheme.md | 86 ++ docs/fr/product/features/invariants.md | 181 ++++ docs/fr/product/features/iso20022.md | 34 + docs/fr/product/features/merchant-payments.md | 37 + docs/fr/product/features/metadata.md | 22 + docs/fr/product/features/ml-feature-list.md | 116 +++ .../features/mojaloop_security_layers.jpg | Bin 0 -> 167614 bytes docs/fr/product/features/performance.md | 30 + docs/fr/product/features/product.md | 149 ++++ docs/fr/product/features/risk.md | 31 + docs/fr/product/features/security.md | 91 ++ docs/fr/product/features/tariffs.md | 57 ++ docs/fr/product/features/transaction.md | 91 ++ docs/fr/product/features/use-cases.md | 102 +++ docs/fr/product/features/workstreams/core.md | 39 + .../features/workstreams/deployment.md | 31 + .../product/features/workstreams/dispute.md | 31 + .../product/features/workstreams/evolution.md | 41 + .../workstreams/fintech_participation.md | 31 + .../product/features/workstreams/iso20022.md | 28 + docs/fr/product/features/workstreams/lei.md | 31 + .../features/workstreams/participation.md | 31 + .../features/workstreams/performance.md | 31 + docs/fr/product/features/workstreams/pqs.md | 29 + docs/fr/product/features/workstreams/qa.md | 34 + 127 files changed, 14359 insertions(+), 4 deletions(-) create mode 100644 docs/fr/product/README.md create mode 100644 docs/fr/product/features/ComplexXB.svg create mode 100644 docs/fr/product/features/CrossBorder.md create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.svg create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.svg create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.svg create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.svg create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.svg create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.svg create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.svg create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.svg create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.svg create mode 100644 docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.svg create mode 100644 docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.svg create mode 100644 docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.svg create mode 100644 docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.svg create mode 100644 docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.svg create mode 100644 docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.plantuml create mode 100644 docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.svg create mode 100644 docs/fr/product/features/CurrencyConversion/README.md create mode 100644 docs/fr/product/features/FXP.svg create mode 100644 docs/fr/product/features/ForeignExchange.md create mode 100644 docs/fr/product/features/InterconnectingSchemes.md create mode 100644 docs/fr/product/features/Interscheme/Interscheme-Agreement.plantuml create mode 100644 docs/fr/product/features/Interscheme/Interscheme-Agreement.svg create mode 100644 docs/fr/product/features/Interscheme/Interscheme-ErrorCases.plantuml create mode 100644 docs/fr/product/features/Interscheme/Interscheme-ErrorCases.svg create mode 100644 docs/fr/product/features/Interscheme/Interscheme-GETTransfer.plantuml create mode 100644 docs/fr/product/features/Interscheme/Interscheme-GETTransfer.svg create mode 100644 docs/fr/product/features/Interscheme/Interscheme-Happypath.plantuml create mode 100644 docs/fr/product/features/Interscheme/Interscheme-Happypath.svg create mode 100644 docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.plantuml create mode 100644 docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.svg create mode 100644 docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.plantuml create mode 100644 docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.svg create mode 100644 docs/fr/product/features/Interscheme/Interscheme-Transfer.plantuml create mode 100644 docs/fr/product/features/Interscheme/Interscheme-Transfer.svg create mode 100644 docs/fr/product/features/Interscheme/InterschemeAccounts-Clearing.png create mode 100644 docs/fr/product/features/Interscheme/SettingUpProxys.plantuml create mode 100644 docs/fr/product/features/Interscheme/SettingUpProxys.svg create mode 100644 docs/fr/product/features/Iso20022/v1.0/Appendix.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/IntegrationPatterns.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/MarketPracticeDocument.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.plantuml create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.svg create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.plantuml create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.svg create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.plantuml create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.svg create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.plantuml create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.svg create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.plantuml create mode 100644 docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.svg create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/fxquotes_POST.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/fxquotes_PUT.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/fxquotes_error_PUT.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_PATCH.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_POST.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_PUT.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_error_PUT.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/parties_GET.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/parties_PUT.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/parties_error_PUT.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/quotes_POST.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/quotes_PUT.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/quotes_error_PUT.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/transfers_PATCH.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/transfers_POST.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/transfers_PUT.md create mode 100644 docs/fr/product/features/Iso20022/v1.0/script/transfers_error_PUT.md create mode 100644 docs/fr/product/features/Production_Readiness_Technical_Assessment.md create mode 100644 docs/fr/product/features/SimpleInterscheme.svg create mode 100644 docs/fr/product/features/Test.png create mode 100644 docs/fr/product/features/XB.svg create mode 100644 docs/fr/product/features/connectivity.md create mode 100644 docs/fr/product/features/connectivity/images/ITK_architecture.png create mode 100644 docs/fr/product/features/connectivity/images/PM4ML_system_architecture.png create mode 100644 docs/fr/product/features/connectivity/participant-matrix.md create mode 100644 docs/fr/product/features/connectivity/participation_tools_mini_guides.md create mode 100644 docs/fr/product/features/deployment.md create mode 100644 docs/fr/product/features/deployment/deploying.md create mode 100644 docs/fr/product/features/deployment/tools.md create mode 100644 docs/fr/product/features/development.md create mode 100644 docs/fr/product/features/ecosystem.svg create mode 100644 docs/fr/product/features/engineering.md create mode 100644 docs/fr/product/features/fx.md create mode 100644 docs/fr/product/features/htlc.md create mode 100644 docs/fr/product/features/interscheme.md create mode 100644 docs/fr/product/features/invariants.md create mode 100644 docs/fr/product/features/iso20022.md create mode 100644 docs/fr/product/features/merchant-payments.md create mode 100644 docs/fr/product/features/metadata.md create mode 100644 docs/fr/product/features/ml-feature-list.md create mode 100644 docs/fr/product/features/mojaloop_security_layers.jpg create mode 100644 docs/fr/product/features/performance.md create mode 100644 docs/fr/product/features/product.md create mode 100644 docs/fr/product/features/risk.md create mode 100644 docs/fr/product/features/security.md create mode 100644 docs/fr/product/features/tariffs.md create mode 100644 docs/fr/product/features/transaction.md create mode 100644 docs/fr/product/features/use-cases.md create mode 100644 docs/fr/product/features/workstreams/core.md create mode 100644 docs/fr/product/features/workstreams/deployment.md create mode 100644 docs/fr/product/features/workstreams/dispute.md create mode 100644 docs/fr/product/features/workstreams/evolution.md create mode 100644 docs/fr/product/features/workstreams/fintech_participation.md create mode 100644 docs/fr/product/features/workstreams/iso20022.md create mode 100644 docs/fr/product/features/workstreams/lei.md create mode 100644 docs/fr/product/features/workstreams/participation.md create mode 100644 docs/fr/product/features/workstreams/performance.md create mode 100644 docs/fr/product/features/workstreams/pqs.md create mode 100644 docs/fr/product/features/workstreams/qa.md diff --git a/docs/.vuepress/theme/util/index.js b/docs/.vuepress/theme/util/index.js index 3e89476bf..a80e60405 100644 --- a/docs/.vuepress/theme/util/index.js +++ b/docs/.vuepress/theme/util/index.js @@ -232,6 +232,9 @@ export function versionifyUserNav (navConfig, currentPage, currentVersion, local }) } +/** Doc paths under these prefixes reuse the default-locale sidebar keys; base is rewritten for resolvePath. */ +const SIDEBAR_LOCALE_PREFIXES = ['/fr'] + /** * @param { Route } route * @param { Array | Array | [link: string]: SidebarConfig } config @@ -252,6 +255,26 @@ export function resolveMatchingConfig (regularPath, config) { } } } + for (const localePrefix of SIDEBAR_LOCALE_PREFIXES) { + const atLocaleRoot = + regularPath === localePrefix || + regularPath === `${localePrefix}/` + const underLocale = regularPath.startsWith(`${localePrefix}/`) + if (!atLocaleRoot && !underLocale) { + continue + } + const rest = regularPath.slice(localePrefix.length) + const pathWithoutLocale = + !rest || rest === '/' ? '/' : rest.startsWith('/') ? rest : `/${rest}` + for (const base in config) { + if (ensureEndingSlash(pathWithoutLocale).indexOf(base) === 0) { + return { + base: `${localePrefix}${base}`, + config: config[base] + } + } + } + } return {} } @@ -261,18 +284,50 @@ function ensureEndingSlash (path) { : path + '/' } +function isSidebarLocaleBase (base) { + if (!base) { + return false + } + return SIDEBAR_LOCALE_PREFIXES.some( + prefix => base === `${prefix}/` || base.startsWith(`${prefix}/`) + ) +} + +/** + * For localized doc trees (e.g. /fr/...), prefer each page's title or frontmatter.sidebarTitle + * over the English label from themeConfig. + */ +function sidebarTitleForResolvedPage (resolved, base, fallbackTitle) { + if (resolved.type !== 'page') { + return fallbackTitle + } + const fm = resolved.frontmatter || {} + if (fm.sidebarTitle != null && fm.sidebarTitle !== '') { + return fm.sidebarTitle + } + if (isSidebarLocaleBase(base)) { + return resolved.title || fallbackTitle + } + if (fallbackTitle != null && fallbackTitle !== '') { + return fallbackTitle + } + return resolved.title +} + function resolveItem (item, pages, base, groupDepth = 1) { if (typeof item === 'string') { return resolvePage(pages, item, base) } else if (Array.isArray(item)) { - return Object.assign(resolvePage(pages, item[0], base), { - title: item[1] + const resolved = resolvePage(pages, item[0], base) + return Object.assign(resolved, { + title: sidebarTitleForResolvedPage(resolved, base, item[1]) }) } else { const children = item.children || [] if (children.length === 0 && item.path) { - return Object.assign(resolvePage(pages, item.path, base), { - title: item.title + const resolved = resolvePage(pages, item.path, base) + return Object.assign(resolved, { + title: sidebarTitleForResolvedPage(resolved, base, item.title) }) } return { diff --git a/docs/fr/product/README.md b/docs/fr/product/README.md new file mode 100644 index 000000000..e11a306d8 --- /dev/null +++ b/docs/fr/product/README.md @@ -0,0 +1,5 @@ +# Bienvenue dans la documentation produit Mojaloop + +Cette section est consacrée à la documentation produit de Mojaloop : elle présente, du point de vue métier, l’ensemble des fonctionnalités, les API, le raccordement des DFSP, la mise en place de schémas de paiement marchands basés sur Mojaloop, les transactions transfrontalières, ISO 20022, etc. — en somme, tout ce qu’un adoptant potentiel doit savoir pour concevoir la forme de son schéma. Elle ne couvre pas le détail technique ou d’ingénierie, disponible ailleurs sur ce site. + +Elle reflète les travaux de la communauté open source Mojaloop sur plusieurs années. Si vous souhaitez contribuer à l’avenir de Mojaloop, rejoignez les échanges sur le canal Slack #product-council et sur Community Central (https://community.mojaloop.io/). diff --git a/docs/fr/product/features/ComplexXB.svg b/docs/fr/product/features/ComplexXB.svg new file mode 100644 index 000000000..4e87239dd --- /dev/null +++ b/docs/fr/product/features/ComplexXB.svg @@ -0,0 +1,4 @@ + + + +
Jurisdiction B
Jurisdiction B
Jurisdiction A
Jurisdiction A
Scheme 1
Scheme 1
Scheme 2
Scheme 2
DFSP 2
DFSP 2
Proxy
Proxy
FXP 1
FXP 1
FXP 3
FXP 3
FXP 2
FXP 2
Proxy
Proxy
Existing Scheme 1.1
Existing Scheme 1.1
DFSP 1
DFSP 1
DFSP 3
DFSP 3
\ No newline at end of file diff --git a/docs/fr/product/features/CrossBorder.md b/docs/fr/product/features/CrossBorder.md new file mode 100644 index 000000000..0429d813f --- /dev/null +++ b/docs/fr/product/features/CrossBorder.md @@ -0,0 +1,29 @@ +--- +sidebarTitle: Transactions transfrontalières +--- + +# Transactions transfrontalières + +*Cette page suppose que le lecteur connaît les [**capacités inter-schémas**](./InterconnectingSchemes.md) de Mojaloop et le fonctionnement du [**change**](./ForeignExchange.md).* + +La version actuelle de Mojaloop considère une transaction transfrontalière comme une opération qui quitte un schéma de paiement pour être transmise à un autre relevant d’une juridiction réglementaire différente. Il s’agit donc, en termes Mojaloop, d’une transaction inter-schémas incluant une opération de change. + +Le schéma suivant illustre la mise en œuvre de cette fonctionnalité. + +![Transactions transfrontalières](./XB.svg) + +Dans ce contexte, un proxy fait le lien entre deux schémas Mojaloop opérant dans des pays (juridictions) distincts, en facilitant les transactions et en assurant la non-répudiation de bout en bout. Plusieurs FXP sont représentés — deux dans la juridiction A et un dans la juridiction B — afin de couvrir les différents modèles économiques envisageables pour les opérations de change. + +Ce modèle peut être étendu pour interconnecter des systèmes nationaux de paiement instantané déjà existants, comme suit : + +![Interconnexion de schémas nationaux pour des transactions transfrontalières](./ComplexXB.svg) + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|22 avril 2025| Paul Makin|Ajout de l’historique des versions ; précisions rédactionnelles| +|1.0|14 avril 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.plantuml new file mode 100644 index 000000000..2e20cd471 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.plantuml @@ -0,0 +1,216 @@ +@startuml FXAPI_Discovery + +!$simplified = false +!$shortCutSingleFXP = false +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = false +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f1654415e8fcddf76cc" +!$conversionId = "581f68efb54f416f9161ac34e8" +!$homeTransactionId = "string" +!$quoteId = "382987a875ce4037b500c475e0" +!$transactionId = "d9ce59d4359843968630581bb0" +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26a44748b3c99b96a" +!$determiningTransferId = "d9ce59d4359843968630581bb0" +!$transferId = "d9ce59d4359843968630581bb0" +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + +title Discovery - Mojaloop Connector Integration +actor "$senderName" as A1 + participant "Payer CBS" as PayerCBS +box "Payer DFSP" #LightBlue + participant "Core Connector" as PayerCC + participant "Payer\nMojaloop\nConnector" as D1 +end box + +participant "Mojaloop Switch" as S1 + +box "Discovery Service" #LightYellow + participant "ALS Oracle" as ALS +end box + +'box "FX provider" +' participant "FXP\nConnector" as FXP +' participant "Backend FX API" as FXPBackend +'end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 + participant "Core Connector" as PayeeCC +end box + +'actor "$receiverName" as A2 +autonumber + +A1->PayerCBS:I'd like to pay $receiverName\n$payerSendAmount $payerCurrency, please +PayerCBS->PayerCC: Initiate remittance transfer +!if ($advancedCoreConnectorFlow != true) + PayerCC->D1: **POST /transfers** + !if ($simplified != true) + note left + { + "homeTransactionId": "$homeTransactionId", + "from": { + "dateOfBirth": "$senderDOB", + "displayName": "$senderName", + "firstName": "$senderFirstName", + "middleName": "$senderMiddleName", + "lastName": "$senderLastName" + "fspId": "$payerFSPID", + "idType": "MSISDN", + "idValue": "$payerMSISDN" + }, + "to": { + "idType": "MSISDN", + "idValue": "$payeeMSISDN" + }, + "amountType": "SEND", + "currency": "$payerCurrency", + "amount": "$payerSendAmount" + } + end note + !endif +!else +PayerCC->D1: **GET /parties/MSISDN/$payeeMSISDN** +!endif + +activate D1 +D1->>S1:I want to send to MSISDN $payeeMSISDN\n**GET /parties/MSISDN/$payeeMSISDN** +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +S1->ALS:Who owns MSISDN $payeeMSISDN? +activate ALS +ALS-->S1:It's $payeeFSPID +deactivate ALS +S1->>D2:Do you own MSISDN $payeeMSISDN? +activate D2 +!if ($simplified != true) +D2-->>S1:202 I'll get back to you +deactivate S1 +!endif +D2->PayeeCC: **GET** /parties +PayeeCC->PayeeCC: Validate whether the party \n can receive the transfer +PayeeCC->PayeeCC: Check account and\n get currency type +!if ($simplified != true) +PayeeCC-->D2: Result +!endif +deactivate S1 +D2->>S1:Yes, it's $receiverName.\n He can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +!if ($simplified != true) +note right + PUT /parties + { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN", + "fspId": "$payeeFSPID" + }, + "name": "$receiverName" + }, + "supportedCurrencies": [ "$payeeCurrency" ] + } +end note +!else +!endif +activate S1 +!if ($simplified != true) +S1-->>D2:200 Gotcha +!endif +deactivate D2 +S1->>D1:Yes, it's $receiverName. \nHe can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +!if ($simplified != true) +D1-->>S1:200 Gotcha +!endif +deactivate S1 + +!if ($advancedCoreConnectorFlow != true) + D1-->PayerCC: Here is the party information\nand supported currencies + note right + { + "transferId": "$transferId", + "homeTransactionId": "$homeTransactionId", + "from": { + "displayName": "$senderName", + "fspId": "$payerFSPID", + "idType": "MSISDN", + "idValue": "$payerMSISDN" + }, + "to": { + "type": "CONSUMER", + "idType": "MSISDN", + "idValue": "$payeeMSISDN", + "displayName": "$receiverName", + "fspId": "$payeeFSPID" + "supportedCurrencies": [ "$payeeCurrency" ] + }, + "amountType": "SEND", + "currency": "$payerCurrency", + "amount": "$payerSendAmount" + "currentState": "**WAITING_FOR_PARTY_ACCEPTANCE**", + "getPartiesResponse": { + "body": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN", + "fspId": "$payeeFSPID" + }, + "name": "$receiverName", + "supportedCurrencies": [ "$payeeCurrency" ] + } + } + } + end note +!else + D1-->PayerCC: Here is the party information\nand supported currencies + !if ($simplified != true) + note right of PayerCC + { + "party": { + "body": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN", + "fspId": "$payeeFSPID" + }, + "name": "$receiverName", + "supportedCurrencies": [ "$payeeCurrency" ] + } + }, + "currentState": "COMPLETED" + } + end note + !endif +!endif +deactivate D1 +PayerCC-->PayerCBS:Here's are the \nreceiver details +PayerCBS->A1:Hi, $senderName: \nThe number belongs to $receiverName \nLet me know if you want to\n go ahead +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.svg new file mode 100644 index 000000000..c1b690c59 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.svg @@ -0,0 +1 @@ +Discovery - Mojaloop Connector IntegrationPayer DFSPDiscovery ServicePayee DFSPJohnJohnPayer CBSPayer CBSCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchALS OracleALS OraclePayeeMojaloopConnectorPayeeMojaloopConnectorCore ConnectorCore Connector1I'd like to pay Yaro300 BWP, please2Initiate remittance transfer3POST /transfers{"homeTransactionId": "string","from": {"dateOfBirth": "1966-06-16","displayName": "John","firstName": "$senderFirstName","middleName": "$senderMiddleName","lastName": """fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"idType": "MSISDN","idValue": "2551234567890"},"amountType": "SEND","currency": "BWP","amount": "300"}4I want to send to MSISDN 2551234567890GET /parties/MSISDN/25512345678905202 I'll get back to you6Who owns MSISDN 2551234567890?7It's PayeeFSP8Do you own MSISDN 2551234567890?9202 I'll get back to you10GET/parties11Validate whether the partycan receive the transfer12Check account andget currency type13Result14Yes, it's Yaro.He can receive in TZSPUT /parties/MSISDN/2551234567890PUT /parties{"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro"},"supportedCurrencies": [ "TZS" ]}15200 Gotcha16Yes, it's Yaro.He can receive in TZSPUT /parties/MSISDN/255123456789017200 Gotcha18Here is the party informationand supported currencies{"transferId": "d9ce59d4359843968630581bb0","homeTransactionId": "string","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"type": "CONSUMER","idType": "MSISDN","idValue": "2551234567890","displayName": "Yaro","fspId": "PayeeFSP""supportedCurrencies": [ "TZS" ]},"amountType": "SEND","currency": "BWP","amount": "300""currentState": "WAITING_FOR_PARTY_ACCEPTANCE","getPartiesResponse": {"body": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro","supportedCurrencies": [ "TZS" ]}}}19Here's are thereceiver details20Hi, John:The number belongs to YaroLet me know if you want togo ahead \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.plantuml new file mode 100644 index 000000000..9f71b0acb --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.plantuml @@ -0,0 +1,236 @@ +@startuml FXAPI_Payer_Agreement + +!$simplified = false +!$shortCutSingleFXP = false +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = false +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f1654415..." +!$conversionId = "581f68efb54f41..." +!$homeTransactionId = "string" +!$quoteId = "382987a875ce403..." +!$transactionId = "d9ce59d43598439..." +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26a44748b3c99b96a" +!$determiningTransferId = "d9ce59d4359843..." +!$transferId = "d9ce59d43598439..." +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + +title Agreement Phase - Mojaloop Connector Integration +'actor "$senderName" as A1 +' participant "Payer CBS" as PayerCBS +box "Payer DFSP" #LightBlue + participant "Core Connector" as PayerCC + participant "Payer\nMojaloop\nConnector" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +'box "FX provider" +' participant "FXP\nConnector" as FXP +' participant "Backend FX API" as FXPBackend +'end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 + participant "Core Connector" as PayeeCC +end box + +'actor "$receiverName" as A2 +autonumber + +!if ($advancedCoreConnectorFlow != true) +PayerCC->D1: I want to get a quote from the FSP\n**PUT /transfers** +note left +{"acceptConversion": true} +end note +!else +PayerCC->D1: I want to get a quote from the FSP\n**POST /quotes** + !if ($simplified != true) + note right of PayerCC + { + "fspId": "$payeeFSPID", + "quotesPostRequest": { + "quoteId": "$quoteId", + "transactionId": "$transactionId", + "payee": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN", + "fspId": "$payeeFSPID" + }, + "name": "$receiverName", + "supportedCurrencies": [ "$payeeCurrency" ] + }, + "payer": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payerMSISDN", + "fspId": "$payerFSPID" + }, + "name": "$senderName", + }, + "amountType": "SEND", + "amount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount" + }, + "converter": "PAYER", + "expiration": "$quotePayerExpiration" + } + } + end note + !endif +!endif + + +D1->>S1:Please quote for a transfer which \nsends $fxpTargetAmount $payeeCurrency.\n**POST /quotes** +!if ($simplified != true) +note left +**POST /quotes** +{ + "quoteId": "$quoteId", + "transactionId": "$transactionId", + "payee": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN", + "fspId": "$payeeFSPID"}, + "name": "$receiverName", + "supportedCurrencies": [ "$payeeCurrency" ] }, + "payer": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payerMSISDN", + "fspId": "$payerFSPID"}, + "name": "$senderName"}, + "amountType": "SEND", + "amount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "converter": "PAYER", + "expiration": "$quotePayerExpiration" +} +end note +!endif +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif + +S1->>D2:**POST /quotes** +activate D2 +!if ($simplified != true) +D2-->>S1:202 I'll get back to you +!endif +deactivate S1 +D2->PayeeCC:**POST /quoterequests** +!if ($simplified != true) +note left +**POST /quoterequests** +{ + "quoteId": "$quoteId", + "transactionId": "$transactionId", + "payee": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN", + "fspId": "$payeeFSPID"}, + "name": "$receiverName", + "supportedCurrencies": [ "$payeeCurrency" ]}, + "payer": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payerMSISDN", + "fspId": "$payerFSPID"}, + "name": "$senderName"}, + "amountType": "SEND", + "amount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "converter": "PAYER", + "expiration": "$quotePayerExpiration" +} +end note +!endif +PayeeCC->PayeeCC:OK, so I will charge $payeeFee $payeeCurrency for this.\nNow I create terms of the transfer +PayeeCC-->D2:Here are the terms +!if ($simplified != true) +note right +**POST /quoterequests** response +{ + "quoteId": "$quoteId", + "transactionId": "$transactionId", + "payeeFspFeeAmount": "$payeeFee", + "payeeFspFeeAmountCurrency": "$payeeCurrency", + "payeeReceiveAmount": "$payeeReceiveAmount", + "payeeReceiveAmountCurrency": "$payeeCurrency", + "transferAmount": "$targetAmount", + "transferAmountCurrency": "$payeeCurrency" + "expiration": "$quotePayerExpiration" +} +end note +!endif +D2->D2:Now I will sign the transaction object +D2->>S1:Here's the signed quote +note right +**put /quotes/$quoteId** +{ + "transferAmount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount"}, + "payeeReceiveAmount": { + "currency": "$payeeCurrency", + "amount": "$payeeReceiveAmount"}, + "payeeFspFee": { + "currency": "$payeeCurrency", + "amount": "$payeeFee"}, + "expiration": "$payeeQuoteExpiration", + "ilpPacket": "", + "condition": "$condition" +} + +end note +activate S1 +!if ($simplified != true) +S1-->>D2:200 Gotcha +!endif +deactivate D2 +S1->>D1:Here's the signed quote\n**PUT /quotes/$quoteId** +activate D1 +!if ($simplified != true) +D1-->>S1:200 Gotcha +!endif +deactivate S1 +D1->D1:OK, I can see that there \nare going to be $payeeFee $payeeCurrency in charges. +@enduml diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.svg new file mode 100644 index 000000000..b9d56798d --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.svg @@ -0,0 +1 @@ +Agreement Phase - Mojaloop Connector IntegrationPayer DFSPPayee DFSPCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchPayeeMojaloopConnectorPayeeMojaloopConnectorCore ConnectorCore Connector1I want to get a quote from the FSPPUT /transfers{"acceptConversion": true}2Please quote for a transfer whichsends 48000 TZS.POST /quotesPOST /quotes{"quoteId": "382987a875ce403...","transactionId": "d9ce59d43598439...","payee": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro","supportedCurrencies": [ "TZS" ] },"payer": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321","fspId": "PayerFSP"},"name": "John"},"amountType": "SEND","amount": {"currency": "TZS","amount": "48000"},"converter": "PAYER","expiration": "2021-08-25T14:17:09.663+01:00"}3202 I'll get back to you4POST /quotes5202 I'll get back to you6POST /quoterequestsPOST /quoterequests{"quoteId": "382987a875ce403...","transactionId": "d9ce59d43598439...","payee": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro","supportedCurrencies": [ "TZS" ]},"payer": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321","fspId": "PayerFSP"},"name": "John"},"amountType": "SEND","amount": {"currency": "TZS","amount": "48000"},"converter": "PAYER","expiration": "2021-08-25T14:17:09.663+01:00"}7OK, so I will charge 4000 TZS for this.Now I create terms of the transfer8Here are the termsPOST /quoterequestsresponse{"quoteId": "382987a875ce403...","transactionId": "d9ce59d43598439...","payeeFspFeeAmount": "4000","payeeFspFeeAmountCurrency": "TZS","payeeReceiveAmount": "44000","payeeReceiveAmountCurrency": "TZS","transferAmount": "48000","transferAmountCurrency": "TZS""expiration": "2021-08-25T14:17:09.663+01:00"}9Now I will sign the transaction object10Here's the signed quoteput /quotes/382987a875ce403...{"transferAmount": {"currency": "TZS","amount": "48000"},"payeeReceiveAmount": {"currency": "TZS","amount": "44000"},"payeeFspFee": {"currency": "TZS","amount": "4000"},"expiration": "$payeeQuoteExpiration","ilpPacket": "<This is encoded transaction object.>","condition": "HOr22-H3AfTDHrSkP..."} 11200 Gotcha12Here's the signed quotePUT /quotes/382987a875ce403...13200 Gotcha14OK, I can see that thereare going to be 4000 TZS in charges. \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.plantuml new file mode 100644 index 000000000..994fc0f2d --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.plantuml @@ -0,0 +1,384 @@ +@startuml FXAPI_Payer_CurrencyConversion + +!$simplified = false +!$shortCutSingleFXP = false +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = false +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f1654415e8fcddf76cc" +!$conversionId = "581f68efb54f416f9161ac34e8" +!$homeTransactionId = "string" +!$quoteId = "382987a875ce4037b500c475e0" +!$transactionId = "d9ce59d4359843968630581bb0" +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26a44748b3c99b96a" +!$determiningTransferId = "d9ce59d4359843968630581bb0" +!$transferId = "d9ce59d4359843968630581bb0" +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + +title Agreement Phase Currency Conversion - Mojaloop Connector Integration +actor "$senderName" as A1 +participant "Payer CBS" as PayerCBS +box "Payer DFSP" #LightBlue + participant "Core Connector" as PayerCC + participant "Payer\nMojaloop\nConnector" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +box "FX provider" + participant "FXP\nConnector" as FXP + participant "Backend FX API \n(Core Connector)" as FXPBackend +end box + +'box "Payee DFSP" #LightBlue +' participant "Payee\nMojaloop\nConnector" as D2 +' participant "Core Connector" as PayeeCC +'end box + +'actor "$receiverName" as A2 +autonumber + +A1->PayerCBS:Yes please, go ahead +PayerCBS->PayerCC: Payer has accepted\n the party information + +!if ($shortCutSingleFXP != true) + +!if ($advancedCoreConnectorFlow != true) +PayerCC->>D1:Get quotation\n**PUT /transfers/$transferId** +note left +{ "acceptParty": true } +end note +D1->D1:Hmmm. I can only send in $payerCurrency.\nI need to get some currency conversion +!else +PayerCC->PayerCC:Hmmm. I can only send in $payerCurrency.\nI need to get some currency conversion +PayerCC->>PayerCC:Lookup the local cached FXPs\n that can provide the conversion +!endif + +D1->>D1:Lookup the local cached FXPs\n that can provide the conversion + + +!if ($advancedCoreConnectorFlow != true) +' TODO: We can pause the execution here if required to allow the core connector to select the FXP +D1->D1:I'll ask FDH FX to perform my conversion +!else +D1->>PayerCC:Here are the available FXPs +note right of PayerCC + { + "providers": [ + "$fxpID" + ] + } +end note + +PayerCC->PayerCC:I'll ask FDH FX to perform my conversion +PayerCC->D1: I want to get a quote from this FXP\n**POST /fxQuotes** + !if ($simplified != true) + note right of PayerCC + { + "homeTransactionId": "$homeTransactionId", + "conversionRequestId": "$conversionRequestId", + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$payerSendAmount" + }, + "targetAmount": { + "currency": "$payeeCurrency" + }, + "expiration": "2021-08-25T14:17:09.663+01:00" + } + } + end note + !endif +!endif +!endif + +deactivate S1 + +!if ($shortCutSingleFXP != true) +D1->>S1:Here is the initial version of the transfer.\nPlease quote me for the currency conversion. +!else +D1->>FXP:Here is the initial version of the transfer.\nPlease quote me for the currency conversion. +!endif +note left + **post /fxQuotes** + { + "conversionRequestId": "$conversionRequestId", + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$payerSendAmount"}, + "targetAmount": { + "currency": "$payeeCurrency"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + } + } +end note +!if ($shortCutSingleFXP != true) +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +deactivate D1 +S1->>FXP:Here is the initial version of the transfer.\nPlease quote me for the currency conversion.\n**POST /fxQuote** +activate FXP +!if ($simplified != true) +FXP-->>S1:202 I'll get back to you +!endif +deactivate S1 +!else +!if ($simplified != true) +FXP-->>D1:202 I'll get back to you +!endif +!endif +FXP->FXPBackend:Lookup FX rate +!if ($simplified != true) +note left + **post /fxQuotes** + { + "conversionRequestId": "$conversionRequestId", + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$payerSendAmount"}, + "targetAmount": { + "currency": "$payeeCurrency"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + } + } +end note +!endif +note over FXPBackend + I will add a $fxpChargesSource $payerCurrency fee for undertaking the conversion. + Now I'll set an expiry time, sign the quotation object, +end note +FXPBackend-->FXP:Return FX rate +!if ($simplified != true) +note right + **post /fxQuotes** response + { + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [ + { + "chargeType": "string", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpChargesSource"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpChargesTarget"} + }]} + } +end note +!endif + +note over FXP + Now I'll sign the quotation object, + create an ILP prepare packet and return it in the intermediary object. + + **NOTE:** the ILP prepare packet contains the following items, all encoded: + - The amount being sent (i.e. in the source currency) + - An expiry time + - The condition + - The name of the FXP + - The content of the conversion terms +end note + +!if ($shortCutSingleFXP != true) +FXP->>S1:Here's the signed conversion object +note right + **PUT /fxQuotes/$conversionRequestId** + { + "condition": "$fxCondition", + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [ + { + "chargeType": "string", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpChargesSource"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpChargesTarget"} + }]} + } +end note +activate S1 +!if ($simplified != true) +S1-->>FXP:200 Gotcha +!endif +deactivate FXP +S1->>D1:Here's the signed conversion object\n**PUT /fxQuotes/$conversionRequestId** +activate D1 +!if ($simplified != true) +D1-->>S1:Gotcha +!endif +deactivate S1 +!else +FXP-->>D1:Here's the signed conversion object\n**PUT /fxQuotes/$conversionRequestId** +!if ($simplified != true) +D1-->>FXP:202 I'll get back to you +!endif +activate D1 +!endif + + +!if ($advancedCoreConnectorFlow != true) + D1-->PayerCC: Here are the conversion terms + note right + **POST/PUT /transfers** response + { + "transferId": "$transferId", + "homeTransactionId": "$homeTransactionId", + "from": { + "displayName": "$senderName", + "fspId": "$payerFSPID", + "idType": "MSISDN", + "idValue": "$payerMSISDN"}, + "to": { + "type": "CONSUMER", + "idType": "MSISDN", + "idValue": "$payeeMSISDN", + "displayName": "$receiverName", + "fspId": "$payeeFSPID" + "supportedCurrencies": [ "$payeeCurrency" ]}, + "amountType": "SEND", + "currency": "$payerCurrency", + "amount": "$payerSendAmount" + "currentState": "**WAITING_FOR_CONVERSION_ACCEPTANCE**", + "getPartiesResponse": {}, + "conversionRequestId": "$conversionRequestId", + "fxQuotesResponse": { + "body": { + "condition": "$fxCondition", + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [{ + "chargeType": "string", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpChargesSource"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpChargesTarget"} + }]}} + }, + "fxQuotesResponseSource": "$payeeFSPID", + } + end note +!else + D1->PayerCC: Here are the conversion terms + !if ($simplified != true) + note right of PayerCC + { + "homeTransactionId": "$homeTransactionId", + "condition": "$fxCondition", + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount" + }, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount" + }, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [ + { + "chargeType": "string", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpChargesSource" + }, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpChargesTarget" + } + } + ] + } + } + end note + !endif +!endif + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.svg new file mode 100644 index 000000000..8114a5163 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.svg @@ -0,0 +1 @@ +Agreement Phase Currency Conversion - Mojaloop Connector IntegrationPayer DFSPFX providerJohnJohnPayer CBSPayer CBSCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorBackend FX API(Core Connector)Backend FX API(Core Connector)1Yes please, go ahead2Payer has acceptedthe party information3Get quotationPUT /transfers/d9ce59d4359843968630581bb0{ "acceptParty": true }4Hmmm. I can only send in BWP.I need to get some currency conversion5Lookup the local cached FXPsthat can provide the conversion6I'll ask FDH FX to perform my conversion7Here is the initial version of the transfer.Please quote me for the currency conversion.post /fxQuotes{"conversionRequestId": "828cc75f1654415e8fcddf76cc","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS"},"expiration": "2021-08-25T14:17:09.663+01:00"}}8202 I'll get back to you9Here is the initial version of the transfer.Please quote me for the currency conversion.POST /fxQuote10202 I'll get back to you11Lookup FX ratepost /fxQuotes{"conversionRequestId": "828cc75f1654415e8fcddf76cc","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS"},"expiration": "2021-08-25T14:17:09.663+01:00"}}I will add a 33 BWP fee for undertaking the conversion.Now I'll set an expiry time, sign the quotation object,12Return FX ratepost /fxQuotesresponse{"conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"expiration": "2021-08-25T14:17:09.663+01:00""charges": [{"chargeType": "string","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}]}}Now I'll sign the quotation object,create an ILP prepare packet and return it in the intermediary object. NOTE:the ILP prepare packet contains the following items, all encoded:- The amount being sent (i.e. in the source currency)- An expiry time- The condition- The name of the FXP- The content of the conversion terms13Here's the signed conversion objectPUT /fxQuotes/828cc75f1654415e8fcddf76cc{"condition": "GRzLaTP7DJ9t4P-a_B...","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"expiration": "2021-08-25T14:17:09.663+01:00""charges": [{"chargeType": "string","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}]}}14200 Gotcha15Here's the signed conversion objectPUT /fxQuotes/828cc75f1654415e8fcddf76cc16Gotcha17Here are the conversion termsPOST/PUT /transfersresponse{"transferId": "d9ce59d4359843968630581bb0","homeTransactionId": "string","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"type": "CONSUMER","idType": "MSISDN","idValue": "2551234567890","displayName": "Yaro","fspId": "PayeeFSP""supportedCurrencies": [ "TZS" ]},"amountType": "SEND","currency": "BWP","amount": "300""currentState": "WAITING_FOR_CONVERSION_ACCEPTANCE","getPartiesResponse": {<Same as the previous responses>},"conversionRequestId": "828cc75f1654415e8fcddf76cc","fxQuotesResponse": {"body": {"condition": "GRzLaTP7DJ9t4P-a_B...","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"expiration": "2021-08-25T14:17:09.663+01:00""charges": [{"chargeType": "string","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}]}}},"fxQuotesResponseSource": "PayeeFSP",} \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.plantuml new file mode 100644 index 000000000..53bde892c --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.plantuml @@ -0,0 +1,241 @@ +@startuml FXAPI_Payer_Receive_Agreement + +!$simplified = false +!$shortCutSingleFXP = false +!$hideSwitchDetail = false +!$senderName = "Keeya" +!$receiverName = "Yaro" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "50000" +!$payeeFee = "4000" +!$targetAmount = "54000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "330" +!$fxpTargetAmount = "54000" +!$totalChargesSourceCurrency = "55" + + +title Agreement - Currency Conversion with Amount Type RECEIVE +'actor "$senderName" as A1 +box "Payer DFSP" #LightBlue +' participant "Payer CBS" as PayerCBS + participant "Payer\nMojaloop\nConnector" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +box "FX provider" + participant "FXP\nConnector" as FXP + participant "Backend FX API" as FXPBackend +end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 +' participant "Payee CBS" as PayeeCBS +end box + +'actor "$receiverName" as A2 +autonumber + +D1->>S1:Please quote for a payment\n of $payeeReceiveAmount $payeeCurrency.\n**POST /quotes** +!if ($simplified != true) +note left + **POST /quotes** + { + "quoteId": "382987a875ce...", + "transactionId": "d9ce59d43598...", + "payee": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN" }} + "payer": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payerMSISDN"}}, + "amountType": **"RECEIVE"**, + "amount": { + "currency": "$payeeCurrency", + "amount": "$payeeReceiveAmount"} + "validity": "2021-08-25T14:17:09.663+01:00" + } +end note +!endif +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +deactivate D1 +S1->>D2:**POST /quotes** +activate D2 +!if ($simplified != true) +D2-->>S1:202 I'll get back to you +deactivate S1 +!endif +D2->D2: Let me get a quote to do the conversion +!if ($shortCutSingleFXP != true) + + +D2->D2:OK, so I will charge $payeeFee $payeeCurrency for this.\nNow I create terms of the transfer \nand sign the transaction object +D2->>S1:Here's the signed quote +note right +**put /quotes/382987a875ce...** +{ + "transferAmount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount" }, + "payeeReceiveAmount": { + "currency": "$payeeCurrency", + "amount": "$payeeReceiveAmount"}, + "payeeFspFee": { + "currency": "$payeeCurrency", + "amount": "$payeeFee"}, + "expiration": "2021-08-25T14:17:09.663+01:00, + "transaction": { + "transactionId": "d9ce59d43598...", + "quoteId": "382987a875ce...", + "payee": { + "fspId": "$payeeFSPID", + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN"}}, + "payer": { + "fspId": "$payerFSPID", + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payerMSISDN"}}, + "amount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount"}, + "payeeReceiveAmount": { + "currency": "$payeeCurrency", + "amount": "$payeeReceiveAmount"}, + "converter": "PAYER"}, + "condition": "BfNFPRgfKF8Ke9kpo..." +} +end note +activate S1 +!if ($simplified != true) +S1-->>D2:200 Gotcha +!endif +deactivate D2 +S1->>D1:Here's the signed quote\n**PUT /quotes/382987a875ce...** +activate D1 +!if ($simplified != true) +D1-->>S1:200 Gotcha +!endif +deactivate S1 +D1->D1:OK, I can see that there are going\n to be $payeeFee $payeeCurrency in charges and \nI need send $targetAmount $payeeCurrency to make \nthis transfer + +group Currency Conversion +D1->D1:Now I need to find out what the \nexchange rate is +deactivate S1 +D1->D1:I'll ask FDH FX to\n perform my conversion + +!if ($shortCutSingleFXP != true) +D1->>S1:Here is the initial version \nof the transfer.Please quote\n me for the currency conversion. +!else +D1->>FXP:Here is the initial version\n of the transfer.Please quote\n me for the currency conversion. +!endif +note left + **post /fxQuotes** + { + "conversionRequestId": "828cc75f1654...", + "conversionTerms": { + "conversionId": "581f68efb54f...", + "counterPartyFsp": "FDH_FX", + "amountType": "RECEIVE", + "sourceAmount": { + "currency": "$payerCurrency"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount"}, + "validity": "2021-08-25T14:17:09.663+01:00"} + } +end note +!if ($shortCutSingleFXP != true) +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +deactivate D1 +S1->>FXP:Here is the initial version\n of the transfer. Please quote\n me for the currency conversion.\n**POST /fxQuote** +activate FXP +!if ($simplified != true) +FXP-->>S1:202 I'll get back to you +!endif +deactivate S1 +!else +!endif +FXP->FXPBackend:Lookup FX rate +FXPBackend-->FXP:Return FX rate +' !if ($shortCutSingleFXP != true) + +note right + I will add a $fxpChargesSource $payerCurrency fee for + undertaking the conversion. Now I'll set an expiry time, + sign the quotation object, create an ILP prepare packet + and return it in the intermediary object. + + **NOTE:** the ILP prepare packet contains the following + items, all encoded: + - The amount being sent (i.e. in the source currency) + - An expiry time + - The condition + - The name of the FXP + - The content of the conversion terms + + **PUT /fxQuotes/828cc75f1654...** + { + "condition": "bdbcf517cfc7e...", + "conversionTerms": { + "conversionId": "581f68efb54f...", + "initiatingFsp": "$payerFSPID" + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount" + }, + "targetAmount": { + "currency": "$payeeCurrency"", + "amount": "$fxpTargetAmount" + }, + "charges": [{ + "chargeType": "Conversion fee", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpChargesSource"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpChargesTarget"}}], + "validity": "2021-08-25T14:17:09.663+01:00"} + } +end note +!if ($shortCutSingleFXP != true) +FXP->>S1:Here's the signed \nconversion object +activate S1 +!if ($simplified != true) +S1-->>FXP:200 Gotcha +!endif +deactivate FXP +S1->>D1:Here's the signed conversion object\n**PUT /fxQuotes/828cc75f1654...** +activate D1 +!if ($simplified != true) +D1-->>S1:Gotcha +!endif +deactivate S1 +!else +FXP-->>D1:Here's the signed conversion object\n**PUT /fxQuotes/828cc75f1654...** +activate D1 +!endif + +end group + +@enduml diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.svg new file mode 100644 index 000000000..1d646e96c --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.svg @@ -0,0 +1 @@ +Agreement - Currency Conversion with Amount Type RECEIVEPayer DFSPFX providerPayee DFSPPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorBackend FX APIBackend FX APIPayeeMojaloopConnectorPayeeMojaloopConnector1Please quote for a paymentof 50000 TZS.POST /quotesPOST /quotes{"quoteId": "382987a875ce...","transactionId": "d9ce59d43598...","payee": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890" }}"payer": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321"}},"amountType":"RECEIVE","amount": {"currency": "TZS","amount": "50000"}"validity": "2021-08-25T14:17:09.663+01:00"}2202 I'll get back to you3POST /quotes4202 I'll get back to you5Let me get a quote to do the conversion6OK, so I will charge 4000 TZS for this.Now I create terms of the transferand sign the transaction object7Here's the signed quoteput /quotes/382987a875ce...{"transferAmount": {"currency": "TZS","amount": "54000" },"payeeReceiveAmount": {"currency": "TZS","amount": "50000"},"payeeFspFee": {"currency": "TZS","amount": "4000"},"expiration": "2021-08-25T14:17:09.663+01:00,"transaction": {"transactionId": "d9ce59d43598...","quoteId": "382987a875ce...","payee": {"fspId": "PayeeFSP","partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890"}},"payer": {"fspId": "PayerFSP","partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321"}},"amount": {"currency": "TZS","amount": "54000"},"payeeReceiveAmount": {"currency": "TZS","amount": "50000"},"converter": "PAYER"},"condition": "BfNFPRgfKF8Ke9kpo..."}8200 Gotcha9Here's the signed quotePUT /quotes/382987a875ce...10200 Gotcha11OK, I can see that there are goingto be 4000 TZS in charges andI need send 54000 TZS to makethis transferCurrency Conversion12Now I need to find out what theexchange rate is13I'll ask FDH FX toperform my conversion14Here is the initial versionof the transfer.Please quoteme for the currency conversion.post /fxQuotes{"conversionRequestId": "828cc75f1654...","conversionTerms": {"conversionId": "581f68efb54f...","counterPartyFsp": "FDH_FX","amountType": "RECEIVE","sourceAmount": {"currency": "BWP"},"targetAmount": {"currency": "TZS","amount": "54000"},"validity": "2021-08-25T14:17:09.663+01:00"}}15202 I'll get back to you16Here is the initial versionof the transfer. Please quoteme for the currency conversion.POST /fxQuote17202 I'll get back to you18Lookup FX rate19Return FX rateI will add a 33 BWP fee forundertaking the conversion. Now I'll set an expiry time,sign the quotation object, create an ILP prepare packetand return it in the intermediary object. NOTE:the ILP prepare packet contains the followingitems, all encoded:- The amount being sent (i.e. in the source currency)- An expiry time- The condition- The name of the FXP- The content of the conversion terms PUT /fxQuotes/828cc75f1654...{"condition": "bdbcf517cfc7e...","conversionTerms": {"conversionId": "581f68efb54f...","initiatingFsp": "PayerFSP""sourceAmount": {"currency": "BWP","amount": "330"},"targetAmount": {"currency": "TZS"","amount": "54000"},"charges": [{"chargeType": "Conversion fee","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}],"validity": "2021-08-25T14:17:09.663+01:00"}}20Here's the signedconversion object21200 Gotcha22Here's the signed conversion objectPUT /fxQuotes/828cc75f1654...23Gotcha \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.plantuml new file mode 100644 index 000000000..ea6b0de21 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.plantuml @@ -0,0 +1,112 @@ +@startuml FXAPI_Payer_Receive_Discovery + +!$simplified = false +!$shortCutSingleFXP = false +!$hideSwitchDetail = false +!$senderName = "Keeya" +!$receiverName = "Yaro" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$payerMSISDN = "267876..." +!$payeeMSISDN = "255123..." +!$payeeReceiveAmount = "50000" +!$payeeFee = "4000" +!$targetAmount = "54000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "330" +!$fxpTargetAmount = "54000" +!$totalChargesSourceCurrency = "55" + + +title Discovery - Currency Conversion with Amount Type RECEIVE +actor "$senderName" as A1 +box "Payer DFSP" #LightBlue + participant "Payer CBS" as PayerCBS + participant "Payer\nMojaloop\nConnector" as D1 +end box + +participant "Mojaloop Switch" as S1 + +box "Discovery Service" #LightYellow + participant "ALS Oracle" as ALS +end box + +'box "FX provider" +' participant "FXP\nConnector" as FXP +' participant "Backend FX API" as FXPBackend +'end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 + participant "Payee CBS" as PayeeCBS +end box + +'actor "$receiverName" as A2 +autonumber + +A1->PayerCBS:I'd like to pay $receiverName\n$payeeReceiveAmount $payeeCurrency for \nhis latest book, please +PayerCBS->D1: Initiate merchant payment +activate D1 +D1->>S1:I want to send to MSISDN $payeeMSISDN\n**GET /parties/MSISDN/$payeeMSISDN** +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +deactivate D1 +S1->ALS:Who owns MSISDN $payeeMSISDN? +activate ALS +ALS-->S1:It's $payeeFSPID +deactivate ALS +S1->>D2:Do you own MSISDN $payeeMSISDN? +activate D2 +!if ($simplified != true) +D2-->>S1:202 I'll get back to you +!endif +deactivate S1 +D2->D2: Check Sanction list status \n& trigger a refresh of the status +D2->PayeeCBS: Check account and get\n currency type +!if ($simplified != true) +PayeeCBS-->D2: Result +!endif +D2->>S1:Yes, it's $receiverName. He can receive in $payeeCurrency,\n and I can convert from $payerCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +!if ($simplified != true) +note right + **PUT /parties** + { + "party": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN"}, + "name": "$receiverName", + "supportedCurrencies":["$payeeCurrency"]} + } +end note +!else +note over D2 + Payee Info with Encrypted KYC Data +end note +!endif +activate S1 +!if ($simplified != true) +S1-->>D2:200 Gotcha +!endif +deactivate D2 +S1->>D1:Yes, it's $receiverName. He can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +activate D1 +!if ($simplified != true) +D1-->>S1:200 Gotcha +!endif +deactivate S1 + +D1->D1: I will need to perform currency conversion. +note left +I need to calculate +how much currency I need. +Let me find a currency +conversion provider before I start. +end note + +@enduml diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.svg new file mode 100644 index 000000000..5177277c1 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.svg @@ -0,0 +1 @@ +Discovery - Currency Conversion with Amount Type RECEIVEPayer DFSPDiscovery ServicePayee DFSPKeeyaKeeyaPayer CBSPayer CBSPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchALS OracleALS OraclePayeeMojaloopConnectorPayeeMojaloopConnectorPayee CBSPayee CBS1I'd like to pay Yaro50000 TZS forhis latest book, please2Initiate merchant payment3I want to send to MSISDN 255123...GET /parties/MSISDN/255123...4202 I'll get back to you5Who owns MSISDN 255123...?6It's PayeeFSP7Do you own MSISDN 255123...?8202 I'll get back to you9Check Sanction list status& trigger a refresh of the status10Check account and getcurrency type11Result12Yes, it's Yaro. He can receive in TZS,and I can convert from BWPPUT /parties/MSISDN/255123...PUT /parties{"party": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "255123..."},"name": "Yaro","supportedCurrencies":["TZS"]}}13200 Gotcha14Yes, it's Yaro. He can receive in TZSPUT /parties/MSISDN/255123...15200 Gotcha16I will need to perform currency conversion.I need to calculatehow much currency I need.Let me find a currencyconversion provider before I start. \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.plantuml new file mode 100644 index 000000000..8bffb60ec --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.plantuml @@ -0,0 +1,57 @@ +@startuml FXAPI_Payer_Receive_SenderConfirmation + +!$simplified = false +!$shortCutSingleFXP = false +!$hideSwitchDetail = false +!$senderName = "Keeya" +!$receiverName = "Yaro" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "50000" +!$payeeFee = "4000" +!$targetAmount = "54000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "330" +!$fxpTargetAmount = "54000" +!$totalChargesSourceCurrency = "55" + + +title Currency Conversion with Amount Type RECEIVE +actor "$senderName" as A1 +box "Payer DFSP" #LightBlue + participant "Payer CBS" as PayerCBS + participant "Payer\nMojaloop\nConnector" as D1 +end box + +'participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +'box "FX provider" +' participant "FXP\nConnector" as FXP +' participant "Backend FX API" as FXPBackend +'end box + +'box "Payee DFSP" #LightBlue +' participant "Payee\nMojaloop\nConnector" as D2 +' participant "Payee CBS" as PayeeCBS +'end box + +'actor "$receiverName" as A2 +autonumber + + +D1->PayerCBS:Here's the quote for the transfer\nIt expires at 2021-08-25T14:17:09.663+01:00 +PayerCBS->A1:Hi, $senderName: I can do the transfer.\nIt'll cost you $totalChargesSourceCurrency $payerCurrency in fees\n$fxpSourceAmount $payerCurrency will be deducted from your account,\nand $receiverName will receive\n$payeeReceiveAmount $payeeCurrency.\nLet me know if you want to go ahead +A1-->PayerCBS:Great! Yes please, go ahead + +PayerCBS-->D1: Payer has accepted the terms please proceed + +@enduml diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.svg new file mode 100644 index 000000000..5c94fddac --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.svg @@ -0,0 +1 @@ +Currency Conversion with Amount Type RECEIVEPayer DFSPKeeyaKeeyaPayer CBSPayer CBSPayerMojaloopConnectorPayerMojaloopConnectorSender Confirmation1Here's the quote for the transferIt expires at 2021-08-25T14:17:09.663+01:002Hi, Keeya: I can do the transfer.It'll cost you 55 BWP in fees330 BWP will be deducted from your account,and Yaro will receive50000 TZS.Let me know if you want to go ahead3Great! Yes please, go ahead4Payer has accepted the terms please proceed \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.plantuml new file mode 100644 index 000000000..a5b9f2977 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.plantuml @@ -0,0 +1,254 @@ +@startuml FXAPI_Payer_Receive_TransferPhase + +!$simplified = false +!$shortCutSingleFXP = false +!$hideSwitchDetail = false +!$senderName = "Keeya" +!$receiverName = "Yaro" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "50000" +!$payeeFee = "4000" +!$targetAmount = "54000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "330" +!$fxpTargetAmount = "54000" +!$totalChargesSourceCurrency = "55" + + +title Transfer - Currency Conversion with Amount Type RECEIVE +actor "$senderName" as A1 +box "Payer DFSP" #LightBlue +' participant "Payer CBS" as PayerCBS + participant "Payer\nMojaloop\nConnector" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +box "FX provider" + participant "FXP\nConnector" as FXP + participant "Backend FX API" as FXPBackend +end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 +end box + participant "Payee CBS" as PayeeCBS + +'actor "$receiverName" as A2 +autonumber + +D1->D1:First, activate the conversion +D1->>S1:Please confirm your\n part of the transfer +note left +**POST /fxTransfers** +{ + "commitRequestId": "77c9d78dc26a4474...", + "determiningTransactionId": "d9ce59d435...", + "requestingFsp": "$payerFSPID", + "respondingFxp": "FDH_FX", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "condition": "bdbcf517cfc7..." +} +end note +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +deactivate D1 +!if ($hideSwitchDetail != true) +S1->S1:OK, so this is an FX confirmation. +S1->S1: Does the sender have an account \nin this currency? Yes, it does. +!endif +S1->S1: Liquidity check and reserve on\n Payer DFSP's account +!if ($hideSwitchDetail != true) +note over S1 +Reservations: + +**$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency** +end note +!endif +S1->>FXP:Please confirm the currency \nconversion part of the transfer\n **POST /fxTransfers** +activate FXP +!if ($simplified != true) +FXP-->>S1:202 I'll get back to you +!endif +deactivate S1 +FXP->FXPBackend:Reserve funds for\n FX conversion +FXPBackend->FXP:Success +FXP->>S1:Confirmed. Here's the fulfilment +note right +**PUT /fxTransfers/77c9d78dc26a...** +{ + "fulfilment": "188909ceb6cd5c...", + "completedTimeStamp": "2021-08-25T14:17:08.175+01:00" + "conversionState": "RESERVED" +} +end note +activate S1 +!if ($simplified != true) +S1-->>FXP:200 Gotcha +!endif +deactivate FXP +!if ($simplified != true) +S1->S1:Check fulfilment \nmatches and cancel if not. +alt Conversion failed +S1->FXP:Sorry. Conversion failed +note left +**PATCH /fxTransfers/77c9d78dc26a...** +{ + "fulfilment": "188909ceb6cd5c35...", + "completedTimeStamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "ABORTED" +} +end note +activate FXP +FXP-->S1:Acknowledged +FXP->FXP:Remove any reservations\nor obligations +deactivate FXP + +S1->>D1:Sorry. Conversion failed +note right +**PUT /fxTransfers/77c9d78dc26a.../error** +{ + "errorCode": "9999", + "errorDescription": "Whatever the error was" +} +end note +activate D1 +else Conversion succeeded +S1->D1:Conversion succeeded subject\n to transfer success\n**PUT /fxTransfers/77c9d78dc26a...** + +end +!else +S1->D1:Conversion succeeded subject\n to transfer success\n**PUT /fxTransfers/77c9d78dc26a...** +!endif +activate D1 +!if ($simplified != true) +D1-->S1:200 Gotcha +!endif +deactivate S1 +D1->D1:OK, so that's all right\nNow I can send the transfer itself + +D1->S1:Please do the transfer \n**POST /transfers** +!if ($simplified != true) +note left +**POST /transfers** +{ + "transferId": "c720ae14fc72...", + "payeeFsp": "$payeeFSPID", + "payerFsp": "$payerFSPID", + "amount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount"}, + "transaction": { + "transactionId": "d9ce59d43598...", + "quoteId": "382987a875ce...", + "payee": { + "fspId": "$payeeFSPID", + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN"}}, + "payer": { + "fspId": "$payerFSPID", + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payerMSISDN"}} + } +} +end note +!endif +activate S1 +!if ($simplified != true) +S1-->D1:202 I'll get back to you +!endif +deactivate D1 +!if ($hideSwitchDetail != true) +S1->S1:Is there a dependent transfer? Yes +!endif +S1->S1:Perform liquidity check and\n reserve funds against creditor\n party to dependent transfer +note over S1 +**Reservations:** + +$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency +**FDH_FX has a reservation of $targetAmount $payeeCurrency** +end note + +S1->D2:Please do the transfer\n**POST /transfers** +activate D2 +!if ($simplified != true) +D2-->S1:202 I'll get back to you +!endif +deactivate S1 +D2->D2:Let me check that the terms \nof the dependent transfer are\n the same as the ones I agreed\n to and that the fulfilment\n and condition match +D2->D2:Yes, they do. \nI approve the transfer +D2->PayeeCBS:Please credit $receiverName's account\n with $payeeReceiveAmount $payeeCurrency +D2->S1:Transfer is confirmed, here's the fulfilment +note right +**PUT /transfers/c720ae14fc72...** +{ + "fulfilment": "mhPUT9ZAwdXLfe...", + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "transferState": "COMMITTED" +} +end note +activate S1 +!if ($simplified != true) +S1-->D2:200 Gotcha +!endif +deactivate D2 +!if ($hideSwitchDetail != true) +S1->S1:Is there a dependent transfer?\nYes, there is. +S1->S1:Is this dependency against the\n debtor party to the transfer?\nYes, it is. +S1->S1:Create an obligation from the\n debtor party to the party named\n in the dependency (the FXP) +S1->S1:Is the transfer denominated in\n the currency of the payee \nreceive amount? Yes, it is. +S1->S1:Create an obligation from the\n party named in the dependency\nto the creditor party for the transfer +!else +S1->S1:Create obligations from the\n payer to the FXP and from \nFXP to the payee +!endif +S1->FXP:The transfer succeeded.\nYou can clear it in your ledgers +note left +**PATCH /fxTransfers/77c9d78dc26a...** +{ + "fulfilment": "2e6870fb4ed...", + "completedTimeStamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "COMMITTED" +} +end note +activate FXP +FXP->FXP:Let's just check: does \nthis match the stuff I sent? +FXP->FXP:It does. Great. \nI'll clear the conversion +FXP-->S1:200 Gotcha +deactivate FXP +note over S1 + **Ledger positions:** + $payerFSPID has a debit of $fxpSourceAmount $payerCurrency + FDH_FX has a credit of $fxpSourceAmount $payerCurrency + FDH_FX has a debit of $fxpTargetAmount $payeeCurrency + $payeeFSPID has a credit of $targetAmount $payeeCurrency +end note +S1->D1:Transfer is complete\n**PUT /transfers/c720ae14fc72...** +activate D1 +!if ($simplified != true) +D1-->S1:200 Gotcha +!endif +deactivate S1 +D1->D1:Commit the funds in my ledgers +D1->A1:Transfer was completed successfully +deactivate D1 + +@enduml diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.svg new file mode 100644 index 000000000..0ca638f9b --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.svg @@ -0,0 +1 @@ +Transfer - Currency Conversion with Amount Type RECEIVEPayer DFSPFX providerPayee DFSPKeeyaKeeyaPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorBackend FX APIBackend FX APIPayeeMojaloopConnectorPayeeMojaloopConnectorPayee CBSPayee CBS1First, activate the conversion2Please confirm yourpart of the transferPOST /fxTransfers{"commitRequestId": "77c9d78dc26a4474...","determiningTransactionId": "d9ce59d435...","requestingFsp": "PayerFSP","respondingFxp": "FDH_FX","sourceAmount": {"currency": "BWP","amount": "330"},"targetAmount": {"currency": "TZS","amount": "54000"},"condition": "bdbcf517cfc7..."}3202 I'll get back to you4OK, so this is an FX confirmation.5Does the sender have an accountin this currency? Yes, it does.6Liquidity check and reserve onPayer DFSP's accountReservations: PayerFSP has a reservation of 330 BWP7Please confirm the currencyconversion part of the transfer POST /fxTransfers8202 I'll get back to you9Reserve funds forFX conversion10Success11Confirmed. Here's the fulfilmentPUT /fxTransfers/77c9d78dc26a...{"fulfilment": "188909ceb6cd5c...","completedTimeStamp": "2021-08-25T14:17:08.175+01:00""conversionState": "RESERVED"}12200 Gotcha13Check fulfilmentmatches and cancel if not.alt[Conversion failed]14Sorry. Conversion failedPATCH /fxTransfers/77c9d78dc26a...{"fulfilment": "188909ceb6cd5c35...","completedTimeStamp": "2021-08-25T14:17:08.175+01:00","conversionState": "ABORTED"}15Acknowledged16Remove any reservationsor obligations17Sorry. Conversion failedPUT /fxTransfers/77c9d78dc26a.../error{"errorCode": "9999","errorDescription": "Whatever the error was"}[Conversion succeeded]18Conversion succeeded subjectto transfer successPUT /fxTransfers/77c9d78dc26a...19200 Gotcha20OK, so that's all rightNow I can send the transfer itself21Please do the transferPOST /transfersPOST /transfers{"transferId": "c720ae14fc72...","payeeFsp": "PayeeFSP","payerFsp": "PayerFSP","amount": {"currency": "TZS","amount": "54000"},"transaction": {"transactionId": "d9ce59d43598...","quoteId": "382987a875ce...","payee": {"fspId": "PayeeFSP","partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890"}},"payer": {"fspId": "PayerFSP","partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321"}}}}22202 I'll get back to you23Is there a dependent transfer? Yes24Perform liquidity check andreserve funds against creditorparty to dependent transferReservations: PayerFSP has a reservation of 330 BWPFDH_FX has a reservation of 54000 TZS25Please do the transferPOST /transfers26202 I'll get back to you27Let me check that the termsof the dependent transfer arethe same as the ones I agreedto and that the fulfilmentand condition match28Yes, they do.I approve the transfer29Please credit Yaro's accountwith 50000 TZS30Transfer is confirmed, here's the fulfilmentPUT /transfers/c720ae14fc72...{"fulfilment": "mhPUT9ZAwdXLfe...","completedTimestamp": "2021-08-25T14:17:08.227+01:00","transferState": "COMMITTED"}31200 Gotcha32Is there a dependent transfer?Yes, there is.33Is this dependency against thedebtor party to the transfer?Yes, it is.34Create an obligation from thedebtor party to the party namedin the dependency (the FXP)35Is the transfer denominated inthe currency of the payeereceive amount? Yes, it is.36Create an obligation from theparty named in the dependencyto the creditor party for the transfer37The transfer succeeded.You can clear it in your ledgersPATCH /fxTransfers/77c9d78dc26a...{"fulfilment": "2e6870fb4ed...","completedTimeStamp": "2021-08-25T14:17:08.175+01:00","conversionState": "COMMITTED"}38Let's just check: doesthis match the stuff I sent?39It does. Great.I'll clear the conversion40200 GotchaLedger positions:PayerFSP has a debit of 330 BWPFDH_FX has a credit of 330 BWPFDH_FX has a debit of 54000 TZSPayeeFSP has a credit of 54000 TZS41Transfer is completePUT /transfers/c720ae14fc72...42200 Gotcha43Commit the funds in my ledgers44Transfer was completed successfully \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.plantuml new file mode 100644 index 000000000..5b0d81e16 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.plantuml @@ -0,0 +1,157 @@ +@startuml FXAPI_Payer_SenderConfirmation + +!$simplified = false +!$shortCutSingleFXP = false +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = false +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f1654415e8fcddf76cc" +!$conversionId = "581f68efb54f416f9161ac34e8" +!$homeTransactionId = "string" +!$quoteId = "382987a875ce4037b500c475e0" +!$transactionId = "d9ce59d4359843968630581bb0" +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26a44748b3c99b96a" +!$determiningTransferId = "d9ce59d4359843968630581bb0" +!$transferId = "d9ce59d4359843968630581bb0" +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + +title Payer DFSP requests conversion with SEND amount +actor "$senderName" as A1 +participant "Payer CBS" as PayerCBS + +box "Payer DFSP" #LightBlue + participant "Core Connector" as PayerCC + participant "Payer\nMojaloop\nConnector" as D1 +end box + +'participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow + 'participant "ALS Oracle" as ALS +'end box + +'box "FX provider" +' participant "FXP\nConnector" as FXP +' participant "Backend FX API" as FXPBackend +'end box + +'box "Payee DFSP" #LightBlue +' participant "Payee\nMojaloop\nConnector" as D2 +' participant "Core Connector" as PayeeCC +'end box + +'actor "$receiverName" as A2 +autonumber + + +!if ($advancedCoreConnectorFlow != true) + D1-->PayerCC:Here's the quote for the transfer\nIt expires at $quotePayeeExpiration + note right + **POST/PUT /transfers** response + { + "transferId": "$transferId", + "homeTransactionId": "$homeTransactionId", + "from": { + "displayName": "$senderName", + "fspId": "$payerFSPID", + "idType": "MSISDN", + "idValue": "$payerMSISDN" }, + "to": { + "type": "CONSUMER", + "idType": "MSISDN", + "idValue": "$payeeMSISDN", + "displayName": "$receiverName", + "fspId": "$payeeFSPID" + "supportedCurrencies": [ "$payeeCurrency" ] }, + "amountType": "SEND", + "currency": "$payerCurrency", + "amount": "$payerSendAmount" + "currentState": "**WAITING_FOR_QUOTE_ACCEPTANCE**", + "getPartiesResponse": {}, + "conversionRequestId": "$conversionRequestId", + "fxQuotesResponse": {}, + "fxQuotesResponseSource": "$payeeFSPID", + "quoteId": "$quoteId", + "quoteResponse": { + "body": { + "transferAmount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount"}, + "payeeReceiveAmount": { + "currency": "$payeeCurrency", + "amount": "$payeeReceiveAmount"}, + "payeeFspFee": { + "currency": "$payeeCurrency", + "amount": "$payeeFee"}, + "expiration": "$payeeQuoteExpiration", + "ilpPacket": "", + "condition": "$condition"},}, + "quoteResponseSource": "$payeeFSPID", + } + end note +!else + D1-->PayerCC:Here's the quote for the transfer\nIt expires at $quotePayeeExpiration + !if ($simplified != true) + note right of PayerCC + { + "quotes": { + "body": { + "transferAmount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount" + }, + "payeeReceiveAmount": { + "currency": "$payeeCurrency", + "amount": "$payeeReceiveAmount" + }, + "payeeFspFee": { + "currency": "$payeeCurrency", + "amount": "$payeeFee" + }, + "expiration": "$payeeQuoteExpiration", + "ilpPacket": " + + ", + "condition": "$condition" + }, + "headers": {} + }, + "currentState": "COMPLETED" + } + end note + !endif +!endif +PayerCC->PayerCBS:Here's the quote +PayerCBS->A1:Hi, $senderName: I can do the transfer.\nIt'll cost you $totalChargesSourceCurrency $payerCurrency($totalChargesTargetCurrency $payeeCurrency) in fees\nand $receiverName will receive\n$payeeReceiveAmount $payeeCurrency.\nLet me know if you want to go ahead +A1->PayerCBS:Great! Yes please, go ahead + +PayerCBS->PayerCC: Payer has accepted the terms please proceed + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.svg new file mode 100644 index 000000000..1f3622fef --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.svg @@ -0,0 +1 @@ +Payer DFSP requests conversion with SEND amountPayer DFSPJohnJohnPayer CBSPayer CBSCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnector1Here's the quote for the transferIt expires at 2021-08-25T14:17:09.663+01:00POST/PUT /transfersresponse{"transferId": "d9ce59d4359843968630581bb0","homeTransactionId": "string","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321" },"to": {"type": "CONSUMER","idType": "MSISDN","idValue": "2551234567890","displayName": "Yaro","fspId": "PayeeFSP""supportedCurrencies": [ "TZS" ] },"amountType": "SEND","currency": "BWP","amount": "300""currentState": "WAITING_FOR_QUOTE_ACCEPTANCE","getPartiesResponse": {<Same as the previous responses>},"conversionRequestId": "828cc75f1654415e8fcddf76cc","fxQuotesResponse": {<Same as the previous responses>},"fxQuotesResponseSource": "PayeeFSP","quoteId": "382987a875ce4037b500c475e0","quoteResponse": {"body": {"transferAmount": {"currency": "TZS","amount": "48000"},"payeeReceiveAmount": {"currency": "TZS","amount": "44000"},"payeeFspFee": {"currency": "TZS","amount": "4000"},"expiration": "$payeeQuoteExpiration","ilpPacket": "<This is encoded transaction object.>","condition": "HOr22-H3AfTDHrSkP..."},},"quoteResponseSource": "PayeeFSP",}2Here's the quote3Hi, John: I can do the transfer.It'll cost you 55 BWP(10000 TZS) in feesand Yaro will receive44000 TZS.Let me know if you want to go ahead4Great! Yes please, go ahead5Payer has accepted the terms please proceed \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.plantuml new file mode 100644 index 000000000..4cf1da01c --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.plantuml @@ -0,0 +1,466 @@ +@startuml FXAPI_Payer_Transfer + +!$simplified = false +!$shortCutSingleFXP = false +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = false +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f1654415e8fcddf76cc" +!$conversionId = "581f68efb54f416f9161ac34e8" +!$homeTransactionId = "string" +!$quoteId = "382987a875ce4037b500c475e0" +!$transactionId = "d9ce59d4359843968630581bb0" +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26a44748b3c99b96a" +!$determiningTransferId = "d9ce59d4359843968630581bb0" +!$transferId = "d9ce59d4359843968630581bb0" +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + +title Transfer Phase - Mojaloop Connector +actor "$senderName" as A1 + participant "Payer CBS" as PayerCBS +box "Payer DFSP" #LightBlue + participant "Core Connector" as PayerCC + participant "Payer\nMojaloop\nConnector" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +box "FX provider" + participant "FXP\nConnector" as FXP + participant "Backend FX API" as FXPBackend +end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 + participant "Core Connector" as PayeeCC +end box + +actor "$receiverName" as A2 +autonumber + +!if ($advancedCoreConnectorFlow != true) +PayerCC->D1: Proceed with the transfer\nPUT /transfers +note left +{"acceptQuote": true} +end note +!else +PayerCC->D1: Proceed with the transfer\n**POST /fxTransfers** + !if ($simplified != true) + note left + { + "homeTransactionId": "$homeTransactionId", + "commitRequestId": "$commitRequestId", + "determiningTransferId": "$determiningTransferId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "condition": "$fxCondition" + } + end note + !endif +!endif + +!if ($advancedCoreConnectorFlow != true) +D1->D1:First, activate the conversion +!endif +D1->>S1:Please confirm your part of the transfer +note left +**POST /fxTransfers** +{ + "commitRequestId": "$commitRequestId", + "determiningTransferId": "$determiningTransferId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "condition": "$fxCondition" +} +end note +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +deactivate D2 +!if ($hideSwitchDetail != true) +S1->S1:OK, so this is an FX confirmation. +S1->S1: Is there any transfer with determiningTransactionId?\nNo, it does'nt. +!endif +S1->S1: Liquidity check and reserve on Payer DFSP's account +!if ($hideSwitchDetail != true) +note over S1 +Reservations: + +**$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency** +end note +!endif +S1->>FXP:Please confirm the currency conversion part of the transfer\n** POST /fxTransfers** +activate FXP +!if ($simplified != true) +FXP-->>S1:202 I'll get back to you +!endif +deactivate S1 +FXP->FXPBackend:Reserve funds for FX conversion +note left +**POST /fxTransfers** +{ + "homeTransactionId": "$homeTransactionId", + "commitRequestId": "$commitRequestId", + "determiningTransferId": "$determiningTransferId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "condition": "$fxCondition" +} +end note +FXPBackend-->FXP:Success +note right +{ + "homeTransactionId": "$homeTransactionId", + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "RESERVED" +} +end note +FXP->>S1:Confirmed. Here's the fulfilment +note right +**PUT /fxTransfers/$commitRequestId** +{ + "fulfilment": "188909ceb6cd5c35d5c6b394f0a9e5a0571199c332fbd013dc1e6b8a2d5fff42", + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "RESERVED" +} +end note +activate S1 +!if ($simplified != true) +S1-->>FXP:200 Gotcha +!endif +deactivate FXP +!if ($simplified != true) +S1->S1:Check fulfilment matches and cancel if not. +alt Conversion failed +S1->FXP:Sorry. Conversion failed +note right +**PATCH /fxTransfers/$commitRequestId** +{ + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "ABORTED" +} +end note +activate FXP +FXP-->S1:Acknowledged +FXP->FXPBackend:Remove any reservations or obligations +note left +**PUT /fxTransfers/$commitRequestId** +{ + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "ABORTED" +} +end note +FXPBackend-->FXP:Ok +deactivate FXP + +S1->>D1:Sorry. Conversion failed +note right +**PUT /fxTransfers/$commitRequestId/error** +{ + "errorCode": "9999", + "errorDescription": "Whatever the error was" +} +end note +else Conversion succeeded +S1->D1:Conversion succeeded subject to transfer success\n**PUT /fxTransfers/77c9d78d-c26a-4474-8b3c-99b96a814bfc** + +end +!else +S1->D1:Conversion succeeded subject to transfer success\n**PUT /fxTransfers/77c9d78d-c26a-4474-8b3c-99b96a814bfc** +!endif +activate D1 +!if ($simplified != true) +D1-->S1:200 Gotcha +!endif +deactivate S1 + +!if ($advancedCoreConnectorFlow != true) + D1->D1:OK, so that's all right\nNow I can send the transfer itself + ' TODO: Need to add PUT /transfers response here +!else + D1-->PayerCC:Confirmed. You can proceed with the transfer. + note right of PayerCC + **PUT /fxTransfers/$commitRequestId** + { + "fulfilment": "188909ceb6cd5c35d5c6b394f0a9e5a0571199c332fbd013dc1e6b8a2d5fff42", + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "RESERVED" + } + end note + + PayerCC-->D1:Please do the transfer **POST /simpleTransfers** + !if ($simplified != true) + note right of PayerCC + { + "fspId": "$payeeFSPID", + "transfersPostRequest": { + "transferId": "$transferId", + "payeeFsp": "$payeeFSPID", + "payerFsp": "$payerFSPID", + "amount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount" + }, + "ilpPacket": "", + "condition": "$condition", + "expiration": "2016-05-24T08:38:08.699-04:00" + } + } + end note + !endif +!endif + +D1->S1:Please do the transfer **POST /transfers** +!if ($simplified != true) +note over D1 +**POST /transfers** +{ + "transferId": "$transferId", + "payeeFsp": "$payeeFSPID", + "payerFsp": "$payerFSPID", + "amount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount"}, + "ilpPacket": "", + "condition": "$condition", + "expiration": "2016-05-24T08:38:08.699-04:00" +} +end note +!endif +activate S1 +!if ($simplified != true) +S1-->D1:202 I'll get back to you +!endif +deactivate D1 +!if ($hideSwitchDetail != true) +S1->S1:Is there a dependent transfer? Yes +!endif +S1->S1:Perform liquidity check and reserve funds\nagainst creditor party to dependent transfer +note over S1 +Reservations: + +$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency +**$fxpID has a reservation of $targetAmount $payeeCurrency** +end note + +S1->D2:Please do the transfer\n**POST /transfers** +activate D2 +!if ($simplified != true) +D2-->S1:202 I'll get back to you +!endif +deactivate S1 +D2->D2:Let me check that the terms of the dependent transfer\nare the same as the ones I agreed to\nand that the fulfilment and condition match + +D2->PayeeCC:Please credit $receiverName's account with $payeeReceiveAmount $payeeCurrency +!if ($simplified != true) +note left +**POST /transfers** +{ + "transferId": "$transferId", + "amount": "$targetAmount", + "currency": "$payeeCurrency", + "amountType": "SEND", + "from": { + "displayName": "$senderName", + "fspId": "$payerFSPID", + "idType": "MSISDN", + "idValue": "$payerMSISDN"}, + "to": { + "displayName": "$receiverName", + "fspId": "$payeeFSPID", + "idType": "MSISDN", + "idValue": "$payeeMSISDN"}, + "quote": { + "quoteId": "$quoteId", + "transactionId": "$transactionId", + "payeeFspFeeAmount": "$payeeFee", + "payeeFspFeeAmountCurrency": "$payeeCurrency", + "payeeReceiveAmount": "$payeeReceiveAmount", + "payeeReceiveAmountCurrency": "$payeeCurrency", + "transferAmount": "$targetAmount", + "transferAmountCurrency": "$payeeCurrency" + "expiration": "$quotePayeeExpiration"}, + "transactionType": "TRANSFER", + "ilpPacket": {"data": } +} +end note +!endif + +PayeeCC-->D2:Done +PayeeCC->A2:You have received $payeeReceiveAmount $payeeCurrency +!if ($simplified != true) +note right of D2 +{ + "homeTransactionId": "string", + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s", + **Note: fulfilment is optional: SDK will create if not found** + "transferState": "COMMITTED" +} +end note +!endif + +D2->>S1:Transfer is confirmed, here's the fulfilment +note over D2 +**PUT /transfers/$commitRequestId** +{ + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s", + "transferState": "COMMITTED" +} +end note +activate S1 +!if ($simplified != true) +S1-->>D2:200 Gotcha +!endif +deactivate D2 +!if ($hideSwitchDetail != true) +S1->S1:Is there a dependent transfer?\nYes, there is. +S1->S1:Is this dependency against \nthe debtor party to the transfer?\nYes, it is. +S1->S1:Create an obligation from the\n debtor party to the party named in the dependency (the FXP) +S1->S1:Is the transfer denominated in\n the currency of the payee receive amount?\nYes, it is. +S1->S1:Create an obligation from the \nparty named in the dependency\nto the creditor party for the transfer +!else +S1->S1:Create obligations from the payer to the FXP and from FXP to the payee +!endif +S1->>FXP:The transfer succeeded.\nYou can clear it in your ledgers +note over S1 +**PATCH /fxTransfers/$commitRequestId** +{ + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s", + "transferState": "COMMITTED" +} +end note +activate FXP +FXP->FXP:Let's just check: does this match the stuff I sent? +FXP->FXP:It does. Great. I'll clear the conversion +FXP-->>S1:200 Gotcha +deactivate FXP +note over S1 + Ledger positions: + $payerFSPID has a debit of $fxpSourceAmount $payerCurrency + $fxpID has a credit of $fxpSourceAmount $payerCurrency + $fxpID has a debit of $fxpTargetAmount $payeeCurrency + $payeeFSPID has a credit of $targetAmount $payeeCurrency +end note +S1->>D1:Transfer is complete\n**PUT /transfers/$commitRequestId** +activate D1 +!if ($simplified != true) +D1-->S1:200 Gotcha +!endif +deactivate S1 +!if ($advancedCoreConnectorFlow != true) + D1-->PayerCC:Transfer was completed successfully + note right of PayerCC + **POST/PUT /transfers/** response + { + "transferId": "$transferId", + "homeTransactionId": "$homeTransactionId", + "from": { + "displayName": "$senderName", + "fspId": "$payerFSPID", + "idType": "MSISDN", + "idValue": "$payerMSISDN"}, + "to": { + "type": "CONSUMER", + "idType": "MSISDN", + "idValue": "$payeeMSISDN", + "displayName": "$receiverName", + "fspId": "$payeeFSPID" + "supportedCurrencies": [ "$payeeCurrency" ]}, + "amountType": "SEND", + "currency": "$payerCurrency", + "amount": "$payerSendAmount" + "currentState": "**COMPLETED**", + "getPartiesResponse": {}, + "conversionRequestId": "$conversionRequestId", + "fxQuotesResponse": {}, + "fxQuotesResponseSource": "$payeeFSPID", + "quoteId": "$quoteId", + "quoteResponse": {}, + "quoteResponseSource": "$payeeFSPID", + "fulfil": { + "body": { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s", + "transferState": "COMMITTED"},}, + } + end note +!else + D1-->PayerCC:Transfer was completed successfully + !if ($simplified != true) + note right of PayerCC + { + "transfer": { + "body": { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s", + "transferState": "COMMITTED" + }, + "headers": {} + }, + "currentState": "COMPLETED" + } + end note + !endif +!endif + +PayerCC->PayerCBS:Transfer was completed successfully +PayerCBS->PayerCBS:Commit the funds in my ledgers +PayerCBS->A1:Your transfer is successful +deactivate D1 +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.svg new file mode 100644 index 000000000..1cb78ebdb --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.svg @@ -0,0 +1 @@ +Transfer Phase - Mojaloop ConnectorPayer DFSPFX providerPayee DFSPJohnJohnPayer CBSPayer CBSCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorBackend FX APIBackend FX APIPayeeMojaloopConnectorPayeeMojaloopConnectorCore ConnectorCore ConnectorYaroYaro1Proceed with the transferPUT /transfers{"acceptQuote": true}2First, activate the conversion3Please confirm your part of the transferPOST /fxTransfers{"commitRequestId": "77c9d78dc26a44748b3c99b96a","determiningTransferId": "d9ce59d4359843968630581bb0","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"condition": "GRzLaTP7DJ9t4P-a_B..."}4202 I'll get back to you5OK, so this is an FX confirmation.6Is there any transfer with determiningTransactionId?No, it does'nt.7Liquidity check and reserve on Payer DFSP's accountReservations: PayerFSP has a reservation of 300 BWP8Please confirm the currency conversion part of the transferPOST /fxTransfers**9202 I'll get back to you10Reserve funds for FX conversionPOST /fxTransfers{"homeTransactionId": "string","commitRequestId": "77c9d78dc26a44748b3c99b96a","determiningTransferId": "d9ce59d4359843968630581bb0","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"condition": "GRzLaTP7DJ9t4P-a_B..."}11Success{"homeTransactionId": "string","completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "RESERVED"}12Confirmed. Here's the fulfilmentPUT /fxTransfers/77c9d78dc26a44748b3c99b96a{"fulfilment": "188909ceb6cd5c35d5c6b394f0a9e5a0571199c332fbd013dc1e6b8a2d5fff42","completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "RESERVED"}13200 Gotcha14Check fulfilment matches and cancel if not.alt[Conversion failed]15Sorry. Conversion failedPATCH /fxTransfers/77c9d78dc26a44748b3c99b96a{"completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "ABORTED"}16Acknowledged17Remove any reservations or obligationsPUT /fxTransfers/77c9d78dc26a44748b3c99b96a{"completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "ABORTED"}18Ok19Sorry. Conversion failedPUT /fxTransfers/77c9d78dc26a44748b3c99b96a/error{"errorCode": "9999","errorDescription": "Whatever the error was"}[Conversion succeeded]20Conversion succeeded subject to transfer successPUT /fxTransfers/77c9d78d-c26a-4474-8b3c-99b96a814bfc21200 Gotcha22OK, so that's all rightNow I can send the transfer itself23Please do the transferPOST /transfersPOST /transfers{"transferId": "d9ce59d4359843968630581bb0","payeeFsp": "PayeeFSP","payerFsp": "PayerFSP","amount": {"currency": "TZS","amount": "48000"},"ilpPacket": "<Encoded transaction object>","condition": "HOr22-H3AfTDHrSkP...","expiration": "2016-05-24T08:38:08.699-04:00"}24202 I'll get back to you25Is there a dependent transfer? Yes26Perform liquidity check and reserve fundsagainst creditor party to dependent transferReservations: PayerFSP has a reservation of 300 BWPFDH_FX has a reservation of 48000 TZS27Please do the transferPOST /transfers28202 I'll get back to you29Let me check that the terms of the dependent transferare the same as the ones I agreed toand that the fulfilment and condition match30Please credit Yaro's account with 44000 TZSPOST /transfers{"transferId": "d9ce59d4359843968630581bb0","amount": "48000","currency": "TZS","amountType": "SEND","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"displayName": "Yaro","fspId": "PayeeFSP","idType": "MSISDN","idValue": "2551234567890"},"quote": {"quoteId": "382987a875ce4037b500c475e0","transactionId": "d9ce59d4359843968630581bb0","payeeFspFeeAmount": "4000","payeeFspFeeAmountCurrency": "TZS","payeeReceiveAmount": "44000","payeeReceiveAmountCurrency": "TZS","transferAmount": "48000","transferAmountCurrency": "TZS""expiration": "2021-08-25T14:17:09.663+01:00"},"transactionType": "TRANSFER","ilpPacket": {"data": <decoded ilpPacket>}}31Done32You have received 44000 TZS{"homeTransactionId": "string","completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s",    Note: fulfilment is optional: SDK will create if not found"transferState": "COMMITTED"}33Transfer is confirmed, here's the fulfilmentPUT /transfers/77c9d78dc26a44748b3c99b96a{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s","transferState": "COMMITTED"}34200 Gotcha35Is there a dependent transfer?Yes, there is.36Is this dependency againstthe debtor party to the transfer?Yes, it is.37Create an obligation from thedebtor party to the partynamed in the dependency (the FXP)38Is the transfer denominated inthe currency of the payee receive amount?Yes, it is.39Create an obligation from theparty named in the dependencyto the creditor party for the transfer40The transfer succeeded.You can clear it in your ledgersPATCH /fxTransfers/77c9d78dc26a44748b3c99b96a{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s","transferState": "COMMITTED"}41Let's just check: does this match the stuff I sent?42It does. Great. I'll clear the conversion43200 GotchaLedger positions:PayerFSP has a debit of 300 BWPFDH_FX has a credit of 300 BWPFDH_FX has a debit of 48000 TZSPayeeFSP has a credit of 48000 TZS44Transfer is completePUT /transfers/77c9d78dc26a44748b3c99b96a45200 Gotcha46Transfer was completed successfullyPOST/PUT /transfers/response{"transferId": "d9ce59d4359843968630581bb0","homeTransactionId": "string","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"type": "CONSUMER","idType": "MSISDN","idValue": "2551234567890","displayName": "Yaro","fspId": "PayeeFSP""supportedCurrencies": [ "TZS" ]},"amountType": "SEND","currency": "BWP","amount": "300""currentState": "COMPLETED","getPartiesResponse": {<Same as the previous responses>},"conversionRequestId": "828cc75f1654415e8fcddf76cc","fxQuotesResponse": {<Same as the previous responses>},"fxQuotesResponseSource": "PayeeFSP","quoteId": "382987a875ce4037b500c475e0","quoteResponse": {<Same as the previous responses>},"quoteResponseSource": "PayeeFSP","fulfil": {"body": {"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s","transferState": "COMMITTED"},},}47Transfer was completed successfully48Commit the funds in my ledgers49Your transfer is successful \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.plantuml b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.plantuml new file mode 100644 index 000000000..c50bf7548 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.plantuml @@ -0,0 +1,182 @@ +@startuml PAYER_SEND_Agreement + +!$simplified = true +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = true +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f1654415e8fcddf76cc" +!$conversionId = "581f68efb54f416f9161ac34e8" +!$homeTransactionId = "string" +!$quoteId = "382987a875ce4037b500c475e0" +!$transactionId = "d9ce59d4359843968630581bb0" +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26a44748b3c99b96a" +!$determiningTransferId = "d9ce59d4359843968630581bb0" +!$transferId = "d9ce59d4359843968630581bb0" +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + + +title Payer DFSP requests quote from Payee DFSP +'actor "$senderName" as A1 +box "Payer DFSP" #LightBlue + participant "Payer DFSP" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +'box "FX provider" +' participant "FXP\nConnector" as FXP +'end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 +end box + +'actor "$receiverName" as A2 +autonumber + + +D1->>S1:Please quote for a transfer which sends $fxpTargetAmount $payeeCurrency.\n**POST /quotes** +deactivate D1 +!if ($simplified != true) +note left +POST /quotes + + { + "quoteId": "$quoteId", + "transactionId": "$transactionId", + "payee": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN", + "fspId": "$payeeFSPID" + }, + "name": "$receiverName", + "personalInfo": { + "complexName": { + "firstName": "$receiverFirstName", + "middleName": "$receiverMiddleName", + "lastName": "$receiverLastName" + }, + "dateOfBirth": "$receiverDOB", + "kycInformation": "" + }, + "supportedCurrencies": [ "$payeeCurrency" ] + }, + "payer": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payerMSISDN", + "fspId": "$payerFSPID" + }, + "name": "$senderName", + "personalInfo": { + "complexName": { + "firstName": "$senderFirstName", + "middleName": "$senderMiddleName", + "lastName": "$senderLastName" + }, + "dateOfBirth": "$senderDOB" + } + }, + "amountType": "SEND", + "amount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount" + }, + "converter": "PAYER", + "expiration": "$quotePayerExpiration" + } +end note +!endif +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif + +S1->>D2:**POST /quotes** +deactivate S1 +activate D2 +!if ($simplified != true) +D2-->>S1:202 I'll get back to you +!endif + +D2->D2:OK, so I will charge $payeeFee $payeeCurrency for this.\nNow I create terms of the transfer +!if ($simplified != true) +note right of D2 +{ + "quoteId": "$quoteId", + "transactionId": "$transactionId", + "payeeFspFeeAmount": "$payeeFee", + "payeeFspFeeAmountCurrency": "$payeeCurrency", + "payeeReceiveAmount": "$payeeReceiveAmount", + "payeeReceiveAmountCurrency": "$payeeCurrency", + "transferAmount": "$targetAmount", + "transferAmountCurrency": "$payeeCurrency" + "expiration": "$quotePayerExpiration" +} +end note +!endif +D2->D2:Now I will sign the transaction object +D2->>S1:Here's the signed quote +note right + **put /quotes/$quoteId** + { + "transferAmount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount"}, + "payeeReceiveAmount": { + "currency": "$payeeCurrency", + "amount": "$payeeReceiveAmount"}, + "payeeFspFee": { + "currency": "$payeeCurrency", + "amount": "$payeeFee"}, + "expiration": "$payeeQuoteExpiration", + "ilpPacket": "", + "condition": "$condition" + } +end note +deactivate D2 +activate S1 +!if ($simplified != true) +S1-->>D2:200 Gotcha +!endif +S1->>D1:Here's the signed quote\n**PUT /quotes/$quoteId** +deactivate S1 +activate D1 +!if ($simplified != true) +D1-->>S1:200 Gotcha +!endif +D1->D1:OK, I can see that there are going to be $payeeFee $payeeCurrency in charges. + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.svg b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.svg new file mode 100644 index 000000000..02cc3a5b4 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.svg @@ -0,0 +1 @@ +Payer DFSP requests quote from Payee DFSPPayer DFSPPayee DFSPPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchPayeeMojaloopConnectorPayeeMojaloopConnector1Please quote for a transfer which sends 48000 TZS.POST /quotes2POST /quotes3OK, so I will charge 4000 TZS for this.Now I create terms of the transfer4Now I will sign the transaction object5Here's the signed quoteput /quotes/382987a875ce4037b500c475e0{"transferAmount": {"currency": "TZS","amount": "48000"},"payeeReceiveAmount": {"currency": "TZS","amount": "44000"},"payeeFspFee": {"currency": "TZS","amount": "4000"},"expiration": "$payeeQuoteExpiration","ilpPacket": "<This is encoded transaction object.>","condition": "HOr22-H3AfTDHrSkP..."}6Here's the signed quotePUT /quotes/382987a875ce4037b500c475e07OK, I can see that there are going to be 4000 TZS in charges. \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.plantuml b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.plantuml new file mode 100644 index 000000000..2ebc792ac --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.plantuml @@ -0,0 +1,78 @@ +@startuml PAYER_SEND_Confirmation +!$simplified = true +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = true +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f1654415e8fcddf76cc" +!$conversionId = "581f68efb54f416f9161ac34e8" +!$homeTransactionId = "string" +!$quoteId = "382987a875ce4037b500c475e0" +!$transactionId = "d9ce59d4359843968630581bb0" +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26a44748b3c99b96a" +!$determiningTransferId = "d9ce59d4359843968630581bb0" +!$transferId = "d9ce59d4359843968630581bb0" +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + + +title Payer DFSP presents the terms to the Payer +actor "$senderName" as A1 +box "Payer DFSP" #LightBlue + participant "Payer DFSP" as D1 +end box + +'participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +'box "FX provider" +' participant "FXP\nConnector" as FXP +'end box + +'box "Payee DFSP" #LightBlue +' participant "Payee\nMojaloop\nConnector" as D2 +'end box + +'actor "$receiverName" as A2 +autonumber + +D1->A1: Present the terms of the transfer to the Payer +note right +Hi, $senderName: +I can do the transfer. +It'll cost you $totalChargesSourceCurrency $payerCurrency($totalChargesTargetCurrency $payeeCurrency) in fees +and $receiverName will receive $payeeReceiveAmount $payeeCurrency. +**Let me know if you want to go ahead?** +end note +A1->D1: Great! Yes please, go ahead + +D1->D1: Payer has accepted the terms please proceed +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.svg b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.svg new file mode 100644 index 000000000..b9161ef46 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.svg @@ -0,0 +1 @@ +Payer DFSP presents the terms to the PayerPayer DFSPJohnJohnPayer DFSPPayer DFSP1Present the terms of the transfer to the PayerHi, John:I can do the transfer.It'll cost you 55 BWP(10000 TZS) in feesand Yaro will receive 44000 TZS.Let me know if you want to go ahead?2Great! Yes please, go ahead3Payer has accepted the terms please proceed \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.plantuml b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.plantuml new file mode 100644 index 000000000..14b49b3e9 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.plantuml @@ -0,0 +1,193 @@ +@startuml PAYER_SEND_CurrencyConversion + +!$simplified = true +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = true +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f1654415e8fcddf76cc" +!$conversionId = "581f68efb54f416f9161ac34e8" +!$homeTransactionId = "string" +!$quoteId = "382987a875ce4037b500c475e0" +!$transactionId = "d9ce59d4359843968630581bb0" +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26a44748b3c99b96a" +!$determiningTransferId = "d9ce59d4359843968630581bb0" +!$transferId = "d9ce59d4359843968630581bb0" +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + + +title Payer DFSP requests conversion with SEND amount +' actor "$senderName" as A1 +box "Payer DFSP" #LightBlue + participant "Payer DFSP" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +box "FX provider" + participant "FXP\nConnector" as FXP +end box + +'box "Payee DFSP" #LightBlue +' participant "Payee\nMojaloop\nConnector" as D2 +'end box + +'actor "$receiverName" as A2 +autonumber + + +D1->D1:Hmmm. I can only send in $payerCurrency.\nI need to get some currency conversion +D1->D1: Look up the local cached FXPs\n that can provide the conversion +D1->D1:I'll ask FDH FX to perform my conversion + + +D1->>S1:Here is the initial version of the transfer.\nPlease quote me for the currency conversion. + +note left + **post /fxQuotes** + { + "conversionRequestId": "$conversionRequestId", + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$payerSendAmount"}, + "targetAmount": { + "currency": "$payeeCurrency"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + } + } +end note + +deactivate D1 +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +S1->>FXP:Here is the initial version of the transfer.\nPlease quote me for the currency conversion.\n**POST /fxQuote** +deactivate S1 +activate FXP +!if ($simplified != true) +FXP-->>S1:202 I'll get back to you +!endif + +note over FXP + I will add a $fxpChargesSource $payerCurrency fee for undertaking the conversion. + Now I'll set an expiry time, sign the quotation object, +end note +!if ($simplified != true) +note right of FXP + { + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [ + { + "chargeType": "string", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpChargesSource"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpChargesTarget"} + }]} + } +end note +!endif + +note over FXP + Now I'll sign the quotation object, + create an ILP prepare packet and return it in the intermediary object. + + **NOTE:** the ILP prepare packet contains the following items, all encoded: + - The amount being sent (i.e. in the source currency) + - An expiry time + - The condition + - The name of the FXP + - The content of the conversion terms +end note + + +FXP->>S1:Here's the signed conversion object +note right + **PUT /fxQuotes/$conversionRequestId** + { + "condition": "$fxCondition", + "conversionTerms": { + "conversionId": "$conversionId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [ + { + "chargeType": "string", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpChargesSource"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpChargesTarget"} + }]} + } +end note +deactivate FXP +activate S1 +!if ($simplified != true) +S1-->>FXP:200 Gotcha +!endif +S1->>D1:Here's the signed conversion object\n**PUT /fxQuotes/$conversionRequestId** +deactivate S1 +activate D1 +!if ($simplified != true) +D1-->>S1:Gotcha +!endif +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.svg b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.svg new file mode 100644 index 000000000..8078364ed --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.svg @@ -0,0 +1 @@ +Payer DFSP requests conversion with SEND amountPayer DFSPFX providerPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnector1Hmmm. I can only send in BWP.I need to get some currency conversion2Look up the local cached FXPsthat can provide the conversion3I'll ask FDH FX to perform my conversion4Here is the initial version of the transfer.Please quote me for the currency conversion.post /fxQuotes{"conversionRequestId": "828cc75f1654415e8fcddf76cc","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS"},"expiration": "2021-08-25T14:17:09.663+01:00"}}5Here is the initial version of the transfer.Please quote me for the currency conversion.POST /fxQuoteI will add a 33 BWP fee for undertaking the conversion.Now I'll set an expiry time, sign the quotation object,Now I'll sign the quotation object,create an ILP prepare packet and return it in the intermediary object. NOTE:the ILP prepare packet contains the following items, all encoded:- The amount being sent (i.e. in the source currency)- An expiry time- The condition- The name of the FXP- The content of the conversion terms6Here's the signed conversion objectPUT /fxQuotes/828cc75f1654415e8fcddf76cc{"condition": "GRzLaTP7DJ9t4P-a_B...","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"expiration": "2021-08-25T14:17:09.663+01:00""charges": [{"chargeType": "string","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}]}}7Here's the signed conversion objectPUT /fxQuotes/828cc75f1654415e8fcddf76cc \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.plantuml b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.plantuml new file mode 100644 index 000000000..bd3cb95f5 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.plantuml @@ -0,0 +1,259 @@ +@startuml PAYER_SEND_Transfer + +!$simplified = true +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = true +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f165441..." +!$conversionId = "581f68efb5..." +!$homeTransactionId = "string" +!$quoteId = "382987a875ce..." +!$transactionId = "d9ce59d4359843..." +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26..." +!$determiningTransferId = "d9ce59d4359843..." +!$transferId = "d9ce59d4359843..." +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + +title Remittance Transfer using Mojaloop FX APIs POC\nPayer DFSP requests conversion with SEND amount +actor "$senderName" as A1 +box "Payer DFSP" #LightBlue + participant "Payer DFSP" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +box "FX provider" + participant "FXP\nConnector" as FXP +end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 +end box + +actor "$receiverName" as A2 +autonumber + +D1->>S1:Please confirm your part\n of the transfer +deactivate D1 +note left +**POST /fxTransfers** +{ + "commitRequestId": "$commitRequestId", + "determiningTransferId": "$determiningTransferId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "condition": "$fxCondition" +} +end note +deactivate D2 +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +!if ($hideSwitchDetail != true) +S1->S1:OK, so this is an FX confirmation. +S1->S1: Is there any transfer with \ndeterminingTransactionId?\nNo, it does'nt. +!endif +S1->S1: Liquidity check and reserve\n on Payer DFSP's account +!if ($hideSwitchDetail != true) +note over S1 +**Reservations:** + +**$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency** +end note +!endif +S1->>FXP:Please confirm the currency \nconversion part of the transfer\n **POST /fxTransfers** +deactivate S1 +activate FXP +!if ($simplified != true) +FXP-->>S1:202 I'll get back to you +!endif +FXP->FXP:Reserve funds for FX conversion +FXP->>S1:Confirmed. Here's the fulfilment +note right +**PUT /fxTransfers/$commitRequestId** +{ + "fulfilment": "188909ceb6cd5c35d..", + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "RESERVED" +} +end note +deactivate FXP +activate S1 +!if ($simplified != true) +S1-->>FXP:200 Gotcha +!endif +!if ($simplified != true) +S1->S1:Check fulfilment matches and cancel if not. +alt Conversion failed +S1->FXP:Sorry. Conversion failed +note left +**PATCH /fxTransfers/$commitRequestId** +{ + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "ABORTED" +} +end note +activate FXP +FXP-->S1:Acknowledged +FXP->FXP:Remove any reservations or obligations +deactivate FXP + +S1->>D1:Sorry. Conversion failed +note right +**PUT /fxTransfers/$commitRequestId/error** +{ + "errorCode": "9999", + "errorDescription": "Whatever the error was" +} +end note +else Conversion succeeded +S1->D1:Conversion succeeded subject \nto transfer success\n**PUT /fxTransfers/$commitRequestId** + +end +!else +S1->D1:Conversion succeeded subject \nto transfer success\n**PUT /fxTransfers/$commitRequestId** +!endif +deactivate S1 +activate D1 +!if ($simplified != true) +D1-->S1:200 Gotcha +!endif + +D1->D1:OK, so that's all right\nNow I can send the transfer itself + +D1->S1:Please do the transfer\n **POST /transfers** +!if ($simplified != true) +note left +**POST /transfers** +{ + "transferId": "$transferId", + "payeeFsp": "$payeeFSPID", + "payerFsp": "$payerFSPID", + "amount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount"}, + "ilpPacket": "", + "condition": "$condition", + "expiration": "2016-05-24T08:38:08.699-04:00" +} +end note +!endif +deactivate D1 +activate S1 +!if ($simplified != true) +S1-->D1:202 I'll get back to you +!endif +!if ($hideSwitchDetail != true) +S1->S1:Is there a dependent transfer? \nYes +!endif +S1->S1:Perform liquidity check and \nreserve funds against creditor\n party to dependent transfer +note over S1 +**Reservations:** + +$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency +**$fxpID has a reservation of $targetAmount $payeeCurrency** +end note + +S1->D2:Please do the transfer\n**POST /transfers** +deactivate S1 +activate D2 +!if ($simplified != true) +D2-->S1:202 I'll get back to you +!endif +D2->D2:Let me check that the terms\n of the dependent transfer\nare the same as the ones I \nagreed to and that the \nfulfilment and condition match + +D2->A2: Hi $receiverName's, you got inbound \ntransfer $payeeReceiveAmount $payeeCurrency + +D2->>S1:Transfer is confirmed, here's the fulfilment +note right +**PUT /transfers/$commitRequestId** +{ + "completedTimestamp": "2021-08-25T14:17:08...", + "fulfilment": "mhPUT9ZAwd-BXLfeSd...", + "transferState": "COMMITTED" +} +end note +deactivate D2 +activate S1 +!if ($simplified != true) +S1-->>D2:200 Gotcha +!endif +!if ($hideSwitchDetail != true) +S1->S1:Is there a dependent transfer?\nYes, there is. +S1->S1:Is this dependency against the\n debtor party to the transfer?\nYes, it is. +S1->S1:Create an obligation from the\n debtor party to the party named \nin the dependency (the FXP) +S1->S1:Is the transfer denominated in\n the currency of the payee \nreceive amount? Yes, it is. +S1->S1:Create an obligation from the\n party named in the\n dependency to the creditor \nparty for the transfer +!else +S1->S1:Create obligations from the payer to the FXP and from FXP to the payee +!endif +note over S1 + **Ledger positions:** + $payerFSPID has a debit of $fxpSourceAmount $payerCurrency + $fxpID has a credit of $fxpSourceAmount $payerCurrency + $fxpID has a debit of $fxpTargetAmount $payeeCurrency + $payeeFSPID has a credit of $targetAmount $payeeCurrency +end note +S1->>FXP:The transfer succeeded.\nYou can clear it in your ledgers +note left +**PATCH /fxTransfers/$commitRequestId** +{ + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "transferState": "COMMITTED" +} +end note +activate FXP +FXP->FXP:Let's just check: does this match the stuff I sent? +FXP->FXP:It does. Great. I'll clear the conversion +FXP-->>S1:200 Gotcha +deactivate FXP +S1->>D1:Transfer is complete\n**PUT /transfers/$commitRequestId** +deactivate S1 +activate D1 +!if ($simplified != true) +D1-->S1:200 Gotcha +!endif + +D1->A1:Your transfer is successful +deactivate D1 + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.svg b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.svg new file mode 100644 index 000000000..e0b71bc2d --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.svg @@ -0,0 +1 @@ +Remittance Transfer using Mojaloop FX APIs POCPayer DFSP requests conversion with SEND amountPayer DFSPFX providerPayee DFSPJohnJohnPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorPayeeMojaloopConnectorPayeeMojaloopConnectorYaroYaro1Please confirm your partof the transferPOST /fxTransfers{"commitRequestId": "77c9d78dc26...","determiningTransferId": "d9ce59d4359843...","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"condition": "GRzLaTP7DJ9t4P-a_B..."}2OK, so this is an FX confirmation.3Is there any transfer withdeterminingTransactionId?No, it does'nt.4Liquidity check and reserveon Payer DFSP's accountReservations: PayerFSP has a reservation of 300 BWP5Please confirm the currencyconversion part of the transfer POST /fxTransfers6Reserve funds for FX conversion7Confirmed. Here's the fulfilmentPUT /fxTransfers/77c9d78dc26...{"fulfilment": "188909ceb6cd5c35d..","completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "RESERVED"}8Conversion succeeded subjectto transfer successPUT /fxTransfers/77c9d78dc26...9OK, so that's all rightNow I can send the transfer itself10Please do the transfer POST /transfers11Is there a dependent transfer?Yes12Perform liquidity check andreserve funds against creditorparty to dependent transferReservations: PayerFSP has a reservation of 300 BWPFDH_FX has a reservation of 48000 TZS13Please do the transferPOST /transfers14Let me check that the termsof the dependent transferare the same as the ones Iagreed to and that thefulfilment and condition match15Hi Yaro's, you got inboundtransfer 44000 TZS16Transfer is confirmed, here's the fulfilmentPUT /transfers/77c9d78dc26...{"completedTimestamp": "2021-08-25T14:17:08...","fulfilment": "mhPUT9ZAwd-BXLfeSd...","transferState": "COMMITTED"}17Is there a dependent transfer?Yes, there is.18Is this dependency against thedebtor party to the transfer?Yes, it is.19Create an obligation from thedebtor party to the party namedin the dependency (the FXP)20Is the transfer denominated inthe currency of the payeereceive amount? Yes, it is.21Create an obligation from theparty named in thedependency to the creditorparty for the transferLedger positions:PayerFSP has a debit of 300 BWPFDH_FX has a credit of 300 BWPFDH_FX has a debit of 48000 TZSPayeeFSP has a credit of 48000 TZS22The transfer succeeded.You can clear it in your ledgersPATCH /fxTransfers/77c9d78dc26...{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","transferState": "COMMITTED"}23Let's just check: does this match the stuff I sent?24It does. Great. I'll clear the conversion25200 Gotcha26Transfer is completePUT /transfers/77c9d78dc26...27Your transfer is successful \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.plantuml b/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.plantuml new file mode 100644 index 000000000..d1fe241fd --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.plantuml @@ -0,0 +1,337 @@ +@startuml Payer_SEND_ABORT_TransferPhase + +!$simplified = true +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = true +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f16..." +!$conversionId = "581f68efb..." +!$homeTransactionId = "string" +!$quoteId = "382987a875..." +!$transactionId = "d9ce59d435..." +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc2..." +!$determiningTransferId = "d9ce59d43..." +!$transferId = "d9ce59d435..." +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + + +title Currency Conversion Transfer Phase ABORT flows +actor "$senderName" as A1 +box "Payer DFSP" #LightBlue + participant "Payer DFSP" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +box "FX provider" + participant "FXP\nConnector" as FXP +end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 +end box + +actor "$receiverName" as A2 +autonumber + +D1->>S1:Please confirm your part of the transfer +note left +**POST /fxTransfers** +{ + "commitRequestId": "$commitRequestId", + "determiningTransferId": "$determiningTransferId", + "initiatingFsp": "$payerFSPID", + "counterPartyFsp": "$fxpID", + "amountType": "SEND", + "sourceAmount": { + "currency": "$payerCurrency", + "amount": "$fxpSourceAmount"}, + "targetAmount": { + "currency": "$payeeCurrency", + "amount": "$fxpTargetAmount"}, + "condition": "$fxCondition" +} +end note +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +deactivate D2 +!if ($hideSwitchDetail != true) +S1->S1:OK, so this is an FX confirmation. +S1->S1: Is there any transfer with determiningTransactionId?\nNo, it does'nt. +!endif +S1->S1: Liquidity check and reserve on Payer DFSP's account +!if ($hideSwitchDetail != true) +note over S1 +Reservations: + +**$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency** +end note +!endif +S1->>FXP:Please confirm the currency\n conversion part of the transfer\n **POST /fxTransfers** +deactivate S1 +activate FXP +!if ($simplified != true) +FXP-->>S1:202 I'll get back to you +!endif +alt conversion failed + FXP->>S1:Failed. + note right + **PUT /fxTransfers/$commitRequestId**/error + { + "errorInformation": { + "errorCode": "5100", + "errorDescription": "error message"} + } + ( **or** ) + **PUT /fxTransfers/$commitRequestId** + { + "conversionState": "ABORTED", + "extensionList": {"extension": [{"key": "reason","value": "some reason"}]} + } + end note +else conversion success + FXP->FXP:Reserve funds for FX conversion + FXP->>S1:Confirmed. Here's the fulfilment + note right + **PUT /fxTransfers/$commitRequestId** + { + "fulfilment": "188909ceb6cd5...", + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "RESERVED" + } + end note + deactivate FXP + S1->S1:Check fulfilment matches and cancel if not. + alt Conversion failed + S1->FXP:Sorry. Conversion failed + note left + **PATCH /fxTransfers/$commitRequestId** + { + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "ABORTED" + } + end note + activate FXP + FXP-->S1:Acknowledged + FXP->FXP:Remove any reservations or obligations + deactivate FXP + end +end +!if ($simplified != true) +S1-->>FXP:200 Gotcha +!endif +deactivate FXP + +alt Conversion failed + S1->S1: Abort the fxTransfer. Revert \nthe position changes involved in this\n fxTransfer. + note over S1 + **Note:** + Incase of payee side conversion, there will be dependent transfer. + But do not cancel that transfer as DFSP can try currency conversion with + another FXP. But make sure that while processing the fulfilment of the original + transfer, it shouldn't pickup this fxTransfer as the dependent transfer. + (Maybe by removing the entry from watchlist) + end note + S1->>D1:Sorry. Conversion failed + note right + **PUT /fxTransfers/$commitRequestId/error** + { + "errorInformation": { + "errorCode": "5100", + "errorDescription": "error message"} + } + ( **or** ) + **PUT /fxTransfers/$commitRequestId** + { + "conversionState": "ABORTED", + "extensionList": {"extension": [{"key": "reason","value": "some reason"}]} + } + end note +else Conversion succeeded + S1->D1:Conversion succeeded subject to\n transfer success\n**PUT /fxTransfers/77c9d78dc26a...** + activate D1 +end + +!if ($simplified != true) +D1-->S1:200 Gotcha +!endif +D1->D1:OK, so that's all right\nNow I can send the transfer itself + +D1->S1:Please do the transfer\n **POST /transfers** +deactivate D1 +!if ($simplified != true) +note over D1 +**POST /transfers** +{ + "transferId": "$transferId", + "payeeFsp": "$payeeFSPID", + "payerFsp": "$payerFSPID", + "amount": { + "currency": "$payeeCurrency", + "amount": "$targetAmount"}, + "ilpPacket": "", + "condition": "$condition", + "expiration": "2016-05-24T08:38:08.699-04:00" +} +end note +!endif +activate S1 +!if ($simplified != true) +S1-->D1:202 I'll get back to you +!endif +deactivate D1 +!if ($hideSwitchDetail != true) +S1->S1:Is there a dependent transfer? Yes +!endif +S1->S1:Perform liquidity check and reserve funds\nagainst creditor party to dependent transfer +note over S1 +Reservations: + +$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency +**$fxpID has a reservation of $targetAmount $payeeCurrency** +end note + +S1->D2:Please do the transfer\n**POST /transfers** +deactivate S1 +activate D2 +!if ($simplified != true) +D2-->S1:202 I'll get back to you +!endif +D2->D2:Let me check that the terms \nof the dependent transfer are \nthe same as the ones I agreed\n to and that the fulfilment and \ncondition match + +D2->A2: Hi $receiverName's, you got inbound \ntransfer $payeeReceiveAmount $payeeCurrency +deactivate D2 + +alt transfer failed + D2->>S1:Transfer is rejected + note right + **PUT /transfers/$commitRequestId**/error + { + "errorInformation": { + "errorCode": "5100", + "errorDescription": "error message"} + } + ( **or** ) + { + "transferState": "ABORETED" + } + end note + + activate S1 + !if ($simplified != true) + S1-->>D2:200 Gotcha + !endif + + S1->S1: Revert the position changes \ninvolved in this transfer + S1->S1: If there are dependency fxTransfers,\n abort the fxTransfers as well and \nrevert the position changes involved \nin those fxTransfers + + S1->>FXP: The linked transfer is failed.\nRemove any reservations or obligations + note left + **PATCH /fxTransfers/$commitRequestId** + { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "transferState": "ABORTED" + } + end note + activate FXP + FXP->FXP: Oops! + FXP-->>S1:200 Gotcha + deactivate FXP + S1->>D1:Transfer is complete\n**PUT /transfers/$commitRequestId/error** + activate D1 + !if ($simplified != true) + D1-->S1:200 Gotcha + !endif + deactivate S1 + D1->A1:Your transfer is failed + deactivate D1 +else transfer success + D2->>S1:Transfer is confirmed, here's the fulfilment + note right + **PUT /transfers/$commitRequestId** + { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd...", + "transferState": "COMMITTED" + } + end note + activate S1 + !if ($simplified != true) + S1-->>D2:200 Gotcha + !endif + + !if ($hideSwitchDetail != true) + S1->S1:Is there a dependent transfer?\nYes, there is. + S1->S1:Is this dependency against the\n debtor party to the transfer?\nYes, it is. + S1->S1:Create an obligation from the \ndebtor party to the party named \nin the dependency (the FXP) + S1->S1:Is the transfer denominated in \nthe currency of the payee receive\n amount?\nYes, it is. + S1->S1:Create an obligation from the \nparty named in the dependency\nto the creditor party for the transfer + !else + S1->S1:Create obligations from the payer to the FXP and from FXP to the payee + !endif + S1->>FXP:The transfer succeeded.\nYou can clear it in your ledgers + note left + **PATCH /fxTransfers/$commitRequestId** + { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd...", + "transferState": "COMMITTED" + } + end note + activate FXP + FXP->FXP:Let's just check: does this match the stuff I sent? + FXP->FXP:It does. Great. I'll clear the conversion + FXP-->>S1:200 Gotcha + deactivate FXP + note over S1 + **Ledger positions:** + $payerFSPID has a debit of $fxpSourceAmount $payerCurrency + $fxpID has a credit of $fxpSourceAmount $payerCurrency + $fxpID has a debit of $fxpTargetAmount $payeeCurrency + $payeeFSPID has a credit of $targetAmount $payeeCurrency + end note + S1->>D1:Transfer is complete\n**PUT /transfers/$commitRequestId** + activate D1 + !if ($simplified != true) + D1-->S1:200 Gotcha + !endif + deactivate S1 + + D1->A1:Your transfer is successful + deactivate D1 +end + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.svg b/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.svg new file mode 100644 index 000000000..5cc482459 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.svg @@ -0,0 +1 @@ +Remittance Transfer using Mojaloop FX APIs POCPayer DFSP requests conversion with SEND amountPayer DFSPFX providerPayee DFSPJohnJohnPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorPayeeMojaloopConnectorPayeeMojaloopConnectorYaroYaro1Please confirm your part of the transferPOST /fxTransfers{"commitRequestId": "77c9d78dc2...","determiningTransferId": "d9ce59d43...","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"condition": "GRzLaTP7DJ9t4P-a_B..."}2OK, so this is an FX confirmation.3Is there any transfer with determiningTransactionId?No, it does'nt.4Liquidity check and reserve on Payer DFSP's accountReservations: PayerFSP has a reservation of 300 BWP5Please confirm the currencyconversion part of the transfer POST /fxTransfersalt[conversion failed]6Failed.PUT /fxTransfers/77c9d78dc2.../error{"errorInformation": {"errorCode": "5100","errorDescription": "error message"}}(or)PUT /fxTransfers/77c9d78dc2...{"conversionState": "ABORTED","extensionList": {"extension": [{"key": "reason","value": "some reason"}]}}[conversion success]7Reserve funds for FX conversion8Confirmed. Here's the fulfilmentPUT /fxTransfers/77c9d78dc2...{"fulfilment": "188909ceb6cd5...","completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "RESERVED"}9Check fulfilment matches and cancel if not.alt[Conversion failed]10Sorry. Conversion failedPATCH /fxTransfers/77c9d78dc2...{"completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "ABORTED"}11Acknowledged12Remove any reservations or obligationsalt[Conversion failed]13Abort the fxTransfer. Revertthe position changes involved in thisfxTransfer.Note:Incase of payee side conversion, there will be dependent transfer.But do not cancel that transfer as DFSP can try currency conversion withanother FXP. But make sure that while processing the fulfilment of the originaltransfer, it shouldn't pickup this fxTransfer as the dependent transfer.(Maybe by removing the entry from watchlist)14Sorry. Conversion failedPUT /fxTransfers/77c9d78dc2.../error{"errorInformation": {"errorCode": "5100","errorDescription": "error message"}}(or)PUT /fxTransfers/77c9d78dc2...{"conversionState": "ABORTED","extensionList": {"extension": [{"key": "reason","value": "some reason"}]}}[Conversion succeeded]15Conversion succeeded subject totransfer successPUT /fxTransfers/77c9d78dc26a...16OK, so that's all rightNow I can send the transfer itself17Please do the transfer POST /transfers18Is there a dependent transfer? Yes19Perform liquidity check and reserve fundsagainst creditor party to dependent transferReservations: PayerFSP has a reservation of 300 BWPFDH_FX has a reservation of 48000 TZS20Please do the transferPOST /transfers21Let me check that the termsof the dependent transfer arethe same as the ones I agreedto and that the fulfilment andcondition match22Hi Yaro's, you got inboundtransfer 44000 TZSalt[transfer failed]23Transfer is rejectedPUT /transfers/77c9d78dc2.../error{"errorInformation": {"errorCode": "5100","errorDescription": "error message"}}(or){"transferState": "ABORETED"}24Revert the position changesinvolved in this transfer25If there are dependency fxTransfers,abort the fxTransfers as well andrevert the position changes involvedin those fxTransfers26The linked transfer is failed.Remove any reservations or obligationsPATCH /fxTransfers/77c9d78dc2...{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","transferState": "ABORTED"}27Oops!28200 Gotcha29Transfer is completePUT /transfers/77c9d78dc2.../error30Your transfer is failed[transfer success]31Transfer is confirmed, here's the fulfilmentPUT /transfers/77c9d78dc2...{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd...","transferState": "COMMITTED"}32Is there a dependent transfer?Yes, there is.33Is this dependency against thedebtor party to the transfer?Yes, it is.34Create an obligation from thedebtor party to the party namedin the dependency (the FXP)35Is the transfer denominated inthe currency of the payee receiveamount?Yes, it is.36Create an obligation from theparty named in the dependencyto the creditor party for the transfer37The transfer succeeded.You can clear it in your ledgersPATCH /fxTransfers/77c9d78dc2...{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd...","transferState": "COMMITTED"}38Let's just check: does this match the stuff I sent?39It does. Great. I'll clear the conversion40200 GotchaLedger positions:PayerFSP has a debit of 300 BWPFDH_FX has a credit of 300 BWPFDH_FX has a debit of 48000 TZSPayeeFSP has a credit of 48000 TZS41Transfer is completePUT /transfers/77c9d78dc2...42Your transfer is successful \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.plantuml b/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.plantuml new file mode 100644 index 000000000..d997b7c62 --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.plantuml @@ -0,0 +1,113 @@ +@startuml Payer_SEND_Discovery +!$simplified = true +!$hideSwitchDetail = false +!$advancedCoreConnectorFlow = true +!$senderName = "John" +!$senderLastName = "" +!$senderDOB = "1966-06-16" +!$receiverName = "Yaro" +!$receiverFirstName = "Yaro" +!$receiverMiddleName = "" +!$receiverLastName = "" +!$receiverDOB = "1966-06-16" +!$payerCurrency = "BWP" +!$payeeCurrency = "TZS" +!$payerFSPID = "PayerFSP" +!$payeeFSPID = "PayeeFSP" +!$fxpID = "FDH_FX" +!$payerMSISDN = "26787654321" +!$payeeMSISDN = "2551234567890" +!$payeeReceiveAmount = "44000" +!$payerSendAmount = "300" +!$payeeFee = "4000" +!$targetAmount = "48000" +!$fxpChargesSource = "33" +!$fxpChargesTarget = "6000" +!$fxpSourceAmount = "300" +!$fxpTargetAmount = "48000" +!$totalChargesSourceCurrency = "55" +!$totalChargesTargetCurrency = "10000" +!$conversionRequestId = "828cc75f1654415e8fcddf76cc" +!$conversionId = "581f68efb54f416f9161ac34e8" +!$homeTransactionId = "string" +!$quoteId = "382987a875ce4037b500c475e0" +!$transactionId = "d9ce59d4359843968630581bb0" +!$quotePayerExpiration = "2021-08-25T14:17:09.663+01:00" +!$quotePayeeExpiration = "2021-08-25T14:17:09.663+01:00" +!$commitRequestId = "77c9d78dc26a44748b3c99b96a" +!$determiningTransferId = "d9ce59d4359843968630581bb0" +!$transferId = "d9ce59d4359843968630581bb0" +!$fxCondition = "GRzLaTP7DJ9t4P-a_B..." +!$condition = "HOr22-H3AfTDHrSkP..." + + +title Currency Conversion Discovery +actor "$senderName" as A1 +box "Payer DFSP" #LightBlue + participant "Payer DFSP" as D1 +end box + +participant "Mojaloop Switch" as S1 + +'box "Discovery Service" #LightYellow +' participant "ALS Oracle" as ALS +'end box + +'box "FX provider" +' participant "FXP\nConnector" as FXP +'end box + +box "Payee DFSP" #LightBlue + participant "Payee\nMojaloop\nConnector" as D2 +end box + +'actor "$receiverName" as A2 +autonumber + +A1->D1:I'd like to pay $receiverName\n$payerSendAmount $payerCurrency, please + +activate D1 +D1->>S1:I want to send to MSISDN $payeeMSISDN\n**GET /parties/MSISDN/$payeeMSISDN** +deactivate D1 +activate S1 +!if ($simplified != true) +S1-->>D1:202 I'll get back to you +!endif +S1->S1:Who owns MSISDN $payeeMSISDN?\nIt's $payeeFSPID +S1->>D2:Do you own MSISDN $payeeMSISDN? +deactivate S1 +activate D2 +!if ($simplified != true) +D2-->>S1:202 I'll get back to you +!endif +D2->D2: Check Sanction list status & trigger a refresh of the status +D2->>S1:Yes, it's $receiverName. He can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +note right + **PUT /parties** + { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "$payeeMSISDN", + "fspId": "$payeeFSPID"}, + "name": "$receiverName", + "supportedCurrencies": [ "$payeeCurrency" ] + } +end note + +deactivate D2 +activate S1 +!if ($simplified != true) +S1-->>D2:200 Gotcha +!endif +S1->>D1:Yes, it's $receiverName. He can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +deactivate S1 +activate D1 +!if ($simplified != true) +D1-->>S1:200 Gotcha +!endif + +D1->A1: Hi, $senderName: The number belongs to $receiverName \nLet me know if you want to go ahead +deactivate D1 +A1->D1: Payer has accepted the party information + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.svg b/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.svg new file mode 100644 index 000000000..a4cc63b7f --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.svg @@ -0,0 +1 @@ +Currency Conversion DiscoveryPayer DFSPPayee DFSPJohnJohnPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchPayeeMojaloopConnectorPayeeMojaloopConnector1I'd like to pay Yaro300 BWP, please2I want to send to MSISDN 2551234567890GET /parties/MSISDN/25512345678903Who owns MSISDN 2551234567890?It's PayeeFSP4Do you own MSISDN 2551234567890?5Check Sanction list status & trigger a refresh of the status6Yes, it's Yaro. He can receive in TZSPUT /parties/MSISDN/2551234567890PUT /parties{"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro","supportedCurrencies": [ "TZS" ]}7Yes, it's Yaro. He can receive in TZSPUT /parties/MSISDN/25512345678908Hi, John: The number belongs to YaroLet me know if you want to go ahead9Payer has accepted the party information \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/README.md b/docs/fr/product/features/CurrencyConversion/README.md new file mode 100644 index 000000000..7c044813e --- /dev/null +++ b/docs/fr/product/features/CurrencyConversion/README.md @@ -0,0 +1,9 @@ +--- +sidebarTitle: Diagrammes de conversion +--- + +# Diagrammes de conversion de devises + +Ce dossier contient les diagrammes de séquence au format **PlantUML** (fichiers `.plantuml`) et leurs exports **SVG** utilisés par la page [Change étranger – conversion de devises](../fx.md). + +Pour modifier un schéma, éditez le fichier `.plantuml` correspondant puis régénérez le SVG avec [PlantUML](https://plantuml.com/) afin de conserver une mise en page cohérente (les libellés plus longs peuvent nécessiter un réajustement manuel des positions dans le SVG généré). diff --git a/docs/fr/product/features/FXP.svg b/docs/fr/product/features/FXP.svg new file mode 100644 index 000000000..396e2ff2a --- /dev/null +++ b/docs/fr/product/features/FXP.svg @@ -0,0 +1,4 @@ + + + +
Scheme
Scheme
DFSP 1
DFSP 1
DFSP 2
DFSP 2
FXP
FXP
\ No newline at end of file diff --git a/docs/fr/product/features/ForeignExchange.md b/docs/fr/product/features/ForeignExchange.md new file mode 100644 index 000000000..af2cf4701 --- /dev/null +++ b/docs/fr/product/features/ForeignExchange.md @@ -0,0 +1,55 @@ +--- +sidebarTitle: Change +--- + +# Change + +Un système de paiement moderne doit pouvoir prendre en charge des transactions dans plusieurs devises ; Mojaloop ne fait pas exception, avec une prise en charge native de plusieurs devises de transaction. Un principe important est que ces devises restent indépendantes : une transaction débitée sur le débiteur en devise X est toujours créditée sur le créancier en devise X. + +Il est toutefois parfois nécessaire de créer un « pont » entre ces devises. C’est le rôle du change, avec l’intervention d’un tiers appelé, dans le vocabulaire Mojaloop, fournisseur de change (*Foreign Exchange Provider*, FXP). + +Cette fonction n’est pas nécessairement liée à l’envoi transfrontalier de fonds : une personne dans une même juridiction peut légitimement détenir des fonds dans plusieurs devises, d’autant plus dans les pays où plusieurs devises circulent couramment. + +Le schéma suivant illustre la mise en œuvre dans Mojaloop. + +![Change](./FXP.svg) + +À ce jour, Mojaloop ne prend en charge qu’un seul modèle économique pour le change : le modèle « le payeur décide » (*Payer Decides*). + +### Le payeur décide + +1. Un client du DFSP1 souhaite envoyer 10 unités de la devise X au bénéficiaire. +2. La phase de découverte indique que le compte du bénéficiaire est hébergé par le DFSP2. +3. Le DFSP1 propose la transaction au DFSP2, qui indique que le paiement doit être effectué en devise Y. +4. Le DFSP1 envoie 10 X au FXP, qui transmet la contre-valeur en Y au DFSP2, puis le versement au bénéficiaire (hors frais, écart de change, etc.). + +Les détails d’implémentation de cette capacité de change figurent dans la [**documentation FX**](./fx.md). + +D’autres modèles, plus complexes, seront pris en charge dans une prochaine version. Il est notamment prévu : + +### Plusieurs FXP + +1. Un client du DFSP1 souhaite envoyer 10 unités de la devise X au bénéficiaire. +2. La découverte montre que le compte du bénéficiaire est hébergé par le DFSP2. +3. Le DFSP1 propose la transaction au DFSP2, qui indique que le paiement doit être effectué en devise Y. +4. Le DFSP1 sollicite plusieurs FXP, retient celui offrant les conditions les plus favorables, envoie 10 X à ce FXP, qui transmet la contre-valeur en Y au DFSP2 et règle le bénéficiaire (hors frais, écart de change, etc.). + +### Le bénéficiaire décide + +1. Un client du DFSP1 souhaite envoyer 10 unités de la devise X au bénéficiaire. +2. La découverte montre que le compte du bénéficiaire est hébergé par le DFSP2. +3. Le DFSP1 propose la transaction au DFSP2, qui indique que le paiement doit être effectué dans la devise du payeur, X. +4. Le DFSP1 envoie 10 X au DFSP2. +5. Le DFSP2 sollicite plusieurs FXP, en retient un selon les conditions les plus favorables et envoie 10 X à ce FXP, qui renvoie la contre-valeur en Y au DFSP2, lequel règle ensuite le bénéficiaire (hors frais, écart de change, etc.). + +Pour la suite du lien entre capacités inter-schémas et change, voir les [**transactions transfrontalières**](./CrossBorder.md). + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|22 avril 2025| Paul Makin|Ajout de l’historique des versions| +|1.0|13 mars 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/InterconnectingSchemes.md b/docs/fr/product/features/InterconnectingSchemes.md new file mode 100644 index 000000000..2ff11a9b4 --- /dev/null +++ b/docs/fr/product/features/InterconnectingSchemes.md @@ -0,0 +1,36 @@ +--- +sidebarTitle: Interconnexion de schémas +--- + +# Interconnexion de schémas de paiement + +Mojaloop, dans un déploiement unique, sert à exploiter un ou plusieurs schémas de paiement sur une même plateforme. Il est courant qu’un pays héberge plusieurs schémas sur des plateformes distinctes, répondant à des besoins sectoriels différents. + +À mesure qu’un schéma se développe, le besoin d’interconnexion ou d’interopérabilité avec d’autres schémas nationaux augmente. Mojaloop y répond par un mécanisme appelé « Interscheme ». + +L’approche Interscheme de Mojaloop s’appuie sur un type particulier de participant DFSP : le *Proxy*. Un Proxy est un DFSP léger présent dans les deux schémas interconnectés, avec les caractéristiques suivantes : +- le Proxy ne traite pas les messages ; il les relaie entre les schémas connectés ; +- pour préserver la non-répudiation entre schémas, le proxy ne participe pas à l’accord sur les conditions, ce qui contribue à réduire les coûts ; +- il ne joue aucun rôle dans la compensation des transactions. + +Ainsi, un Proxy conserve les trois phases d’un transfert Mojaloop et assure la non-répudiation de bout en bout. L’accord conclu lors d’un transfert reste donc entre les DFSP d’origine et de réception, quel que soit le schéma auquel ils sont rattachés. + +![Interconnexion inter-schémas simple](./SimpleInterscheme.svg) + +Par ailleurs, le modèle d’interconnexion Mojaloop prend en charge la découverte inter-schémas : un alias utilisé dans un schéma peut servir à router un paiement depuis un autre. + +La version actuelle de Mojaloop ne prend en charge que l’interconnexion de schémas basés sur Mojaloop. Des travaux visent à étendre cette capacité à d’autres schémas de paiement connectés à un schéma Mojaloop. + +Les détails d’implémentation de cette interconnexion figurent dans la [**documentation inter-schéma**](./interscheme.md). + +Pour le lien avec le [**change**](./ForeignExchange.md) et les [**transactions transfrontalières**](./CrossBorder.md), voir les pages correspondantes. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|22 avril 2025| Paul Makin|Ajout de l’historique ; précisions rédactionnelles| +|1.0|14 avril 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/Interscheme/Interscheme-Agreement.plantuml b/docs/fr/product/features/Interscheme/Interscheme-Agreement.plantuml new file mode 100644 index 000000000..96faa68f5 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-Agreement.plantuml @@ -0,0 +1,72 @@ +@startuml Interscheme-Agreement + +title Interscheme - Agreement + + +participant "Payer DFSP" as payerDFSP +box Scheme A #LightBlue + participant "Mojaloop\nScheme A" as schemeA + participant "Proxy Cache\nScheme A" as pc_A +end box +participant "Proxy AB" as xnp +box Scheme B #d1e0c3 + participant "Mojaloop\nScheme B" as schemeB + participant "Proxy Cache\nScheme B" as pc_B +end box +participant "Payee DFS" as payeeDFSP + +autonumber 1 "[0]" + +payerDFSP ->> schemeA: POST /quotes +schemeA -->> payerDFSP: 202 OK +note left +header + source: payerDFSP + destination: payeeDFSP +JWS signed by payerDFSP +end note +schemeA -> pc_A: Destination not in Scheme\n Lookup proxy for payeeDFSP = Proxy AB +schemeA ->> xnp: POST /quotes +xnp ->> schemeB: POST /quotes\nmessage unmodified +note left +header + source: payerDFSP + destination: payeeDFSP + fxpiop-proxy: proxyAB +JWS signed by payerDFSP +end note +schemeB -->> xnp: 202 OK +xnp -->> schemeA: 202 OK +schemeB->>payeeDFSP: POST /quotes +payeeDFSP-->>schemeB: 202 OK +note right +Checks JWS signed by payerDFSP +end note +payeeDFSP->>schemeB: PUT /quotes +note right +header + source: payeeDFSP + destination: payerDFSP +JWS signed by payeeDFSP +end note +schemeB-->>payeeDFSP: 200 OK +schemeB -> pc_B: Destination not in Scheme\n Lookup proxy for payerDFSP = Proxy AB +schemeB->>xnp: PUT /quotes +xnp->>schemeA: PUT /quotes\nmessage unmodified +note right +header + source: payeeDFSP + destination: payerDFSP + fxpiop-proxy: proxyAB +JWS signed by payeeDFSP +end note +schemeA-->>xnp: 200 OK +xnp-->>schemeB: 200 OK +schemeA->>payerDFSP: PUT /quotes +note left +Checks JWS signed by payeeDFSP +end note +payerDFSP -->> schemeA: 200 OK + + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-Agreement.svg b/docs/fr/product/features/Interscheme/Interscheme-Agreement.svg new file mode 100644 index 000000000..73a3e83e4 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-Agreement.svg @@ -0,0 +1 @@ +Interscheme - AgreementScheme AScheme BPayer DFSPPayer DFSPMojaloopScheme AMojaloopScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABMojaloopScheme BMojaloopScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFS[1]POST /quotes[2]202 OKheadersource: payerDFSPdestination: payeeDFSPJWS signed by payerDFSP[3]Destination not in SchemeLookup proxy for payeeDFSP = Proxy AB[4]POST /quotes[5]POST /quotesmessage unmodifiedheadersource: payerDFSPdestination: payeeDFSPfxpiop-proxy: proxyABJWS signed by payerDFSP[6]202 OK[7]202 OK[8]POST /quotes[9]202 OKChecks JWS signed by payerDFSP[10]PUT /quotesheadersource: payeeDFSPdestination: payerDFSPJWS signed by payeeDFSP[11]200 OK[12]Destination not in SchemeLookup proxy for payerDFSP = Proxy AB[13]PUT /quotes[14]PUT /quotesmessage unmodifiedheadersource: payeeDFSPdestination: payerDFSPfxpiop-proxy: proxyABJWS signed by payeeDFSP[15]200 OK[16]200 OK[17]PUT /quotesChecks JWS signed by payeeDFSP[18]200 OK \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.plantuml b/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.plantuml new file mode 100644 index 000000000..d77655558 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.plantuml @@ -0,0 +1,114 @@ +@startuml Interscheme-ErrorCases + +title Interscheme - Error Cases + +participant "Payer DFSP" as payerDFSP +box "Scheme A" #LightBlue + participant "ALS\nScheme A" as schemeA + participant "Proxy Cache\nScheme A" as pc_A +end box +participant "Proxy AB" as xnp +box "Scheme B" #d1e0c3 + participant "ALS\nScheme B" as schemeB + participant "Proxy Cache\nScheme B" as pc_B +end box +participant "Payee DFS" as payeeDFSP + +autonumber 1 "[0]" + +== POST == +payerDFSP ->> schemeA: POST/GET/PATCH/PUT /xxx +note left +header + source: payerDFSP + destination: payeeDFSP +end note + +alt if OpenAPI Error + schemeA -->> payerDFSP: 400 Bad Request +end +schemeA-->>payerDFSP: 202 OK + + alt if error in schemeA + schemeA ->> payerDFSP: PUT /xxx/{ID}/error + note right + Error Codes: 2xxx, 3xxx, 4xxx, 5xxx + end note + payerDFSP -->> schemeA: 200 OK + end + + schemeA -> pc_A: lookup proxy for payeeDFSP = Proxy AB + alt if not in proxy cache + schemeA ->> payerDFSP: PUT /xxx/{ID}/error + note right + Error Code: 3201 + end note + payerDFSP -->> schemeA: 200 OK + end + schemeA ->> xnp: POST/GET/PATCH/PUT /xxx + + alt if error in xnp + xnp -->> schemeA: 503 { ErrorCode: 3100} + + xnp ->> schemeA: PUT /xxx/{ID}/error + note right + header + source: Proxy AB + destination: payerDFSP + JWS Signed by Proxy AB + Error Codes: 3100 + end note + schemeA -->> xnp: 200 OK + schemeA ->> payerDFSP: PUT /xxx/{ID}/error + payerDFSP -->> schemeA: 200 OK + end + + xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note + + xnp ->> schemeB: POST/GET/PATCH/PUT /xxx + schemeB -->> xnp: 202 OK + xnp -->> schemeA: 202 OK + + alt if error in schemeB + schemeB ->> xnp: PUT /xxx/{ID}/error + note right + Error Codes: 2xxx, 3xxx, 4xxx, 5xxx + end note + xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note + xnp ->> schemeA: PUT /xxx/{ID}/error + schemeA -->> xnp: 200 OK + xnp -->> schemeB: 200 OK + schemeA ->> payerDFSP: PUT /xxx/{ID}/error + payerDFSP -->> schemeA: 200 OK + end + + schemeB ->> payeeDFSP: POST/GET/PATCH/PUT /xxx + payeeDFSP -->> schemeB: 200 OK + + alt if error in payeeDFSP + payeeDFSP->> schemeB: PUT /xxx/{ID}/error + note right + header destination: PayerDFSP + Error Codes: 5xxx + end note + schemeB -->> payeeDFSP: 200 OK + schemeB -> schemeB: Lookup proxy for payerDFSP = Proxy AB + schemeB ->> xnp: PUT /xxx/{ID}/error + xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note + xnp ->> schemeA: PUT /xxx/{ID}/error + schemeA -->> xnp: 200 OK + xnp -->> schemeB: 200 OK + schemeA ->> payerDFSP: PUT /xxx/{ID}/error + payerDFSP -->> schemeA: 200 OK + end + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.svg b/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.svg new file mode 100644 index 000000000..8c6b3db2c --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.svg @@ -0,0 +1 @@ +Interscheme - Error CasesScheme AScheme BPayer DFSPPayer DFSPALSScheme AALSScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABALSScheme BALSScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFSPOST[1]POST/GET/PATCH/PUT /xxxheadersource: payerDFSPdestination: payeeDFSPalt[if OpenAPI Error][2]400 Bad Request[3]202 OKalt[if error in schemeA][4]PUT /xxx/{ID}/errorError Codes: 2xxx, 3xxx, 4xxx, 5xxx[5]200 OK[6]lookup proxy for payeeDFSP = Proxy ABalt[if not in proxy cache][7]PUT /xxx/{ID}/errorError Code: 3201[8]200 OK[9]POST/GET/PATCH/PUT /xxxalt[if error in xnp][10]503 { ErrorCode: 3100}[11]PUT /xxx/{ID}/errorheadersource: Proxy ABdestination: payerDFSPJWS Signed by Proxy ABError Codes: 3100[12]200 OK[13]PUT /xxx/{ID}/error[14]200 OK[15]Add headerfxpiop-proxy = "Proxy AB"[16]POST/GET/PATCH/PUT /xxx[17]202 OK[18]202 OKalt[if error in schemeB][19]PUT /xxx/{ID}/errorError Codes: 2xxx, 3xxx, 4xxx, 5xxx[20]Add headerfxpiop-proxy = "Proxy AB"[21]PUT /xxx/{ID}/error[22]200 OK[23]200 OK[24]PUT /xxx/{ID}/error[25]200 OK[26]POST/GET/PATCH/PUT /xxx[27]200 OKalt[if error in payeeDFSP][28]PUT /xxx/{ID}/errorheader destination: PayerDFSPError Codes: 5xxx[29]200 OK[30]Lookup proxy for payerDFSP = Proxy AB[31]PUT /xxx/{ID}/error[32]Add headerfxpiop-proxy = "Proxy AB"[33]PUT /xxx/{ID}/error[34]200 OK[35]200 OK[36]PUT /xxx/{ID}/error[37]200 OK \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.plantuml b/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.plantuml new file mode 100644 index 000000000..f29ce2212 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.plantuml @@ -0,0 +1,57 @@ +@startuml Interscheme-GETTransfer + +title Interscheme - GET Transfers + +participant "Payer DFSP" as payerDFSP +box Scheme A #LightBlue + participant "Mojaloop\nScheme A" as schemeA + participant "Proxy Cache\nScheme A" as pc_A +end box +participant "Proxy AB" as xnp +box Scheme B #d1e0c3 + participant "Mojaloop\nScheme B" as schemeB + participant "Proxy Cache\nScheme B" as pc_B +end box +participant "Payee DFS" as payeeDFSP + +autonumber 1 "[0]" + +payerDFSP ->> schemeA: GET /transfers/1234 +note left +header + source: payerDFSP + destination: payeeDFSP +JWS signed by payerDFSP +end note +schemeA -->> payerDFSP: 202 OK +schemeA -> schemeA: Load transfer information + + +schemeA->>payerDFSP: PUT /transfers/1234 +note right +header + source: schemeB + destination: payerDFSP +JWS signed by schemeB +end note +payerDFSP -->> schemeA: 200 OK + +payeeDFSP->>schemeB: GET /transfers/1234 +note right +header + source: scheme A +JWS signed by schemeA +end note +schemeB -->> payeeDFSP: 202 OK +schemeB -> schemeB: Load transfer informtaion\nand check if payeeDFSP is in scheme +schemeB->>payeeDFSP: Yes; return information\nPUT /transfers/1234 +note left +header + source: schemeB + destination: payeeDFSP +JWS signed by schemeB +end note +schemeB -->> payeeDFSP: 200 OK + + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.svg b/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.svg new file mode 100644 index 000000000..d332a1cc5 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.svg @@ -0,0 +1 @@ +Interscheme - GET TransfersScheme AScheme BPayer DFSPPayer DFSPMojaloopScheme AMojaloopScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABMojaloopScheme BMojaloopScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFS[1]GET /transfers/1234headersource: payerDFSPdestination: payeeDFSPJWS signed by payerDFSP[2]202 OK[3]Load transfer information[4]PUT /transfers/1234headersource: schemeBdestination: payerDFSPJWS signed by schemeB[5]200 OK[6]GET /transfers/1234headersource: scheme AJWS signed by schemeA[7]202 OK[8]Load transfer informtaionand check if payeeDFSP is in scheme[9]Yes; return informationPUT /transfers/1234headersource: schemeBdestination: payeeDFSPJWS signed by schemeB[10]200 OK \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-Happypath.plantuml b/docs/fr/product/features/Interscheme/Interscheme-Happypath.plantuml new file mode 100644 index 000000000..84e0b4ebe --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-Happypath.plantuml @@ -0,0 +1,106 @@ +@startuml Interscheme-Happypath + +title Interscheme - General Pattern + +participant "Payer DFSP" as payerDFSP +box "Scheme A" #LightBlue + participant "Handler\nScheme A" as schemeA + participant "Proxy Cache\nScheme A" as pc_A +end box +participant "Proxy AB" as xnp +box "Scheme B" #d1e0c3 + participant "Handler\nScheme B" as schemeB + participant "Proxy Cache\nScheme B" as pc_B +end box +participant "Payee DFS" as payeeDFSP + +autonumber 1 "[0]" + +== POST == +payerDFSP ->> schemeA: POST /xxx +note left +header + source: payerDFSP + destination: payeeDFSP +body + {ID: 1234} +end note +schemeA-->>payerDFSP: http 202 response +schemeA -> pc_A: Destination not in scheme:\n payeeDFSP has a proxy mapped\n need to send to 'Proxy AB' +schemeA ->> xnp: POST /xxx +xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note +xnp ->> schemeB: POST /xxx +note left +Message if forwarded to schemeB unmodified +end note + +schemeB -->> xnp: 202 OK +xnp -->> schemeA: 202 OK + +schemeB ->> payeeDFSP: POST /xxx +payeeDFSP-->>schemeB: http 202 response + +== GET == +payerDFSP -> schemeA: GET /xxx/{ID} \nwithout destination +note left + source: payerDFSP +end note +schemeA-->>payerDFSP: http 202 response + +schemeA->schemeA: lookup if ID result and triggers put + +payerDFSP -> schemeA: GET /xxx/{ID} \nwith destination +note left + source: payerDFSP + destination: payeeDFSP +end note +schemeA-->>payerDFSP: http 202 response + +schemeA -> pc_A: Destination not in scheme:\n payeeDFSP has a proxy mapped\n need to send to 'Proxy AB' +schemeA ->> xnp: GET /xxx +xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note +xnp ->> schemeB: GET /xxx +note left +Message if forwarded to schemeB unmodified +end note +schemeB -->> xnp: 202 OK +xnp -->> schemeA: 202 OK + +schemeB ->> payeeDFSP: GET /xxx +payeeDFSP-->>schemeB: http 202 response + + + +== PUT == + + +payeeDFSP -> schemeB: PUT /xxx +note right + source: payeeDFSP + destination: payerDFSP +end note +schemeB-->>payeeDFSP: http 200 response + +schemeB -> pc_B: Destination not in scheme:\n payerDFSP has a proxy mapped\n need to send to 'Proxy AB' +schemeB -> xnp: PUT /xxx +xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note +xnp -> schemeA: PUT /xxx +note right +Message if forwarded to schemeA unmodified +end note +schemeA -->> xnp: 200 OK +xnp -->> schemeB: 200 OK + +schemeA -> payerDFSP: PUT /xxx +payerDFSP-->>schemeA: http 200 response + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-Happypath.svg b/docs/fr/product/features/Interscheme/Interscheme-Happypath.svg new file mode 100644 index 000000000..2af53e645 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-Happypath.svg @@ -0,0 +1 @@ +Interscheme - General PatternScheme AScheme BPayer DFSPPayer DFSPHandlerScheme AHandlerScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABHandlerScheme BHandlerScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFSPOST[1]POST /xxxheadersource: payerDFSPdestination: payeeDFSPbody{ID: 1234}[2]http 202 response[3]Destination not in scheme:payeeDFSP has a proxy mappedneed to send to 'Proxy AB'[4]POST /xxx[5]Add headerfxpiop-proxy = "Proxy AB"[6]POST /xxxMessage if forwarded to schemeB unmodified[7]202 OK[8]202 OK[9]POST /xxx[10]http 202 responseGET[11]GET /xxx/{ID}without destinationsource: payerDFSP[12]http 202 response[13]lookup if ID result and triggers put[14]GET /xxx/{ID}with destinationsource: payerDFSPdestination: payeeDFSP[15]http 202 response[16]Destination not in scheme:payeeDFSP has a proxy mappedneed to send to 'Proxy AB'[17]GET /xxx[18]Add headerfxpiop-proxy = "Proxy AB"[19]GET /xxxMessage if forwarded to schemeB unmodified[20]202 OK[21]202 OK[22]GET /xxx[23]http 202 responsePUT[24]PUT /xxxsource: payeeDFSPdestination: payerDFSP[25]http 200 response[26]Destination not in scheme:payerDFSP has a proxy mappedneed to send to 'Proxy AB'[27]PUT /xxx[28]Add headerfxpiop-proxy = "Proxy AB"[29]PUT /xxxMessage if forwarded to schemeA unmodified[30]200 OK[31]200 OK[32]PUT /xxx[33]http 200 response \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.plantuml b/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.plantuml new file mode 100644 index 000000000..43daf9c05 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.plantuml @@ -0,0 +1,140 @@ +@startuml Interscheme-OnDemandDiscovery + +title Interscheme - On Demand Discovery + +participant "Payer DFSP" as payerDFSP +box "Scheme A" #LightBlue + participant "ALS\nScheme A" as ALS_A + participant "Proxy Cache\nScheme A" as pc_A + participant "Oracle\nScheme A" as Oracle_A +end box +participant "other Proxies" as dfspsA +participant "Proxy AB" as xnp +box "Scheme B" #d1e0c3 + participant "ALS\nScheme B" as ALS_B + participant "Proxy Cache\nScheme B" as pc_B + participant "Oracle\nScheme B" as Oracle_B +end box +participant "Payee DFS" as payeeDFSP + +autonumber 1 "[0]" + +payerDFSP ->> ALS_A: GET /parties/{Type}/{ID} +note left + header source = payerDFSP +end note +ALS_A -->> payerDFSP: 202 OK +ALS_A-> Oracle_A: GET /participant/{ID} +alt if not found in Oracle + +Oracle_A--> ALS_A: no dfsp found +ALS_A ->> ALS_A: Are there any proxies\n in Scheme A? + ALS_A ->> ALS_A: Cache Proxies that \nwill receive messages + note left + SentToProxies[{ID}] = + {['Proxy AB', 'Proxy CD', 'Proxy EF']} + end note + + loop for all Proxys in Scheme A and not source + alt if Proxy AB + ALS_A ->> xnp: GET /parties/{Type}/{ID} + xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note + + xnp ->> ALS_B: GET /parties/{Type}/{ID} + ALS_B -->> xnp: 202 OK + xnp -->> ALS_A: 202 OK + ALS_B -> pc_B: Source not in Scheme: \nfxpiop-proxy = "Proxy AB"\nAdd 'Payer DFSP' to\n 'Proxy AB' mapping + pc_B -> pc_B: Add new mapping \nto cache + note left + Payer DFSP : Proxy AB + end note + + ALS_B-> Oracle_B: GET /participant/{ID} + Oracle_B--> ALS_B: dfps = payeeDFSP + ALS_B ->> payeeDFSP: GET /parties/{Type}/{ID} + payeeDFSP -->> ALS_B: 202 OK + payeeDFSP ->> ALS_B: PUT /parties/{ID} + note right + header destination = payerDFSP + source = payeeDFSP + end note + ALS_B -->> payeeDFSP: 200 Ok + ALS_B -> pc_B: Lookup payerDFSP proxy + ALS_B ->> xnp: PUT /parties/{ID} + xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note + + xnp ->> ALS_A: PUT /parties/{ID} + ALS_A -->> xnp: 200 OK + xnp -->> ALS_B: 200 OK + ALS_A -> pc_A: Source not in Scheme: \nfxpiop-proxy = "Proxy AB"\nAdd 'Payee DFSP' to \n'Proxy AB' mapping + pc_A -> pc_A: New mapping\nCheck JWS \nsignature &\n Add to cache + note left + Payee DFSP : Proxy AB + end note + ALS_A -> Oracle_A: Update Oracle with mapping\n**POST /participants/{Type}/{ID}** \n{{"fspId": "Payee DFSP"}} + Oracle_A--> ALS_A: return + ALS_A ->> payerDFSP: PUT /parties/{ID} + payerDFSP -->> ALS_A: 200 OK + else if other Proxy in Scheme A + ALS_A ->> dfspsA: GET /parties/{Type}/{ID} + dfspsA -->> ALS_A: 202 OK + dfspsA ->> ALS_A: PUT /parties/{ID}/error + ALS_A -->> dfspsA: 200 OK + ALS_A ->> ALS_A: Mark message as \nreceived from proxy + note left + remove other Proxy from + list SentToProxies[{ID}] + end note + + alt if SentToProxies[{ID}] is empty + ALS_A ->> payerDFSP: PUT /parties/{ID}/error + note right + SentToProxies[{ID}] is empty + end note + payerDFSP -->> ALS_A: 200 OK + end + end +end loop +else if found in Oracle + Oracle_A--> ALS_A: dfsp = payeeDFSP + + ALS_A->ALS_A: Payee DFSP is \nnot in scheme A + ALS_A-> pc_A: Lookup proxy for\n Payee DFSP + alt if header source is a member of Scheme A + ALS_A->ALS_A: Add destination to header + note left + destination dfsp: Payee DFSP + end note + + ALS_A ->> xnp: GET /parties/{Type}/{ID} + xnp ->> ALS_B: GET /parties/{Type}/{ID} + ALS_B -->> xnp: 202 OK + xnp -->> ALS_A: 202 OK + end + ALS_B->ALS_B: Forward to destination + ALS_B ->> payeeDFSP: GET /parties/{Type}/{ID} + payeeDFSP -->> ALS_B: 202 OK + payeeDFSP ->> ALS_B: PUT /parties/{ID} + note right + header destination = payerDFSP + end note + ALS_B -->> payeeDFSP: 200 Ok + ALS_B -> pc_B: Lookup payerDFSP proxy + ALS_B ->> xnp: PUT /parties/{ID} + xnp ->> ALS_A: PUT /parties/{ID} + ALS_A -->> xnp: 200 OK + xnp -->> ALS_B: 200 OK + ALS_A -> pc_A: Source not in Scheme: \nAdd 'Payee DFSP' to\n 'Proxy AB' mapping + pc_A -> pc_A: Got Mapping + ALS_A ->> payerDFSP: PUT /parties/{ID} + payerDFSP -->> ALS_A: 200 OK +end + + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.svg b/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.svg new file mode 100644 index 000000000..a73a08b38 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.svg @@ -0,0 +1 @@ +Interscheme - On Demand DiscoveryScheme AScheme BPayer DFSPPayer DFSPALSScheme AALSScheme AProxy CacheScheme AProxy CacheScheme AOracleScheme AOracleScheme Aother Proxiesother ProxiesProxy ABProxy ABALSScheme BALSScheme BProxy CacheScheme BProxy CacheScheme BOracleScheme BOracleScheme BPayee DFSPayee DFS[1]GET /parties/{Type}/{ID}header source = payerDFSP[2]202 OK[3]GET /participant/{ID}alt[if not found in Oracle][4]no dfsp found[5]Are there any proxiesin Scheme A?[6]Cache Proxies thatwill receive messagesSentToProxies[{ID}] ={['Proxy AB', 'Proxy CD', 'Proxy EF']}loop[for all Proxys in Scheme A and not source]alt[if Proxy AB][7]GET /parties/{Type}/{ID}[8]Add headerfxpiop-proxy = "Proxy AB"[9]GET /parties/{Type}/{ID}[10]202 OK[11]202 OK[12]Source not in Scheme:fxpiop-proxy = "Proxy AB"Add 'Payer DFSP' to'Proxy AB' mapping[13]Add new mappingto cachePayer DFSP : Proxy AB[14]GET /participant/{ID}[15]dfps = payeeDFSP[16]GET /parties/{Type}/{ID}[17]202 OK[18]PUT /parties/{ID}header destination = payerDFSPsource = payeeDFSP[19]200 Ok[20]Lookup payerDFSP proxy[21]PUT /parties/{ID}[22]Add headerfxpiop-proxy = "Proxy AB"[23]PUT /parties/{ID}[24]200 OK[25]200 OK[26]Source not in Scheme:fxpiop-proxy = "Proxy AB"Add 'Payee DFSP' to'Proxy AB' mapping[27]New mappingCheck JWSsignature &Add to cachePayee DFSP : Proxy AB[28]Update Oracle with mappingPOST /participants/{Type}/{ID} {{"fspId": "Payee DFSP"}}[29]return[30]PUT /parties/{ID}[31]200 OK[if other Proxy in Scheme A][32]GET /parties/{Type}/{ID}[33]202 OK[34]PUT /parties/{ID}/error[35]200 OK[36]Mark message asreceived from proxyremove other Proxy fromlist SentToProxies[{ID}]alt[if SentToProxies[{ID}] is empty][37]PUT /parties/{ID}/errorSentToProxies[{ID}] is empty[38]200 OK[if found in Oracle][39]dfsp = payeeDFSP[40]Payee DFSP isnot in scheme A[41]Lookup proxy forPayee DFSPalt[if header source is a member of Scheme A][42]Add destination to headerdestination dfsp: Payee DFSP[43]GET /parties/{Type}/{ID}[44]GET /parties/{Type}/{ID}[45]202 OK[46]202 OK[47]Forward to destination[48]GET /parties/{Type}/{ID}[49]202 OK[50]PUT /parties/{ID}header destination = payerDFSP[51]200 Ok[52]Lookup payerDFSP proxy[53]PUT /parties/{ID}[54]PUT /parties/{ID}[55]200 OK[56]200 OK[57]Source not in Scheme:Add 'Payee DFSP' to'Proxy AB' mapping[58]Got Mapping[59]PUT /parties/{ID}[60]200 OK \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.plantuml b/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.plantuml new file mode 100644 index 000000000..934c98a7d --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.plantuml @@ -0,0 +1,90 @@ +@startuml Interscheme-StalePartyIdentifierCache + +title Stale Party Identifier Cache + +participant "Payer DFSP" as payerDFSP +box "Scheme A" #LightBlue + participant "ALS\nScheme A" as ALS_A + participant "Oracle\nScheme A" as Oracle_A + participant "Proxy Cache\nScheme A" as pc_A +end box +participant "Proxy AB" as xnp +box "Scheme B" #d1e0c3 + participant "ALS\nScheme B" as ALS_B + participant "Oracle\nScheme A" as Oracle_B + participant "Proxy Cache\nScheme B" as pc_B +end box +participant "Payee DFS" as payeeDFSP + +autonumber 1 "[0]" + +payerDFSP ->> ALS_A: **GET** /parties/{Type}/{ID} +note left + header source = payerDFSP +end note + + ALS_A-> Oracle_A: **GET** /participant/{ID} + Oracle_A--> ALS_A: found DFSP = payeeDFSP + ALS_A ->> ALS_A: DFSP not in scheme + ALS_A -> pc_A: Who is payee DFSP's proxy? + alt proxy representative not found + pc_A --> ALS_A: Proxy not found + ALS_A -> Oracle_A: Remove mapping in Oracle\n **DELETE** \participants\{Type}\{ID} + note left + **Self heal** if proxy + reference is not found + end note + ALS_A ->> ALS_A: Restart the ALS get parties process + else + pc_A --> ALS_A: forward to Proxy AB + end + + ALS_A ->> xnp: **GET** /parties/{Type}/{ID} + xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note + + xnp ->> ALS_B: **GET** /parties/{Type}/{ID} + ALS_B ->> pc_B: Source not in Scheme: \nfxpiop-proxy = "Proxy AB"\nAdd 'Payer DFSP' to 'Proxy AB' mapping +alt not MVP + pc_B -> pc_B: Check JWS signature +end + pc_B -> pc_B: Add new mapping to cache +note left +Payer DFSP : Proxy AB +end note +ALS_B-> Oracle_B: **GET** /participant/{ID} + Oracle_B--> ALS_B: dfps = payeeDFSP + alt if dfsp is a member of Scheme B + ALS_B ->> payeeDFSP: **GET** /parties/{Type}/{ID} + payeeDFSP ->> ALS_B: **PUT** /parties/{ID}/error + note right + header desitination = payerDFSP + end note + end + ALS_B -> pc_B: Lookup payerDFSP proxy + ALS_B ->> xnp: **PUT** /parties/{ID}/error + xnp->xnp: Add header + note left + fxpiop-proxy = "Proxy AB" + end note + xnp ->> ALS_A: **PUT** /parties/{ID}/error + alt message from proxy & error & no proxy message cache + note left ALS_A + **Self heal** if error in routing + fxpiop-proxy = "Proxy AB" + PUT /parties error + SentToProxies[{ID}] list undefined + end note + ALS_A -> Oracle_A: Remove mapping in Oracle\n **DELETE** \participants\{Type}\{ID} + ALS_A ->> payerDFSP: **PUT** /parties/{ID}/error + note right + {ErrorCode: "2003"} + (Service Unavailable) + end note + else + ALS_A->>payerDFSP: **PUT** /parties/{ID}/error +end + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.svg b/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.svg new file mode 100644 index 000000000..cd5ae6924 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.svg @@ -0,0 +1 @@ +Stale Party Identifier CacheScheme AScheme BPayer DFSPPayer DFSPALSScheme AALSScheme AOracleScheme AOracleScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABALSScheme BALSScheme BOracleScheme AOracleScheme AProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFS[1]GET/parties/{Type}/{ID}header source = payerDFSP[2]GET/participant/{ID}[3]found DFSP = payeeDFSP[4]DFSP not in scheme[5]Who is payee DFSP's proxy?alt[proxy representative not found][6]Proxy not found[7]Remove mapping in Oracle DELETE\participants\{Type}\{ID}Self healif proxyreference is not found[8]Restart the ALS get parties process[9]forward to Proxy AB[10]GET/parties/{Type}/{ID}[11]Add headerfxpiop-proxy = "Proxy AB"[12]GET/parties/{Type}/{ID}[13]Source not in Scheme:fxpiop-proxy = "Proxy AB"Add 'Payer DFSP' to 'Proxy AB' mappingalt[not MVP][14]Check JWS signature[15]Add new mapping to cachePayer DFSP : Proxy AB[16]GET/participant/{ID}[17]dfps = payeeDFSPalt[if dfsp is a member of Scheme B][18]GET/parties/{Type}/{ID}[19]PUT/parties/{ID}/errorheader desitination = payerDFSP[20]Lookup payerDFSP proxy[21]PUT/parties/{ID}/error[22]Add headerfxpiop-proxy = "Proxy AB"[23]PUT/parties/{ID}/erroralt[message from proxy & error & no proxy message cache]Self healif error in routingfxpiop-proxy = "Proxy AB"PUT /parties errorSentToProxies[{ID}] list undefined[24]Remove mapping in Oracle DELETE\participants\{Type}\{ID}[25]PUT/parties/{ID}/error{ErrorCode: "2003"}(Service Unavailable)[26]PUT/parties/{ID}/error \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-Transfer.plantuml b/docs/fr/product/features/Interscheme/Interscheme-Transfer.plantuml new file mode 100644 index 000000000..9fda3da00 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-Transfer.plantuml @@ -0,0 +1,80 @@ +@startuml Interscheme-Transfer + +title Interscheme - Transfer + +participant "Payer DFSP" as payerDFSP +box Scheme A #LightBlue + participant "Mojaloop\nScheme A" as schemeA + participant "Proxy Cache\nScheme A" as pc_A +end box +participant "Proxy AB" as xnp +box Scheme B #d1e0c3 + participant "Mojaloop\nScheme B" as schemeB + participant "Proxy Cache\nScheme B" as pc_B +end box +participant "Payee DFS" as payeeDFSP + +autonumber 1 "[0]" + +payerDFSP ->> schemeA: POST /transfers +note left +header + source: payerDFSP + destination: payeeDFSP +JWS signed by payerDFSP +body + transferId: 1234 +end note +schemeA -->> payerDFSP: 202 OK +schemeA -> schemeA: Payer DFSP\n - Checks limits\n - Updates position +schemeA -> pc_A: Destination not in Scheme\nLookup proxy for payeeDFSP = Proxy AB +schemeA ->> xnp: POST /transfers +xnp ->> schemeB: POST /transfers +note left +header + source: payerDFSP + destination: payeeDFSP + fxpiop-proxy: proxyAB +JWS signed by payerDFSP +body + transferId: 1234 +end note +schemeB -->> xnp: 202 OK +xnp -->> schemeA: 202 OK +schemeA -> schemeA: Disable timeout + +schemeB -> schemeB: Proxy AB\n **- No limit check**\n - Updates position +schemeB->>payeeDFSP: POST /transfers +note right +Checks JWS signed by payerDFSP +end note +payeeDFSP->>schemeB: PUT /transfers \n{fulfilment: "xyz", transferState: "RESERVED"} +note right +header + source: payeeDFSP + destination: payerDFSP +JWS signed by payeeDFSP +end note +schemeB -> schemeB: Payer DFSP\n - Updates position +schemeB -> pc_B: Lookup proxy for payerDFSP = Proxy AB +schemeB->>xnp: PUT /transfers +xnp->>schemeA: PUT /transfers +note right +header + source: payeeDFSP + destination: payerDFSP + fxpiop-proxy: proxyAB +JWS signed by payeeDFSP +end note +schemeA-->>xnp: 200 OK +xnp-->>schemeB: 200 OK +schemeB->>payeeDFSP: PATCH /transfers \n{transferState: "COMMITTED"} +payeeDFSP-->>schemeB: 200 OK +schemeA -> schemeA: NX Proxy\n - Updates position +schemeA->>payerDFSP: PUT /transfers +note left +Checks JWS signed by payeeDFSP +end note +payerDFSP -->> schemeA: 200 OK + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-Transfer.svg b/docs/fr/product/features/Interscheme/Interscheme-Transfer.svg new file mode 100644 index 000000000..65bb79a94 --- /dev/null +++ b/docs/fr/product/features/Interscheme/Interscheme-Transfer.svg @@ -0,0 +1 @@ +Interscheme - TransferScheme AScheme BPayer DFSPPayer DFSPMojaloopScheme AMojaloopScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABMojaloopScheme BMojaloopScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFS[1]POST /transfersheadersource: payerDFSPdestination: payeeDFSPJWS signed by payerDFSPbodytransferId: 1234[2]202 OK[3]Payer DFSP- Checks limits- Updates position[4]Destination not in SchemeLookup proxy for payeeDFSP = Proxy AB[5]POST /transfers[6]POST /transfersheadersource: payerDFSPdestination: payeeDFSPfxpiop-proxy: proxyABJWS signed by payerDFSPbodytransferId: 1234[7]202 OK[8]202 OK[9]Disable timeout[10]Proxy AB - No limit check- Updates position[11]POST /transfersChecks JWS signed by payerDFSP[12]PUT /transfers{fulfilment: "xyz", transferState: "RESERVED"}headersource: payeeDFSPdestination: payerDFSPJWS signed by payeeDFSP[13]Payer DFSP- Updates position[14]Lookup proxy for payerDFSP = Proxy AB[15]PUT /transfers[16]PUT /transfersheadersource: payeeDFSPdestination: payerDFSPfxpiop-proxy: proxyABJWS signed by payeeDFSP[17]200 OK[18]200 OK[19]PATCH /transfers{transferState: "COMMITTED"}[20]200 OK[21]NX Proxy- Updates position[22]PUT /transfersChecks JWS signed by payeeDFSP[23]200 OK \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/InterschemeAccounts-Clearing.png b/docs/fr/product/features/Interscheme/InterschemeAccounts-Clearing.png new file mode 100644 index 0000000000000000000000000000000000000000..a219b4c67e75798777266f5ea50c162db57cb0b7 GIT binary patch literal 405605 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 X;`1}%)3dR*OkYCs=qyvP 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

Ct-ihJs$BG35S3RO+|y%+ z_MDia8;=w%Dz-spD^>$lz=M|+-KMc%HHt$4v`QcH>2JjriD-RIWDCul0P`B#a^Ust zre~;t^=Jo^j9kmuOUCnvd3@(%9Pa4W-OZFgtfvVXWjin*1Ib_Ny9`BG3&e}fdG`#k zj#~p6u$xXdj*sU<^Gqd%2_qr3B3IngVu4&eSX>;^oqPk3`KDuq`C`XQL%&~zs-fwc zYUf3I-P^%Ut3|5mNAIV84xGtQ|Bz^V15f47i$Q2nvt_;c&|5Pi+vO;8`(BcOqJ;ug z`gfv%OetiiZ&m*r9bsgJwcXp|l@MGH_9J}zs)&O<_-g!cdV7jL-E!_HYD-Yyqd`^X zTq{mi7*e*R3d8JV{}W7gUgeF+B>!y`Vm^7R=nB(*Yf;~)=_<9Vl0w)Gm3yJ{XJ30KD+xP-dVX4BduDFB)y8@d_Ue*+*z*qGhqZF%*IT`%d12WRHZC z`{vrU{y!!YD3vVnV%xqGYscO`+I}kRdUSKCPtEg3->_JbmmuS-!A*ae1n$q*iPCW@ zp-zK`9QejbboXAZT_#QpFS@f*>LP*K;_I$3h(Vud*?pZ#v*ijHld$zql;#>=UR>`* zEw0sM1+}9M4B+0fdP*!4xzE!YZgO~J#@AeR*K2QGaPKHm-ac|eZolFU@wcJL{^~m{ z(?-l?N#H(RO$-XbN@+z5gpmtpVl5isJPxNMVseB9C4vdu)yQ&kab7F)S>Q&c@3aZY zwO*VD!%0DSmUQUQafJqS5O9VSI#poDK_hZN- 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%0D% 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

mdfOH(Q% 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 literal 0 HcmV?d00001 diff --git a/docs/fr/product/features/Interscheme/SettingUpProxys.plantuml b/docs/fr/product/features/Interscheme/SettingUpProxys.plantuml new file mode 100644 index 000000000..4d1ddb131 --- /dev/null +++ b/docs/fr/product/features/Interscheme/SettingUpProxys.plantuml @@ -0,0 +1,31 @@ +@startuml SettingUpProxys +title Central Ledger API / Admin API + +participant "Onboarding Script" as script +participant "Mojaloop\nScheme A" as schemeA +participant "XN Proxy" as xnp +participant "Mojaloop\nScheme B" as schemeB + +autonumber 1 "[0]" + +== Create Participant Types == + +script -> schemeA: POST /participants +note left +{ + "name": "XN Proxy", + "currency": "USD", + "isProxy": true +} +end note + +script -> schemeB: POST /participants +note left +{ + "name": "XN Proxy", + "currency": "USD", + "isProxy": true +} +end note + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/SettingUpProxys.svg b/docs/fr/product/features/Interscheme/SettingUpProxys.svg new file mode 100644 index 000000000..f29814093 --- /dev/null +++ b/docs/fr/product/features/Interscheme/SettingUpProxys.svg @@ -0,0 +1 @@ +Central Ledger API / Admin APIOnboarding ScriptOnboarding ScriptMojaloopScheme AMojaloopScheme AXN ProxyXN ProxyMojaloopScheme BMojaloopScheme BCreate Participant Types[1]POST /participants{"name": "XN Proxy","currency": "USD",  "isProxy": true}[2]POST /participants{"name": "XN Proxy","currency": "USD",  "isProxy": true} \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/Appendix.md b/docs/fr/product/features/Iso20022/v1.0/Appendix.md new file mode 100644 index 000000000..561cf3a4b --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/Appendix.md @@ -0,0 +1,54 @@ +--- +sidebarTitle: Annexe ISO 20022 +--- + +# 8. Annexe A : codes de type d’identifiant de paiement +## 8.1 Types d’identifiant FSPIOP +|Code|Description| +| -- | -- | +|MSISDN|Un MSISDN (*Mobile Station International Subscriber Directory Number*, c’est-à-dire le numéro de téléphone) sert de référence à un participant. Le MSISDN doit être au format international selon la norme UIT-T E.164. Optionnellement, le MSISDN peut être préfixé d’un seul signe plus, indiquant le préfixe international.| +|EMAIL|Une adresse e-mail sert de référence à un participant. Le format doit suivre la RFC 3696 (informatif).| +|PERSONAL_ID|Un identifiant personnel sert de référence à un participant. Exemples : numéro de passeport, d’acte de naissance, d’enregistrement national. Le numéro figure dans l’élément PartyIdentifier ; le type d’identifiant personnel dans PartySubIdOrType.| +|BUSINESS|Une entité commerciale précise (organisation, entreprise, etc.) sert de référence. L’identifiant BUSINESS peut prendre tout format. Pour lier une transaction à un nom d’utilisateur ou un numéro de facture dans une entreprise, utiliser PartySubIdOrType.| +|DEVICE|Un identifiant d’appareil (terminal de paiement, GAB, etc.) rattaché à une entreprise ou organisation sert de référence à une partie. Pour un appareil sous une entreprise ou organisation donnée, utiliser PartySubIdOrType.| +|ACCOUNT_ID|Un numéro de compte bancaire ou identifiant de compte FSP sert de référence. L’identifiant ACCOUNT_ID peut prendre tout format selon pays et FSP.| +|IBAN|Un numéro de compte ou identifiant FSP sert de référence. L’IBAN comporte jusqu’à 34 caractères alphanumériques, sans espace.| +|ALIAS|Un alias sert de référence à un participant. L’alias est créé chez le FSP comme référence alternative au titulaire du compte ; un autre exemple est un nom d’utilisateur dans le système FSP. L’identifiant ALIAS peut prendre tout format ; PartySubIdOrType peut identifier un compte sous un alias défini par PartyIdentifier.| + + +## 8.2 Table des codes d’identifiant personnel +Ces types ne sont pas encore pris en charge. + +|Code|Description| +| -- | -- | +|ARNU|AlienRegistrationNumber| +|CCPT|PassportNumber| +|CUST|CustomerIdentificationNumber| +|DRLC|DriversLicenseNumber| +|EMPL|EmployeeIdentificationNumber| +|NIDN|NationalIdentityNumber| +|SOSE|SocialSecurityNumber| +|TELE|TelephoneNumber| +|TXID|TaxIdentificationNumber| +|POID|PersonCommercialIdentification| + + +## 8.3 Table des codes d’identifiant d’organisation +Ces types ne sont pas encore pris en charge. + +|Code|Description +| -- | -- | +|BANK|BankPartyIdentification| +|CBID|CentralBankIdentificationNumber| +|CHID|ClearingIdentificationNumber| +|CINC|CertificateOfIncorporationNumber| +|COID|CountryIdentificationCode| +|CUST|CustomerNumber| +|DUNS|DataUniversalNumberingSystem| +|EMPL|EmployerIdentificationNumber| +|GS1G|GS1GLNIdentifier| +|SREN|SIREN| +|SRET|SIRET| +|TXID|TaxIdentificationNumber| +|BDID|BusinessDomainIdentifier| +|BOID|BusinessOtherIdentification| diff --git a/docs/fr/product/features/Iso20022/v1.0/IntegrationPatterns.md b/docs/fr/product/features/Iso20022/v1.0/IntegrationPatterns.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/fr/product/features/Iso20022/v1.0/MarketPracticeDocument.md b/docs/fr/product/features/Iso20022/v1.0/MarketPracticeDocument.md new file mode 100644 index 000000000..9949d5d2e --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/MarketPracticeDocument.md @@ -0,0 +1,241 @@ +--- +sidebarTitle: MPD ISO 20022 v1.0 +--- + +# v1.0 : document de pratique de marché ISO 20022 Mojaloop + + + +- [1. Mojaloop ISO 20022 Market Practice Document](#_1-mojaloop-iso-20022-market-practice-document) +- [2. Introduction](#_2-introduction) + - [2.1. How to Use This Document?](#_2-1-how-to-use-this-document) + - [2.1.1. Relationship with Scheme-Specific Rules Documents](#_2-1-1-relationship-with-scheme-specific-rules-documents) + - [2.1.2. Distinction Between Generic Practices and Scheme-Specific Requirements](#_2-1-2-distinction-between-generic-practices-and-scheme-specific-requirements) +- [3. Message Expectations, Obligations, and Rules](#_3-message-expectations-obligations-and-rules) + - [3.1. Currency Conversion](#_3-1-currency-conversion) + - [3.2. JSON Messages](#_3-2-json-messages) + - [3.3. APIs](#_3-3-apis) + - [3.3.1. Header Details](#_3-3-1-header-details) + - [3.3.2. Supported HTTP Responses](#_3-3-2-supported-http-responses) + - [3.3.3. Common Error Payload](#_3-3-3-common-error-payload) + - [3.4. ULIDs as Unique Identifiers](#_3-4-ulids-as-unique-identifiers) + - [3.5. Inter-ledger Protocol v4 to represent the Cryptographic Terms](#_3-5-inter-ledger-protocol-v4-to-represent-the-cryptographic-terms) + - [3.6. ISO 20022 Supplementary Data Fields](#_3-6-iso-20022-supplementary-data-fields) +- [4. Discovery Phase](#_4-discovery-phase) + - [4.1. Message flow](#_4-1-message-flow) + - [4.2. Parties Resource](#_4-2-parties-resource) +- [5. Agreement Phase](#_5-agreement-phase) + - [5.1. Currency Conversion Agreement Sub-Phase](#_5-1-currency-conversion-agreement-sub-phase) + - [5.1.1. Message flow](#_5-1-1-message-flow) + - [5.1.2. fxQuotes Resource](#_5-1-2-fxquotes-resource) + - [5.2. Transfer Terms Agreement Sub-Phase](#_5-2-transfer-terms-agreement-sub-phase) + - [5.2.1. Message flow](#_5-2-1-message-flow) + - [5.2.2. Quotes Resource](#_5-2-2-quotes-resource) +- [6. Transfer Phase](#_6-transfer-phase) + - [6.1. Accepting Currency Conversion terms](#_6-1-accepting-currency-conversion-terms) + - [6.1.1. Message flow](#_6-1-1-message-flow) + - [6.1.2. fxTransfers Resource](#_6-1-2-fxtransfers-resource) + - [6.2. Transfer Execution and Clearing](#_6-2-transfer-execution-and-clearing) + - [6.2.1. Message flow](#_6-2-1-message-flow) + - [6.2.2. Transfers Resource](#_6-2-2-transfers-resource) + + +# 2. Introduction + +En combinant les principes d’inclusion financière et les capacités d’ISO 20022, Mojaloop permet aux DFSP et autres parties prenantes de proposer des paiements en temps réel, économiques, sécurisés et évolutifs pour les écosystèmes financiers inclusifs. Ce document est la version 1.0 de la pratique de marché Mojaloop ISO 20022. + +## 2.1 Comment utiliser ce document ? +Ce document constitue une référence de base pour mettre en œuvre la messagerie ISO 20022 pour les SIIP dans les schémas basés sur Mojaloop. Il décrit des lignes directrices et pratiques générales communes à tous les schémas Mojaloop, centrées sur les exigences de base. Il doit toutefois être complété par des documents de règles propres au schéma, pouvant définir des champs de message, validations et règles supplémentaires pour répondre aux réglementations et besoins spécifiques. Cette approche par couches permet d’adapter les détails d’implémentation tout en restant aligné sur le cadre Mojaloop. + +### 2.1.1 Lien avec les documents de règles propres au schéma +Ce document pose les fondations de l’application d’ISO 20022 dans Mojaloop (principes et pratiques cœur). Il ne prescrit pas les exigences métier détaillées, validations et cadres de gouvernance propres à chaque schéma. Les règles de schéma couvrent ces aspects : champs obligatoires et facultatifs, protocoles de conformité sur mesure, procédures de gestion des erreurs, règles métier sur les flux de messages, rôles et responsabilités des participants. La flexibilité du présent document permet aux administrateurs de schéma d’adapter et d’étendre les orientations selon leurs besoins opérationnels. + +### 2.1.2 Distinction entre pratiques génériques et exigences propres au schéma +Le document sépare clairement pratiques génériques et exigences de schéma pour concilier cohérence et adaptabilité des implémentations ISO 20022 dans Mojaloop. Les pratiques génériques établissent les principes fondateurs : attentes sur les structures de messages, champs requis pour le switch, champs supportés et flux transactionnels, ainsi qu’une vue d’ensemble du cycle de vie d’un transfert P2P avec change Mojaloop. + +Les exigences propres au schéma, documentées séparément, détaillent mappages de champs supplémentaires, validations renforcées et règles précises de règlement, rapprochement et résolution de litiges, ainsi que politiques de gouvernance et obligations de conformité. + +Cette distinction permet aux DFSP d’implémenter un noyau de messagerie cohérent tout en laissant aux administrateurs de schéma la flexibilité sur les détails opérationnels. Les pratiques génériques sont conçues pour être extensibles et s’intégrer aux règles de schéma, conformément aux standards Mojaloop ISO 20022 pour les SIIP. + +# 3 Attentes, obligations et règles applicables aux messages +Le processus de transfert Mojaloop comporte trois phases clés pour des transactions sûres et efficaces. Chaque phase s’appuie sur des ressources spécifiques pour les interactions entre participants, assurant communication, accord et exécution. Certaines phases et ressources sont facultatives ; l’objectif reste que chaque transfert soit exact, sécurisé et conforme aux conditions convenues. +1. [Découverte](#_4-discovery-phase) +2. [Accord](#_5-agreement-phase) +3. [Transfert](#_6-transfer-phase) + +## 3.1 Conversion de devises +La conversion de devises prend en charge les transactions multi-devises. Comme elle n’est pas toujours nécessaire, les messages et flux associés ne sont utilisés qu’en cas de besoin, pour la flexibilité mono- ou multi-devises. + +## 3.2 Messages JSON +Mojaloop adopte une variante JSON des messages ISO 20022 plutôt que le XML traditionnel, pour l’efficacité et la compatibilité avec les API modernes. L’organisation ISO 20022 développe une représentation JSON canonique ; Mojaloop entend s’y aligner à mesure de son évolution. + +## 3.3 API +Les messages ISO 20022 sont échangés dans Mojaloop via des appels de type REST. Cela favorise l’interopérabilité, réduit le volume de données grâce au JSON léger et soutient des implémentations modulaires et évolutives. L’intégration d’ISO 20022 avec des API REST offre un cadre robuste et adaptable, entre normes mondiales et contraintes de mise en œuvre. + +### 3.3.1 Détails des en-têtes +L’en-tête du message API doit contenir les éléments suivants. Les en-têtes obligatoires sont marqués d’un astérisque `*`. + +| Nom                                | Description | +|--|--| +|**Content-Length**
*integer*
(header)|The `Content-Length` header field indicates the anticipated size of the payload body. Only sent if there is a body.**Note:** The API supports a maximum size of 5242880 bytes (5 Megabytes).| +| * **Type**
*string*
(path)|The type of the party identifier. For example, `MSISDN`, `PERSONAL_ID`.| +| * **ID**
*string*
(path)| The identifier value.| +| * **Content-Type**
*string*
(header)|The `Content-Type` header indicates the specific version of the API used to send the payload body.| +| * **Date**
*string*
(header)|The `Date` header field indicates the date when the request was sent.| +| **X-Forwarded-For**
*string*
(header)|The `X-Forwarded-For` header field is an unofficially accepted standard used for informational purposes of the originating client IP address, as a request might pass multiple proxies, firewalls, and so on. Multiple `X-Forwarded-For` values should be expected and supported by implementers of the API.**Note:** An alternative to `X-Forwarded-For` is defined in [RFC 7239](https://tools.ietf.org/html/rfc7239). However, to this point RFC 7239 is less-used and supported than `X-Forwarded-For`.| +| * **FSPIOP-Source**
*string*
(header)|The `FSPIOP-Source` header field is a non-HTTP standard field used by the API for identifying the sender of the HTTP request. The field should be set by the original sender of the request. Required for routing and signature verification (see header field `FSPIOP-Signature`).| +| **FSPIOP-Destination**
*string*
(header)|The `FSPIOP-Destination` header field is a non-HTTP standard field used by the API for HTTP header based routing of requests and responses to the destination. The field must be set by the original sender of the request if the destination is known (valid for all services except GET /parties) so that any entities between the client and the server do not need to parse the payload for routing purposes. If the destination is not known (valid for service GET /parties), the field should be left empty.| +| **FSPIOP-Encryption**
*string*
(header) | The `FSPIOP-Encryption` header field is a non-HTTP standard field used by the API for applying end-to-end encryption of the request.| +| **FSPIOP-Signature**
*string*
(header)| The `FSPIOP-Signature` header field is a non-HTTP standard field used by the API for applying an end-to-end request signature.| +| **FSPIOP-URI**
*string*
(header) | The `FSPIOP-URI` header field is a non-HTTP standard field used by the API for signature verification, should contain the service URI. Required if signature verification is used, for more information, see [the API Signature document](https://docs.mojaloop.io/technical/api/fspiop/).| +| **FSPIOP-HTTP-Method**
*string*
(header) | The `FSPIOP-HTTP-Method` header field is a non-HTTP standard field used by the API for signature verification, should contain the service HTTP method. Required if signature verification is used, for more information, see [the API Signature document](https://docs.mojaloop.io/technical/api/fspiop/).| + +### 3.3.2 Réponses HTTP prises en charge + +| **Code d’erreur HTTP** | **Description et causes fréquentes** | +|---|----| +|**400 Bad Request** | **Description** : le serveur n’a pas pu interpréter la requête (syntaxe invalide). La requête est mal formée ou contient des paramètres invalides.
**Causes fréquentes** : champs obligatoires manquants, valeurs invalides, format incorrect. | +|**401 Unauthorized** | **Description** : le client doit s’authentifier. La requête ne comporte pas d’identifiants valides.
**Causes fréquentes** : jeton d’authentification manquant ou invalide. | +|**403 Forbidden** | **Description** : le client n’a pas les droits d’accès. Le serveur a compris la requête mais refuse de l’autoriser.
**Causes fréquentes** : permissions insuffisantes sur la ressource. | +|**404 Not Found** | **Description** : la ressource demandée est introuvable.
**Causes fréquentes** : identifiant incorrect ou ressource supprimée. | +|**405 Method Not Allowed** | **Description** : la méthode HTTP n’est pas autorisée pour cette ressource.
**Causes fréquentes** : méthode non supportée (ex. POST au lieu de PUT). | +|**406 Not Acceptable** | **Description** : le serveur ne peut pas produire une réponse acceptable selon les en-têtes de négociation (Accept, etc.).
**Causes fréquentes** : type ou format média non supporté dans Accept. | +|**501 Not Implemented** | **Description** : le serveur ne prend pas en charge la fonctionnalité requise.
**Causes fréquentes** : fonctionnalité non implémentée. | +|**503 Service Unavailable** | **Description** : le serveur ne peut pas traiter la requête temporairement (maintenance ou surcharge).
**Causes fréquentes** : maintenance, surcharge ou indisponibilité. | + +### 3.3.3 Charge utile d’erreur commune + +Toutes les réponses d’erreur renvoient une structure commune incluant un message explicite. La charge contient en général : + +- **errorCode** : code de l’erreur. +- **errorDescription** : description de l’erreur. +- **extensionList** : liste facultative de paires clé-valeur avec des informations complémentaires. + +Cette charge aide les clients à comprendre l’erreur et à réagir de façon appropriée. + + + +## 3.4 ULID comme identifiants uniques +Mojaloop utilise des identifiants uniques lexicographiquement triables (ULID) comme standard d’identifiants dans sa messagerie. Les ULID constituent une alternative solide aux UUID, avec unicité globale et ordre naturel par date de création, ce qui facilite traçabilité, diagnostic et analyses opérationnelles. + +## 3.5 Protocole Interledger (v4) pour les termes cryptographiques +Mojaloop s’appuie sur ILP version 4 pour définir et représenter les termes cryptographiques dans les transferts. ILP v4 offre un cadre normalisé pour l’échange sécurisé et interopérable d’instructions de paiement, avec intégrité et non-répudiation. L’intégration des capacités cryptographiques d’ILP permet des accords précis et inviolables entre participants et l’exécution sécurisée de transferts de bout en bout, tout en restant compatible avec les écosystèmes de paiement mondiaux. + +## 3.6 Champs de données supplémentaires ISO 20022 + +Aucun message utilisé ne devrait exiger de champs de données supplémentaires ISO 20022. Si des données supplémentaires sont fournies, le switch ne rejette pas le message mais ignore leur contenu, comme si elles étaient absentes. + +

+ +# 4. Phase de découverte +La phase de découverte est une étape facultative du transfert, nécessaire uniquement lorsque le bénéficiaire (partie finale) doit être identifié et confirmé avant d’engager un accord. Elle s’appuie sur la ressource *parties*, qui permet d’obtenir et de valider les informations du bénéficiaire pour vérifier son éligibilité au transfert. Les contrôles clés incluent : compte actif, devises pouvant être créditées sur le compte, détails du titulaire. Le payeur peut ainsi vérifier les informations du bénéficiaire, limiter les erreurs et sécuriser les phases suivantes. + +## 4.1 Flux de messages + +Le diagramme de séquence illustre des messages d’exemple de découverte pour un transfert P2P initié par le payeur. +![Discovery Flow](./SequenceDiagrams/Discovery.svg) + +## 4.2 Ressource Parties +La ressource Parties regroupe les fonctions nécessaires à la phase de découverte. Le flux démarre toujours par un appel GET /parties ; les réponses sont renvoyées à l’initiateur via le rappel PUT /parties. Les erreurs passent par PUT /parties/.../error. Ces points de terminaition prennent en charge un type de sous-identifiant facultatif. + + +| Point de terminaison | Message | +|--- | --- | +|[GET /parties/{type}/{partyIdentifier}[/{subId}]](./script/parties_GET.md) | | +|[PUT /parties/{type}/{partyIdentifier}[/{subId}]](./script/parties_PUT.md) | acmt.024.001.04 | +|[PUT /parties/{type}/{partyIdentifier}[/{subId}]/error](./script/parties_error_PUT.md) | acmt.024.001.04 | + +
+ +# 5. Phase d’accord +La **phase d’accord** est une étape critique : toutes les parties doivent partager la même compréhension des conditions du transfert avant tout engagement de fonds. Elle remplit notamment les objectifs suivants : +1. **Calcul et accord sur les frais**
+Permet de calculer et d’accepter mutuellement les frais applicables, pour la transparence et pour limiter les litiges après le lancement du transfert. +1. **Validation avant engagement**
+Chaque organisation vérifie si le transfert peut avoir lieu, ce qui permet de détecter tôt les problèmes et de réduire erreurs et écarts de rapprochement. +1. **Signature cryptographique des conditions**
+Les conditions du transfert sont signées cryptographiquement, assurant la non-répudiation. Le protocole Interledger est utilisé ; la production de paquets ILP est décrite dans la [documentation API FSPIOP Mojaloop](https://docs.mojaloop.io/technical/api/fspiop/). +1. **Soutien à l’inclusion financière**
+En exposant clairement l’ensemble des conditions en amont, la phase d’accord garantit que les participants décident en connaissance de cause, pour des choix équitables et éclairés. + +La phase d’accord renforce fiabilité et efficacité des transferts Mojaloop et la confiance dans les écosystèmes financiers numériques inclusifs. + +Elle se subdivise en deux sous-phases. + +## 5.1 Sous-phase d’accord sur la conversion de devises +Cette sous-phase est facultative ; elle s’active seulement si le transfert implique une conversion de devises. Le DFSP payeur coordonne alors un fournisseur de change pour sécuriser la liquidité inter-devises nécessaire. Les taux de change et frais associés sont fixés de façon transparente et acceptée par le DFSP et le FXP. Traiter la conversion avant l’engagement du transfert limite retards et écarts, notamment pour les opérations transfrontalières. + +### 5.1.1 Flux de messages + + +Le diagramme de séquence illustre des messages d’exemple pour un transfert P2P initié par le payeur. +![Agreement Conversion Flow](./SequenceDiagrams/AgreementConversion.svg) + +### 5.1.2 Ressource fxQuotes + +| Point de terminaison | Message | +|--- | --- | +|[POST /fxQuotes/{ID}](./script/fxquotes_POST.md) | **pacs.091.001** | +|[PUT /fxQuotes/{ID}](./script/fxquotes_PUT.md) | **pacs.092.001** | +|[PUT /fxQuotes/{ID}/error](./script/fxquotes_error_PUT.md) | **pacs.002.001.15** | + +## 5.2 Sous-phase d’accord sur les conditions de transfert +Cette sous-phase établit de concert les conditions du transfert entre le DFSP payeur et le DFSP bénéficiaire : montant, frais, délais, etc. Elle permet aussi la signature cryptographique de ces conditions pour la non-répudiation et la responsabilité. Finaliser les conditions de façon transparente limite erreurs et litiges et renforce l’efficacité et la confiance dans le processus Mojaloop. + +### 5.2.1 Flux de messages + +Le diagramme de séquence illustre des messages d’exemple pour un transfert P2P initié par le payeur. +![Agreement Flow](./SequenceDiagrams/Agreement.svg) + +### 5.2.2 Ressource Quotes + +| Point de terminaison | Message | +| ------------- | --- | +|[POST /quotes/{ID}](./script/quotes_POST.md) | **pacs.081.001** | +|[PUT /quotes/{ID}](./script/quotes_PUT.md) | **pacs.082.001** | +|[PUT /quotes/{ID}/error](./script/quotes_error_PUT.md) | **pacs.002.001.15** | + +
+ +# 6. Phase de transfert +Une fois les accords conclus pendant la phase d’accord, leur acceptation déclenche la phase de transfert, où intervient le mouvement effectif des fonds. Elle est exécutée avec précision pour respecter les conditions convenues et les engagements de chaque participant. Elle comporte deux sous-phases : exécution de la conversion de devises et compensation du transfert, en miroir des sous-phases d’accord correspondantes. + +## 6.1 Acceptation des conditions de conversion de devises +Cette sous-phase a lieu si le transfert comporte un change. Le fournisseur de change convenu pendant la phase d’accord exécute la conversion ; la liquidité inter-devises est fournie et les fonds convertis sont préparés pour la suite vers le DFSP bénéficiaire. Le FXP vérifie le respect des taux et frais convenus, pour l’intégrité financière et la transparence. + +### 6.1.1 Flux de messages + + +Le diagramme de séquence illustre des messages d’exemple de transfert pour un P2P initié par le payeur. +![Conversion Transfer Flow](./SequenceDiagrams/ConversionTransfer.svg) + +### 6.1.2 Ressource fxTransfers + +| Point de terminaison | Message | +| -------- | --- | +|[POST /fxTransfers/{ID}](./script/fxtransfers_POST.md) | **pacs.009.001** | +|[PUT /fxTransfers/{ID}](./script/fxtransfers_PUT.md) | **pacs.002.001.15** | +|[PUT /fxTransfers/{ID}/error](./script/fxtransfers_error_PUT.md) | **pacs.002.001.15** | +|[PATCH /fxTransfers/{ID}/error](./script/fxtransfers_PATCH.md) | **pacs.002.001.15** | + +## 6.2 Exécution et compensation du transfert +Cette sous-phase couvre le transfert effectif des fonds entre le DFSP payeur et le DFSP bénéficiaire : le montant convenu, y compris les frais, est compensé sur les comptes appropriés. Elle achève l’opération financière et honore les engagements de la phase d’accord, via des mécanismes de mouvement de fonds sécurisés et efficaces. + +### 6.2.1 Flux de messages + + +Le diagramme de séquence illustre des messages d’exemple pour un transfert P2P initié par le payeur. +![Transfer Flow](./SequenceDiagrams/Transfer.svg) + +### 6.2.2 Ressource Transfers + +| Point de terminaison | Message | +| --------- | --- | +|[POST /transfers/{ID}](./script/transfers_POST.md) | **pacs.008.001** | +|[PUT /transfers/{ID}](./script/transfers_PUT.md) | **pacs.002.001.15** | +|[PUT /transfers/{ID}/error](./script/transfers_error_PUT.md) | **pacs.002.001.15** | +|[PATCH /transfers/{ID}/error](./script/transfers_PATCH.md) | **pacs.002.001.15** | + + + + diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.plantuml new file mode 100644 index 000000000..175ce5d06 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.plantuml @@ -0,0 +1,96 @@ +@startuml + +Title Discovery ISO 20022 Message Flow +participant PayerDFSP as "Payer DFSP" +participant Mojaloop as "Mojaloop" +participant PayeeDFSP as "Payee DFSP" + +autonumber + +PayerDFSP -> Mojaloop: POST /quotes +note left +**pacs.081.001.01** +**Financial Institution to Financial Institution** +**Customer Credit Transfer Quote Request** +{ +"GrpHdr": { + "MsgId": "01JBVM19DJQ96BS9X6VA5AMW2Y", + "CreDtTm": "2024-11-04T12:57:42.066Z", + "NbOfTxs": "1", + "PmtInstrXpryDtTm": "2024-11-04T12:58:42.063Z", + "SttlmInf": { "SttlmMtd": "CLRG" } + }, +"CdtTrfTxInf": { + "PmtId": { + "TxId": "01JBVM19DFKNRWC21FGJNTHRAT", + "EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF"}, + "Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16665551002" }}}}, + "CdtrAgt": { "FinInstnId": { "Othr": { "Id": "test-mwk-dfsp" }}}, + "Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16135551001" }}}, + "Name": "Joe Blogs"}, + "DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp" }}}, + "IntrBkSttlmAmt": { + "Ccy": "MWK", + "ActiveCurrencyAndAmount": "1080"}, + "Purp": { "Prtry": "TRANSFER"}, + "ChrgBr": "CRED"} +} +end note +Mojaloop -> PayeeDFSP: POST /quotes +PayeeDFSP -> PayeeDFSP: Check to see if Payee can receive the payment. +alt if Payee can receive the payment +PayeeDFSP -> Mojaloop: PUT /quotes/{ID} +note right +**pacs.082.001.01** +**Financial Institution to Financial Institution** +**Customer Credit Transfer Quote Response** +"GrpHdr": { + "MsgId": "01JBVM19SPQAQV9EEP0QC1RNAD", + "CreDtTm": "2024-11-04T12:57:42.455Z", + "NbOfTxs": "1", + "SttlmInf": { "SttlmMtd": "CLRG" }, + "PmtInstrXpryDtTm": "2024-11-04T12:58:42.450Z" +}, +"CdtTrfTxInf": { "PmtId": { "TxId": "01JBVM19DFKNRWC21FGJNTHRAT" }, + "Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16135551001"} } }, + "Name": "Payer Joe" }, + "DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp"} } }, + "Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16665551002"} } }, + "CdtrAgt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"} } }, + "ChrgBr": "CRED", + "IntrBkSttlmAmt": { + "Ccy": "MWK", + "ActiveCurrencyAndAmount": "1080" }, + "InstdAmt": { + "Ccy": "MWK", + "ActiveOrHistoricCurrencyAndAmount": "1080" }, + "ChrgsInf": { + "Amt": { "Ccy": "MWK", + "ActiveOrHistoricCurrencyAndAmount": "0" }, + "Agt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"} } } }, + "VrfctnOfTerms": { "IlpV4PrepPacket": "DIICzQAAAA..." } } +} +end note +Mojaloop -> PayerDFSP: PUT/quotes/{ID} + +else + +PayeeDFSP -> Mojaloop: PUT/quotes/{ID}/error +note right +**pacs.002.001.15** +**Financial Institution to Financial Institution** +**Payment Status Report** +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} +end note +Mojaloop -> PayerDFSP: PUT/quotes/{ID}/error + +end + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.svg new file mode 100644 index 000000000..bce7b2a4e --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.svg @@ -0,0 +1 @@ +Discovery ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopPayee DFSPPayee DFSP1POST /quotespacs.081.001.01Financial Institution to Financial Institution Customer Credit Transfer Quote Request{"GrpHdr": {"MsgId": "01JBVM19DJQ96BS9X6VA5AMW2Y","CreDtTm": "2024-11-04T12:57:42.066Z","NbOfTxs": "1","PmtInstrXpryDtTm": "2024-11-04T12:58:42.063Z","SttlmInf": { "SttlmMtd": "CLRG" }},"CdtTrfTxInf": {"PmtId": {"TxId": "01JBVM19DFKNRWC21FGJNTHRAT","EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF"},"Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" },"Id": "16665551002" }}}},"CdtrAgt": { "FinInstnId": { "Othr": { "Id": "test-mwk-dfsp" }}},"Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" },"Id": "16135551001" }}},"Name": "Joe Blogs"},"DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp" }}},"IntrBkSttlmAmt": {"Ccy": "MWK","ActiveCurrencyAndAmount": "1080"},"Purp": { "Prtry": "TRANSFER"},"ChrgBr": "CRED"}}2POST /quotes3Check to see if Payee can receive the payment.alt[if Payee can receive the payment]4PUT /quotes/{ID}pacs.082.001.01Financial Institution to Financial Institution Customer Credit Transfer Quote Response"GrpHdr": {"MsgId": "01JBVM19SPQAQV9EEP0QC1RNAD","CreDtTm": "2024-11-04T12:57:42.455Z","NbOfTxs": "1","SttlmInf": { "SttlmMtd": "CLRG" },"PmtInstrXpryDtTm": "2024-11-04T12:58:42.450Z"},"CdtTrfTxInf": { "PmtId": { "TxId": "01JBVM19DFKNRWC21FGJNTHRAT" },"Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" },"Id": "16135551001"} } },"Name": "Payer Joe" },"DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp"} } },"Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" },"Id": "16665551002"} } },"CdtrAgt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"} } },"ChrgBr": "CRED","IntrBkSttlmAmt": {"Ccy": "MWK","ActiveCurrencyAndAmount": "1080" },"InstdAmt": {"Ccy": "MWK","ActiveOrHistoricCurrencyAndAmount": "1080" },"ChrgsInf": {"Amt": { "Ccy": "MWK","ActiveOrHistoricCurrencyAndAmount": "0" },"Agt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"} } } },"VrfctnOfTerms": { "IlpV4PrepPacket": "DIICzQAAAA..." } }}5PUT/quotes/{ID}6PUT/quotes/{ID}/errorpacs.002.001.15Financial Institution to Financial Institution Payment Status Report"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}}7PUT/quotes/{ID}/error \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.plantuml new file mode 100644 index 000000000..f41bee1ce --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.plantuml @@ -0,0 +1,92 @@ +@startuml + +Title Agreement phase on providing liquidity ISO 20022 Message Flow +participant PayerDFSP as "Payer DFSP" +participant Mojaloop as "Mojaloop" +participant FXP as "Foreign Exchange Provider" + +autonumber + +PayerDFSP -> Mojaloop: POST /fxQuotes +note left +**pacs.091.001.01** +**Financial Institution Credit Transfer Quote Request** +"GrpHdr": { + "MsgId": "01JBVM16V3Q4MSV8KTG0BRJGZ2", + "CreDtTm": "2024-11-04T12:57:39.427Z", + "NbOfTxs": "1", + "SttlmInf": { "SttlmMtd": "CLRG" }, + "PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z" +}, +"CdtTrfTxInf": { + "PmtId": { + "TxId": "01JBVM16V1ZXP2DM34BQT40NW9", + "InstrId": "01JBVM16V1ZXP2DM34BQT40NWA", + "EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF" }, + "Dbtr": { "FinInstnId": { "Othr": { "Id": **"payer-dfsp"** } } }, + "UndrlygCstmrCdtTrf": { + "Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}}, + "DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}}, + "Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}}, + "CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}}, + "InstdAmt": {"Ccy": **"ZMW"**, + "ActiveOrHistoricCurrencyAndAmount": **"21"**}}, + "Cdtr": {"FinInstnId": {"Othr": {"Id": **"fxp"**}}}, + "IntrBkSttlmAmt": { "Ccy": **"MWK"**, + "ActiveCurrencyAndAmount": "0"}, + "InstrForCdtrAgt": {"InstrInf": **"SEND"**}} +} +end note +Mojaloop -> FXP: POST /fxQuotes +FXP -> FXP: Check to see if liqidity can be provided \n and provide rates. +alt if FXP can provide the payment liquidity +FXP -> Mojaloop: PUT /fxQuotes/{ID} +note right +**pacs.092.001.01** +**Financial Institution Credit Transfer Quote Response** +{ +"GrpHdr": { + "MsgId": "01JBVM176FTHB9F2ZQJJ7AFCN8", + "CreDtTm": "2024-11-04T12:57:39.791Z", + "NbOfTxs": "1", + "SttlmInf": { "SttlmMtd": "CLRG" }, + "PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z"}, +"CdtTrfTxInf": { + "VrfctnOfTerms": {"Sh256Sgntr": **"KVHFmdTD6A..."**}, + "PmtId": {"InstrId": "01JBVM16V1ZXP2DM34BQT40NWA", + "TxId": "01JBVM13SQYP507JB1DYBZVCMF"}, + "Dbtr": {"FinInstnId": {"Othr": {"Id": **"payer-dfsp"**}}}, + "UndrlygCstmrCdtTrf": { + "Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}}, + "DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}}, + "Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}}, + "CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}}, + "InstdAmt": { "Ccy": **"ZMW"**, + "ActiveOrHistoricCurrencyAndAmount": **"21"**}}, + "Cdtr": {"FinInstnId": {"Othr": {"Id": **"fxp"**}}}, + "IntrBkSttlmAmt": {"Ccy": **"MWK"**, + "ActiveCurrencyAndAmount": **"1080"**}, + "InstrForCdtrAgt": {"InstrInf": **"SEND"**}} +} +end note +Mojaloop -> PayerDFSP: PUT /fxQuotes/{ID} + +else + +FXP -> Mojaloop: PUT /fxQuotes/{ID}/error +note right +**pacs.002.001.15** +**Financial Institution to Financial Institution** +**Payment Status Report** +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} +} +end note +Mojaloop -> PayerDFSP: PUT /fxQuotes/{ID}/error +end + + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.svg new file mode 100644 index 000000000..13041e821 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.svg @@ -0,0 +1 @@ +Agreement phase on providing liquidity ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopForeign Exchange ProviderForeign Exchange Provider1POST /fxQuotespacs.091.001.01Financial Institution Credit Transfer Quote Request"GrpHdr": {"MsgId": "01JBVM16V3Q4MSV8KTG0BRJGZ2","CreDtTm": "2024-11-04T12:57:39.427Z","NbOfTxs": "1","SttlmInf": { "SttlmMtd": "CLRG" },"PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z"},"CdtTrfTxInf": {"PmtId": {"TxId": "01JBVM16V1ZXP2DM34BQT40NW9","InstrId": "01JBVM16V1ZXP2DM34BQT40NWA","EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF" },"Dbtr": { "FinInstnId": { "Othr": { "Id":"payer-dfsp"} } },"UndrlygCstmrCdtTrf": {"Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}},"DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}},"Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}},"CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}},"InstdAmt": {"Ccy":"ZMW","ActiveOrHistoricCurrencyAndAmount":"21"}},"Cdtr": {"FinInstnId": {"Othr": {"Id":"fxp"}}},"IntrBkSttlmAmt": { "Ccy":"MWK","ActiveCurrencyAndAmount": "0"},"InstrForCdtrAgt": {"InstrInf":"SEND"}}}2POST /fxQuotes3Check to see if liqidity can be providedand provide rates.alt[if FXP can provide the payment liquidity]4PUT /fxQuotes/{ID}pacs.092.001.01Financial Institution Credit Transfer Quote Response{"GrpHdr": {"MsgId": "01JBVM176FTHB9F2ZQJJ7AFCN8","CreDtTm": "2024-11-04T12:57:39.791Z","NbOfTxs": "1","SttlmInf": { "SttlmMtd": "CLRG" },"PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z"},"CdtTrfTxInf": {"VrfctnOfTerms": {"Sh256Sgntr":"KVHFmdTD6A..."},"PmtId": {"InstrId": "01JBVM16V1ZXP2DM34BQT40NWA","TxId": "01JBVM13SQYP507JB1DYBZVCMF"},"Dbtr": {"FinInstnId": {"Othr": {"Id":"payer-dfsp"}}},"UndrlygCstmrCdtTrf": {"Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}},"DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}},"Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}},"CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}},"InstdAmt": { "Ccy":"ZMW","ActiveOrHistoricCurrencyAndAmount":"21"}},"Cdtr": {"FinInstnId": {"Othr": {"Id":"fxp"}}},"IntrBkSttlmAmt": {"Ccy":"MWK","ActiveCurrencyAndAmount":"1080"},"InstrForCdtrAgt": {"InstrInf":"SEND"}}}5PUT /fxQuotes/{ID}6PUT /fxQuotes/{ID}/errorpacs.002.001.15Financial Institution to Financial Institution Payment Status Report{"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}}}7PUT /fxQuotes/{ID}/error \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.plantuml new file mode 100644 index 000000000..a617ecf3f --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.plantuml @@ -0,0 +1,88 @@ +@startuml + +Title Committing to providing Liquidity ISO 20022 Message Flow +participant PayerDFSP as "Payer DFSP" +participant Mojaloop as "Mojaloop" +participant FXP as "Foreign Exchange Provider" + +autonumber + +PayerDFSP -> Mojaloop: POST /fxTransfers +note left +**pacs.009.001.12** +**Execute Financial Institution Credit Transfer** +{ +"GrpHdr":{ + "MsgId":"01JBVM1BW4J0RJZSQ539QB9TKT", + "CreDtTm":"2024-11-04T12:57:44.580Z", + "NbOfTxs":"1", + "SttlmInf":{"SttlmMtd":"CLRG"}, + "PmtInstrXpryDtTm":"2024-11-04T12:58:44.579Z"}, +"CdtTrfTxInf":{ + "PmtId":{"TxId":"01JBVM16V1ZXP2DM34BQT40NWA", + "EndToEndId":"01JBVM13SQYP507JB1DYBZVCMF"}, + "Dbtr":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}}, + "UndrlygCstmrCdtTrf":{ + "Dbtr":{"Id":{"OrgId":{"Othr":{"Id":"payer-dfsp"}}}}, + "DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}}, + "Cdtr":{"Id":{"OrgId":{"Othr":{"Id":"fxp"}}}}, + "CdtrAgt":{"FinInstnId":{"Othr":{"Id":"fxp"}}}, + "InstdAmt":{"Ccy":"ZMW", + "ActiveOrHistoricCurrencyAndAmount":"21"}}, + "Cdtr":{"FinInstnId":{"Othr":{"Id":"fxp"}}}, + "IntrBkSttlmAmt":{"Ccy":"MWK", + "ActiveCurrencyAndAmount":"1080"}, + "VrfctnOfTerms":{"Sh256Sgntr":"KVHFmdTD6A..."}} +} +end note +Mojaloop -> FXP: POST /fxTransfers +FXP -> FXP: Check to see liquidity for the transfer can still be provided. +alt if FXP can provide the payment liquidity +FXP -> Mojaloop: PUT /fxTransfers/{ID} +note right +**pacs.002.001.15** +**Financial Institution to Financial Institution** +**Payment Status Report** +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{ + "ExctnConf":"ou1887jmG-l...", + "PrcgDt":{"DtTm":"2024-11-04T12:57:45.213Z"}, + "TxSts":"RESV"} +} +end note +Mojaloop -> PayerDFSP: PUT /fxTransfers/{ID} + +else + +FXP -> Mojaloop: PUT /fxTransfers/{ID}/error +note right +**pacs.002.001.15** +**Financial Institution to Financial Institution** +**Payment Status Report** +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}} +end note +Mojaloop -> PayerDFSP: PUT /fxTransfer/{ID}/error +end + +Mojaloop -> Mojaloop: When the determining transfer is committed, \n the FX conversion is committed. + +Mojaloop->FXP: PATCH /fxTransfers/{ID} +note left +**pacs.002.001.15** +**Financial Institution to Financial Institution** +**Payment Status Report** +"GrpHdr":{ + "MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976", + "CreDtTm":"2024-11-04T12:57:46.828Z"}, +"TxInfAndSts":{"PrcgDt":{ + "DtTm":"2024-11-04T12:57:46.812Z"}, + "TxSts":"COMM"}}" +end note + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.svg new file mode 100644 index 000000000..5d8929a8c --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.svg @@ -0,0 +1 @@ +Committing to providing Liquidity ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopForeign Exchange ProviderForeign Exchange Provider1POST /fxTransferspacs.009.001.12Execute Financial Institution Credit Transfer{"GrpHdr":{"MsgId":"01JBVM1BW4J0RJZSQ539QB9TKT","CreDtTm":"2024-11-04T12:57:44.580Z","NbOfTxs":"1","SttlmInf":{"SttlmMtd":"CLRG"},"PmtInstrXpryDtTm":"2024-11-04T12:58:44.579Z"},"CdtTrfTxInf":{"PmtId":{"TxId":"01JBVM16V1ZXP2DM34BQT40NWA","EndToEndId":"01JBVM13SQYP507JB1DYBZVCMF"},"Dbtr":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}},"UndrlygCstmrCdtTrf":{"Dbtr":{"Id":{"OrgId":{"Othr":{"Id":"payer-dfsp"}}}},"DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}},"Cdtr":{"Id":{"OrgId":{"Othr":{"Id":"fxp"}}}},"CdtrAgt":{"FinInstnId":{"Othr":{"Id":"fxp"}}},"InstdAmt":{"Ccy":"ZMW","ActiveOrHistoricCurrencyAndAmount":"21"}},"Cdtr":{"FinInstnId":{"Othr":{"Id":"fxp"}}},"IntrBkSttlmAmt":{"Ccy":"MWK","ActiveCurrencyAndAmount":"1080"},"VrfctnOfTerms":{"Sh256Sgntr":"KVHFmdTD6A..."}}}2POST /fxTransfers3Check to see liquidity for the transfer can still be provided.alt[if FXP can provide the payment liquidity]4PUT /fxTransfers/{ID}pacs.002.001.15Financial Institution to Financial Institution Payment Status Report{"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"ExctnConf":"ou1887jmG-l...","PrcgDt":{"DtTm":"2024-11-04T12:57:45.213Z"},"TxSts":"RESV"}}5PUT /fxTransfers/{ID}6PUT /fxTransfers/{ID}/errorpacs.002.001.15Financial Institution to Financial Institution Payment Status Report"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}7PUT /fxTransfer/{ID}/error8When the determining transfer is committed,the FX conversion is committed.9PATCH /fxTransfers/{ID}pacs.002.001.15Financial Institution to Financial InstitutionPayment Status Report"GrpHdr":{"MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976","CreDtTm":"2024-11-04T12:57:46.828Z"},"TxInfAndSts":{"PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"},"TxSts":"COMM"}}" \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.plantuml new file mode 100644 index 000000000..e74db7ddd --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.plantuml @@ -0,0 +1,59 @@ +@startuml + +Title Discovery ISO 20022 Message Flow +participant PayerDFSP as "Payer DFSP" +participant Mojaloop as "Mojaloop" +participant PayeeDFSP as "Payee DFSP" + +autonumber + +PayerDFSP -> Mojaloop: GET /parties/{type}/{PartyIdentifier} +Mojaloop -> PayeeDFSP: GET /parties/{type}/{PartyIdentifier} +PayeeDFSP -> PayeeDFSP: Validate payees account status. +alt if account active +PayeeDFSP -> Mojaloop: PUT /parties/{type}/{PartyIdentifier} \n Returns supported currencies and account owner details. +note right +**acmt.024.001.04** +**Account Identification Verification Report** +{ +"Assgnmt": { + "MsgId": "01JBVM14S6SC453EY9XB9GXQB5", + "CreDtTm": "2024-11-04T12:57:37.318Z", + "Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id": **"payee-dfps"** }}}}, + "Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id": **"payer-dfsp"** }}}}} +"Rpt": { + "Vrfctn": true, + "OrgnlId": **"MSISDN/16665551002"**, + "UpdtdPtyAndAcctId": {"Pty": {"Id": {"PrvtId": {"Othr": {"SchmeNm": {"Prtry": **"MSISDN"**}, + "Id": **"16665551002"**}}}, + "Nm": **"Chikondi Banda"**}, + "Agt": { "FinInstnId": { "Othr": { "Id": **"payee-dfsp"** }}}, + "Acct": { "Ccy": **"MWK"** }} +} +end note +Mojaloop -> PayerDFSP: PUT /parties/{type}/{PartyIdentifier} + +else if account inactive + +PayeeDFSP -> Mojaloop: PUT /parties/{type}/{PartyIdentifier}/error \n Returns error code 3204 Party not found. +note right +**acmt.024.001.04** +**Account Identification Verification Report** +{ + "Assgnmt": { + "Id": 123, + "CreDtTm": "2013-03-07T16:30:00", + "Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id": **"payee-dfsp"** }}}}, + "Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id": **"payer-dfsp"** }}}}}, + "Rpt": { + "Vrfctn": false, + "OrgnlId": **"MSISDN/16665551002"**, + "CreDtTm": "2013-03-07T16:30:00", + "Rsn": { "Prtry": **3204** }} +} +end note +Mojaloop -> PayerDFSP: PUT /parties/{type}/{PartyIdentifier}/error + +end + +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.svg new file mode 100644 index 000000000..a4d5d4587 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.svg @@ -0,0 +1 @@ +Discovery ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopPayee DFSPPayee DFSP1GET /parties/{type}/{PartyIdentifier}2GET /parties/{type}/{PartyIdentifier}3Validate payees account status.alt[if account active]4PUT /parties/{type}/{PartyIdentifier}Returns supported currencies and account owner details.acmt.024.001.04Account Identification Verification Report{"Assgnmt": {"MsgId": "01JBVM14S6SC453EY9XB9GXQB5","CreDtTm": "2024-11-04T12:57:37.318Z","Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id":"payee-dfps"}}}},"Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id":"payer-dfsp"}}}}}"Rpt": {"Vrfctn": true,"OrgnlId":"MSISDN/16665551002","UpdtdPtyAndAcctId": {"Pty": {"Id": {"PrvtId": {"Othr": {"SchmeNm": {"Prtry":"MSISDN"},"Id":"16665551002"}}},"Nm":"Chikondi Banda"},"Agt": { "FinInstnId": { "Othr": { "Id":"payee-dfsp"}}},"Acct": { "Ccy":"MWK"}}}5PUT /parties/{type}/{PartyIdentifier}[if account inactive]6PUT /parties/{type}/{PartyIdentifier}/errorReturns error code 3204 Party not found.acmt.024.001.04Account Identification Verification Report{"Assgnmt": {"Id": 123,"CreDtTm": "2013-03-07T16:30:00","Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id":"payee-dfsp"}}}},"Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id":"payer-dfsp"}}}}},"Rpt": {"Vrfctn": false,"OrgnlId":"MSISDN/16665551002","CreDtTm": "2013-03-07T16:30:00","Rsn": { "Prtry":3204}}}7PUT /parties/{type}/{PartyIdentifier}/error \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.plantuml new file mode 100644 index 000000000..aafcc570b --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.plantuml @@ -0,0 +1,88 @@ +@startuml + +Title Transfer - ISO 20022 Message Flow +participant PayerDFSP as "Payer DFSP" +participant Mojaloop as "Mojaloop" +participant PayeeDFSP as "Payee DFSP" + +autonumber + +PayerDFSP -> Mojaloop: POST /transfers +note left +**pacs.008.001.13** +**Financial Institution to Financial Institution** +**Customer Credit Transfer** +{ +"GrpHdr":{ + "MsgId":"01JBVM1D2MR6D4WBWWYY3ZHGMM", + "CreDtTm":"2024-11-04T12:57:45.812Z", + "NbOfTxs":"1", + "SttlmInf":{"SttlmMtd":"CLRG"}, + "PmtInstrXpryDtTm":"2024-11-04T12:58:45.810Z"}, +"CdtTrfTxInf":{ + "PmtId":{"TxId":"01JBVM13SQYP507JB1DYBZVCMF"}, + "ChrgBr":"CRED", + "Cdtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"}, + "Id":"16665551002"}}}}, + "Dbtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"}, + "Id":"16135551001"}}}, + "Name":"Joe Blogs"}, + "CdtrAgt":{"FinInstnId":{"Othr":{"Id":"payee-dfsp"}}}, + "DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}}, + "IntrBkSttlmAmt":{"Ccy":"MWK", + "ActiveCurrencyAndAmount":"1080"}, + "VrfctnOfTerms":{"IlpV4PrepPacket":"DIICzQAAAAAAAaX..."}} +} +end note +Mojaloop -> PayeeDFSP: POST /transfers +PayeeDFSP -> PayeeDFSP: Check to see if Payee can receive the payment. +alt if Payee can receive the payment +PayeeDFSP -> Mojaloop: PUT /transfers/{ID} +note right +**pacs.002.001.15** +**Financial Institution to Financial Institution** +**Payment Status Report** +{ +"GrpHdr":{ + "MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976", + "CreDtTm":"2024-11-04T12:57:46.828Z"}, +"TxInfAndSts":{ + "ExctnConf":"-rL3liKeLrsNy7GHJaKgAzeDL_8IVnvER5zUlP1YAoc", + "PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"}, + "TxSts":"COMM"} +} +end note +Mojaloop -> PayerDFSP: PUT/transfers/{ID} + +else + +Mojaloop -> PayerDFSP: PUT/transfers/{ID}/error +note right +**pacs.002.001.15** +**Financial Institution to Financial Institution** +**Payment Status Report** +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} +} +end note +end + +Mojaloop->Mojaloop: If transfer fails, is timed-out,\n or is reserved PUT /transfers message. + +Mojaloop->PayeeDFSP: PATCH /transfers/{ID} +note left +**pacs.002.001.15** +**Financial Institution to Financial Institution** +**Payment Status Report** +{ +"GrpHdr":{ + "MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976", + "CreDtTm":"2024-11-04T12:57:46.828Z"}, +"TxInfAndSts":{"PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"}, + "TxSts":"COMM"}}" +} +end note +@enduml \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.svg new file mode 100644 index 000000000..1358e9c60 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.svg @@ -0,0 +1 @@ +Transfer - ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopPayee DFSPPayee DFSP1POST /transferspacs.008.001.13Financial Institution to Financial Institution Customer Credit Transfer{"GrpHdr":{"MsgId":"01JBVM1D2MR6D4WBWWYY3ZHGMM","CreDtTm":"2024-11-04T12:57:45.812Z","NbOfTxs":"1","SttlmInf":{"SttlmMtd":"CLRG"},"PmtInstrXpryDtTm":"2024-11-04T12:58:45.810Z"},"CdtTrfTxInf":{"PmtId":{"TxId":"01JBVM13SQYP507JB1DYBZVCMF"},"ChrgBr":"CRED","Cdtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"},"Id":"16665551002"}}}},"Dbtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"},"Id":"16135551001"}}},"Name":"Joe Blogs"},"CdtrAgt":{"FinInstnId":{"Othr":{"Id":"payee-dfsp"}}},"DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}},"IntrBkSttlmAmt":{"Ccy":"MWK","ActiveCurrencyAndAmount":"1080"},"VrfctnOfTerms":{"IlpV4PrepPacket":"DIICzQAAAAAAAaX..."}}}2POST /transfers3Check to see if Payee can receive the payment.alt[if Payee can receive the payment]4PUT /transfers/{ID}pacs.002.001.15Financial Institution to Financial Institution Payment Status Report{"GrpHdr":{"MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976","CreDtTm":"2024-11-04T12:57:46.828Z"},"TxInfAndSts":{"ExctnConf":"-rL3liKeLrsNy7GHJaKgAzeDL_8IVnvER5zUlP1YAoc","PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"},"TxSts":"COMM"}}5PUT/transfers/{ID}6PUT/transfers/{ID}/errorpacs.002.001.15Financial Institution to Financial Institution Payment Status Report{"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}}}7If transfer fails, is timed-out,or is reserved PUT /transfers message.8PATCH /transfers/{ID}pacs.002.001.15Financial Institution to Financial InstitutionPayment Status Report{"GrpHdr":{"MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976","CreDtTm":"2024-11-04T12:57:46.828Z"},"TxInfAndSts":{"PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"},"TxSts":"COMM"}}"} \ No newline at end of file diff --git a/docs/fr/product/features/Iso20022/v1.0/script/fxquotes_POST.md b/docs/fr/product/features/Iso20022/v1.0/script/fxquotes_POST.md new file mode 100644 index 000000000..ee3034753 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/fxquotes_POST.md @@ -0,0 +1,783 @@ +--- +sidebarTitle: POST /fxQuotes +--- + +## 7.4 POST /fxQuotes/ +| Financial Institution Credit Transfer Quote Request - **pacs.091.001.01**| +|--| + +#### Contexte +*(DFSP -> FXP)* + +This message is initiated by a DFSP who is requesting liquidity cover in another currency to fund a transfer. The message is sent to a foreign exchange provider and is a request for conversion terms. The source currency is specified in `CdtTrfTxInf.UndrlygCstmrCdtTrf.InstdAmt.Ccy` and the target currency is specified in `CdtTrfTxInf.IntrBkSttlmAmt.Ccy`. + +#### Conversion Type `SEND` +If the `CdtTrfTxInf.InstrForCdtrAgt.InstrInf` is defined as `SEND`, then the source currency amount is expected to be defined `CdtTrfTxInf.UndrlygCstmrCdtTrf.InstdAmt.ActiveOrHistoricCurrencyAndAmount`, and the target currency amount will be calculated based on the source currency amount and fees. (The target amount `CdtTrfTxInf.IntrBkSttlmAmt.ActiveCurrencyAndAmount` should be specified as 0 and will not be used in the calculation.) + +#### Conversion Type `RECEIVE` +If the `CdtTrfTxInf.InstrForCdtrAgt.InstrInf` is defined as `RECEIVE`, then the target currency amount is expected to be defined `CdtTrfTxInf.IntrBkSttlmAmt.ActiveCurrencyAndAmount`, and the source currency amount will be calculated based on the target currency amount and fees. (The source amount `CdtTrfTxInf.UndrlygCstmrCdtTrf.InstdAmt.ActiveOrHistoricCurrencyAndAmount` should be specified as 0 and will not be used in the calculation.) + +In this phase of the transfer all participants to agree on the terms, and are expected to validate whether the transfer will be able to proceed. The Foreign Exchange provider is expected to respond to this request with a PUT /fxQuotes callback. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId": "01JBVM16V3Q4MSV8KTG0BRJGZ2", + "CreDtTm": "2024-11-04T12:57:39.427Z", + "NbOfTxs": "1", + "SttlmInf": { "SttlmMtd": "CLRG" }, + "PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z" +}, +"CdtTrfTxInf": { + "PmtId": { + "TxId": "01JBVM16V1ZXP2DM34BQT40NW9", + "InstrId": "01JBVM16V1ZXP2DM34BQT40NWA", + "EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF" }, + "Dbtr": { "FinInstnId": { "Othr": { "Id": "payer-dfsp" } } }, + "UndrlygCstmrCdtTrf": { + "Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}}, + "DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}}, + "Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}}, + "CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}}, + "InstdAmt": {"Ccy": "ZMW", + "ActiveOrHistoricCurrencyAndAmount": "21"}}, + "Cdtr": {"FinInstnId": {"Othr": {"Id": "fxp"}}}, + "IntrBkSttlmAmt": { "Ccy": "MWK", + "ActiveCurrencyAndAmount": "0"}, + "InstrForCdtrAgt": {"InstrInf": "SEND"}} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - Message Identification[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
     CreDtTm - ISODateTime[1..1]Creation Date and Time
     BtchBookg - BatchBookingIndicator[0..0]
     NbOfTxs - Max15NumericText[1..1]Number of Transactions
     CtrlSum - DecimalNumber[0..0]
     TtlIntrBkSttlmAmt - ActiveCurrencyAndAmount[0..0]A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmInf - Settlement Information[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
         SttlmMtd - SettlementMethod1Code[1..1]Only the CLRG: Clearing option is supported.
Specifies the details on how the settlement of the original transaction(s) between the
instructing agent and the instructed agent was completed.
         SttlmAcct - CashAccount40[0..0]Provides the details to identify an account.
         ClrSys - ClearingSystemIdentification3Choice[0..0]
         InstgRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstgRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         InstdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         ThrdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         ThrdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     PmtTpInf - PaymentTypeInformation28[0..0]Provides further details of the type of payment.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
CdtTrfTxInf - FxRequest_FICreditTransferProposal[1..1]Credit Transfer Transaction Information
     PmtId - PaymentIdentification[1..1]Set of elements used to reference a payment instruction.
         InstrId - Max35Text[0..1]InstructionIdentification (FSPIOP equivalent: transactionRequestId)

Definition: Unique identification, as assigned by an instructing party for an instructed party, to
unambiguously identify the instruction.

Usage: The instruction identification is a point to point reference that can be used between the
instructing party and the instructed party to refer to the individual instruction. It can be included in
several messages related to the instruction.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         EndToEndId - Max35Text[0..1]EndToEndIdentification (FSPIOP equivalent: transactionId)

Definition: Unique identification, as assigned by the initiating party, to unambiguously identify the
transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain.

Usage: The end-to-end identification can be used for reconciliation or to link tasks relating to the
transaction. It can be included in several messages related to the transaction.

Usage: In case there are technical limitations to pass on multiple references, the end-to-end
identification must be passed on throughout the entire end-to-end chain.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         TxId - Max35Text[1..1]TransactionIdentification (FSPIOP equivalent: quoteId in quote request, transferId in transfer request)

Definition: Unique identification, as assigned by the first instructing agent, to unambiguously identify the
transaction that is passed on, unchanged, throughout the entire interbank chain.

Usage: The transaction identification can be used for reconciliation, tracking or to link tasks relating to
the transaction on the interbank level.

Usage: The instructing agent has to make sure that the transaction identification is unique for a preagreed period.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         UETR - UETR[0..1]Universally unique identifier to provide an end-to-end reference of a payment transaction.
         ClrSysRef - ClearingSystemReference[0..1]Unique reference, as assigned by a clearing system, to unambiguously identify the instruction.
     PmtTpInf - PaymentTypeInformation[0..1]Set of elements used to further specify the type of transaction.
         InstrPrty - Priority2Code[0..1]Indicator of the urgency or order of importance that the instructing party
would like the instructed party to apply to the processing of the instruction.

HIGH: High priority
NORM: Normal priority
         ClrChanl - ClearingChannel2Code[0..1]Specifies the clearing channel for the routing of the transaction, as part of
the payment type identification.

RTGS: RealTimeGrossSettlementSystem Clearing channel is a real-time gross settlement system.
RTNS: RealTimeNetSettlementSystem Clearing channel is a real-time net settlement system.
MPNS: MassPaymentNetSystem Clearing channel is a mass payment net settlement system.
BOOK: BookTransfer Payment through internal book transfer.
         SvcLvl - ServiceLevel[0..1]Agreement under which or rules under which the transaction should be processed.
             Cd - Code[0..1]Specifies a pre-agreed service or level of service between the parties, as published in an external service level code list.
             Prtry - Proprietary[0..1]Specifies a pre-agreed service or level of service between the parties, as a proprietary code.
         LclInstrm - LocalInstrument[0..1]Definition: User community specific instrument.
Usage: This element is used to specify a local instrument, local clearing option and/or further qualify the service or service level.
             Cd - Code[0..1]Specifies the local instrument, as published in an external local instrument code list.
             Prtry - Proprietary[0..1]Specifies the local instrument, as a proprietary code.
         CtgyPurp - CategoryPurpose[0..1]Specifies the high level purpose of the instruction based on a set of pre-defined categories.
             Cd - Code[0..1]Category purpose, as published in an external category purpose code list.
             Prtry - Proprietary[0..1]Category purpose, in a proprietary form.
     IntrBkSttlmAmt - InterbankSettlementAmount[1..1]Amount of money moved between the instructing agent and the instructed agent.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmPrty - Priority3Code[0..0]
     SttlmTmIndctn - SettlementDateTimeIndication1[0..0]
     SttlmTmReq - SettlementTimeRequest2[0..0]
     PrvsInstgAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     UltmtDbtr - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     Dbtr - Debtor[1..1]Party that owes an amount of money to the (ultimate) creditor.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     DbtrAcct - DebtorAccount[0..1]Account used to process a payment.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     DbtrAgt - DebtorAgent[0..1]Financial institution servicing an account for the debtor.
         FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[0..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     DbtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     CdtrAgt - CreditorAgent[0..1]Financial institution servicing an account for the creditor.
         FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[0..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     CdtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     Cdtr - Creditor[1..1]Party to which an amount of money is due.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     CdtrAcct - CreditorAccount[0..1]Account to which a credit entry is made.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     UltmtCdtr - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstrForCdtrAgt - InstructionForCreditorAgent[1..1]Set of elements used to provide information on the remittance advice.
         Cd - Code[0..1]Coded information related to the processing of the payment instruction, provided by the initiating party, and intended for the creditor's agent.
         InstrInf - InstructionInformation[0..1]Further information complementing the coded instruction or instruction to the creditor's agent that is bilaterally agreed or specific to a user community.
     InstrForNxtAgt - InstructionForNextAgent1[0..0]Further information related to the processing of the payment instruction, provided by the initiating party, and intended for the next agent in the payment chain.
     Purp - Purpose[0..1]Underlying reason for the payment transaction.
         Cd - Code[0..1]
Underlying reason for the payment transaction, as published in an external purpose code list.
         Prtry - Proprietary[0..1]
Purpose, in a proprietary form.
     RmtInf - RemittanceInformation2[0..0]
     UndrlygAllcn - TransactionAllocation1[0..0]
     UndrlygCstmrCdtTrf - CreditTransferTransaction63[1..1]Underlying Customer Credit Transfer
TBD
         UltmtDbtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
         InitgPty - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
         Dbtr - PartyIdentification272[1..1]Party that owes an amount of money to the (ultimate) creditor.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         DbtrAcct - CashAccount40[0..0]Provides the details to identify an account.
         DbtrAgt - BranchAndFinancialInstitutionIdentification8[1..1]Financial institution servicing an account for the debtor.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
         DbtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         PrvsInstgAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         PrvsInstgAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
         PrvsInstgAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         PrvsInstgAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
         PrvsInstgAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         PrvsInstgAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
         IntrmyAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         IntrmyAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
         IntrmyAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         IntrmyAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
         IntrmyAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         IntrmyAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
         CdtrAgt - BranchAndFinancialInstitutionIdentification8[1..1]Financial institution servicing an account for the creditor.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
         CdtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         Cdtr - PartyIdentification272[1..1]Party to which an amount of money is due.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         CdtrAcct - CashAccount40[0..0]Provides the details to identify an account.
         UltmtCdtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
         InstrForCdtrAgt - InstructionForCreditorAgent3[0..0]Further information related to the processing of the payment instruction, provided by the initiating party, and intended for the creditor agent.
         InstrForNxtAgt - InstructionForNextAgent1[0..0]Further information related to the processing of the payment instruction, provided by the initiating party, and intended for the next agent in the payment chain.
         Tax - TaxData1[0..0]Details about tax paid, or to be paid, to the government in accordance with the law, including pre-defined parameters such as thresholds and type of account.
         RmtInf - RemittanceInformation22[0..0]
         InstdAmt - InstructedAmount[1..1]Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency as ordered by the initiating party.
     SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/fxquotes_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/fxquotes_PUT.md new file mode 100644 index 000000000..4f5c221fc --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/fxquotes_PUT.md @@ -0,0 +1,780 @@ +--- +sidebarTitle: "PUT /fxQuotes/{ID}" +--- + +## 7.5 PUT /fxQuotes/{ID} +|Financial Institution Credit Transfer Quote Response - **pacs.092.001.01**| +|--| + +#### Contexte +*(FXP -> DFSP)* + +This is triggered as a callback response to the POST /fxQuotes call. The message is generated by the foreign exchange provider and is a message response that includes the conversion terms. The FXP is expected to respond with this message if a terms requested are favorable and the FXP would like to participate in the transaction. + +The source currency amount is expected to be defined `CdtTrfTxInf.UndrlygCstmrCdtTrf.InstdAmt.ActiveOrHistoricCurrencyAndAmount`, and the target currency amount is provided in the `CdtTrfTxInf.IntrBkSttlmAmt.ActiveCurrencyAndAmount` field. These are clearing amounts and must have fees already included in their calculation. + +The `GrpHdr.PmtInstrXpryDtTm` specifies the expiry of the terms presented. It is the responsibility of the FXP to enforce this expiry in the transfer phase of a transaction. + +The `CdtTrfTxInf.VrfctnOfTerms.Sh256Sgntr` must contain the ILPv4 cryptographically signed condition, which is a cryptographic version of the conversion terms. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId": "01JBVM176FTHB9F2ZQJJ7AFCN8", + "CreDtTm": "2024-11-04T12:57:39.791Z", + "NbOfTxs": "1", + "SttlmInf": { "SttlmMtd": "CLRG" }, + "PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z" +}, +"CdtTrfTxInf": { + "VrfctnOfTerms": {"Sh256Sgntr": "KVHFmdTD6A..."}, + "PmtId": {"InstrId": "01JBVM16V1ZXP2DM34BQT40NWA", + "TxId": "01JBVM13SQYP507JB1DYBZVCMF"}, + "Dbtr": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}}, + "UndrlygCstmrCdtTrf": { + "Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}}, + "DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}}, + "Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}}, + "CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}}, + "InstdAmt": { "Ccy": "ZMW", + "ActiveOrHistoricCurrencyAndAmount": "21"}}, + "Cdtr": {"FinInstnId": {"Othr": {"Id": "fxp"}}}, + "IntrBkSttlmAmt": {"Ccy": "MWK", + "ActiveCurrencyAndAmount": "1080"}, + "InstrForCdtrAgt": {"InstrInf": "SEND"}} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - Message Identification[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
     CreDtTm - ISODateTime[1..1]Creation Date and Time
     BtchBookg - BatchBookingIndicator[0..0]
     NbOfTxs - Max15NumericText[1..1]Number of Transactions
     CtrlSum - DecimalNumber[0..0]
     TtlIntrBkSttlmAmt - ActiveCurrencyAndAmount[0..0]A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmInf - Settlement Information[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
         SttlmMtd - SettlementMethod1Code[1..1]Only the CLRG: Clearing option is supported.
Specifies the details on how the settlement of the original transaction(s) between the
instructing agent and the instructed agent was completed.
         SttlmAcct - CashAccount40[0..0]Provides the details to identify an account.
         ClrSys - ClearingSystemIdentification3Choice[0..0]
         InstgRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstgRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         InstdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         ThrdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         ThrdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     PmtTpInf - PaymentTypeInformation28[0..0]Provides further details of the type of payment.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
CdtTrfTxInf - CreditTransferTransaction68_FX_Quotes[1..1]Set of elements providing information specific to the individual credit transfer(s).
     PmtId - PaymentIdentification[1..1]Set of elements used to reference a payment instruction.
         InstrId - Max35Text[0..1]InstructionIdentification (FSPIOP equivalent: transactionRequestId)

Definition: Unique identification, as assigned by an instructing party for an instructed party, to
unambiguously identify the instruction.

Usage: The instruction identification is a point to point reference that can be used between the
instructing party and the instructed party to refer to the individual instruction. It can be included in
several messages related to the instruction.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         EndToEndId - Max35Text[0..1]EndToEndIdentification (FSPIOP equivalent: transactionId)

Definition: Unique identification, as assigned by the initiating party, to unambiguously identify the
transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain.

Usage: The end-to-end identification can be used for reconciliation or to link tasks relating to the
transaction. It can be included in several messages related to the transaction.

Usage: In case there are technical limitations to pass on multiple references, the end-to-end
identification must be passed on throughout the entire end-to-end chain.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         TxId - Max35Text[1..1]TransactionIdentification (FSPIOP equivalent: quoteId in quote request, transferId in transfer request)

Definition: Unique identification, as assigned by the first instructing agent, to unambiguously identify the
transaction that is passed on, unchanged, throughout the entire interbank chain.

Usage: The transaction identification can be used for reconciliation, tracking or to link tasks relating to
the transaction on the interbank level.

Usage: The instructing agent has to make sure that the transaction identification is unique for a preagreed period.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         UETR - UETR[0..1]Universally unique identifier to provide an end-to-end reference of a payment transaction.
         ClrSysRef - ClearingSystemReference[0..1]Unique reference, as assigned by a clearing system, to unambiguously identify the instruction.
     PmtTpInf - PaymentTypeInformation[0..1]Set of elements used to further specify the type of transaction.
         InstrPrty - Priority2Code[0..1]Indicator of the urgency or order of importance that the instructing party
would like the instructed party to apply to the processing of the instruction.

HIGH: High priority
NORM: Normal priority
         ClrChanl - ClearingChannel2Code[0..1]Specifies the clearing channel for the routing of the transaction, as part of
the payment type identification.

RTGS: RealTimeGrossSettlementSystem Clearing channel is a real-time gross settlement system.
RTNS: RealTimeNetSettlementSystem Clearing channel is a real-time net settlement system.
MPNS: MassPaymentNetSystem Clearing channel is a mass payment net settlement system.
BOOK: BookTransfer Payment through internal book transfer.
         SvcLvl - ServiceLevel[0..1]Agreement under which or rules under which the transaction should be processed.
             Cd - Code[0..1]Specifies a pre-agreed service or level of service between the parties, as published in an external service level code list.
             Prtry - Proprietary[0..1]Specifies a pre-agreed service or level of service between the parties, as a proprietary code.
         LclInstrm - LocalInstrument[0..1]Definition: User community specific instrument.
Usage: This element is used to specify a local instrument, local clearing option and/or further qualify the service or service level.
             Cd - Code[0..1]Specifies the local instrument, as published in an external local instrument code list.
             Prtry - Proprietary[0..1]Specifies the local instrument, as a proprietary code.
         CtgyPurp - CategoryPurpose[0..1]Specifies the high level purpose of the instruction based on a set of pre-defined categories.
             Cd - Code[0..1]Category purpose, as published in an external category purpose code list.
             Prtry - Proprietary[0..1]Category purpose, in a proprietary form.
     IntrBkSttlmAmt - InterbankSettlementAmount[1..1]Amount of money moved between the instructing agent and the instructed agent.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmPrty - Priority3Code[0..0]
     SttlmTmIndctn - SettlementDateTimeIndication1[0..0]
     SttlmTmReq - SettlementTimeRequest2[0..0]
     PrvsInstgAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     UltmtDbtr - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     Dbtr - Debtor[1..1]Party that owes an amount of money to the (ultimate) creditor.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     DbtrAcct - DebtorAccount[0..1]Account used to process a payment.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     DbtrAgt - DebtorAgent[0..1]Financial institution servicing an account for the debtor.
         FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[0..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     DbtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     CdtrAgt - CreditorAgent[0..1]Financial institution servicing an account for the creditor.
         FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[0..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     CdtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     Cdtr - Creditor[1..1]Party to which an amount of money is due.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     CdtrAcct - CreditorAccount[0..1]Account to which a credit entry is made.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     UltmtCdtr - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstrForCdtrAgt - InstructionForCreditorAgent[1..1]Set of elements used to provide information on the remittance advice.
         Cd - Code[0..1]Coded information related to the processing of the payment instruction, provided by the initiating party, and intended for the creditor's agent.
         InstrInf - InstructionInformation[0..1]Further information complementing the coded instruction or instruction to the creditor's agent that is bilaterally agreed or specific to a user community.
     InstrForNxtAgt - InstructionForNextAgent1[0..0]Further information related to the processing of the payment instruction, provided by the initiating party, and intended for the next agent in the payment chain.
     Purp - Purpose[0..1]Underlying reason for the payment transaction.
         Cd - Code[0..1]
Underlying reason for the payment transaction, as published in an external purpose code list.
         Prtry - Proprietary[0..1]
Purpose, in a proprietary form.
     RmtInf - RemittanceInformation2[0..0]
     UndrlygAllcn - TransactionAllocation1[0..0]
     UndrlygCstmrCdtTrf - CreditTransferTransaction63[1..1]Underlying Customer Credit Transfer
TBD
         UltmtDbtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
         InitgPty - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
         Dbtr - PartyIdentification272[1..1]Party that owes an amount of money to the (ultimate) creditor.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         DbtrAcct - CashAccount40[0..0]Provides the details to identify an account.
         DbtrAgt - BranchAndFinancialInstitutionIdentification8[1..1]Financial institution servicing an account for the debtor.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
         DbtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         PrvsInstgAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         PrvsInstgAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
         PrvsInstgAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         PrvsInstgAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
         PrvsInstgAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         PrvsInstgAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
         IntrmyAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         IntrmyAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
         IntrmyAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         IntrmyAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
         IntrmyAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         IntrmyAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
         CdtrAgt - BranchAndFinancialInstitutionIdentification8[1..1]Financial institution servicing an account for the creditor.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
         CdtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         Cdtr - PartyIdentification272[1..1]Party to which an amount of money is due.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         CdtrAcct - CashAccount40[0..0]Provides the details to identify an account.
         UltmtCdtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
         InstrForCdtrAgt - InstructionForCreditorAgent3[0..0]Further information related to the processing of the payment instruction, provided by the initiating party, and intended for the creditor agent.
         InstrForNxtAgt - InstructionForNextAgent1[0..0]Further information related to the processing of the payment instruction, provided by the initiating party, and intended for the next agent in the payment chain.
         Tax - TaxData1[0..0]Details about tax paid, or to be paid, to the government in accordance with the law, including pre-defined parameters such as thresholds and type of account.
         RmtInf - RemittanceInformation22[0..0]
         InstdAmt - InstructedAmount[1..1]Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency as ordered by the initiating party.
     SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/fxquotes_error_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/fxquotes_error_PUT.md new file mode 100644 index 000000000..2b8fcfa5b --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/fxquotes_error_PUT.md @@ -0,0 +1,184 @@ +--- +sidebarTitle: "PUT /fxQuotes/{ID}/error" +--- + + +## 7.6 PUT /fxQuotes/{ID}/error + +|Financial Institution to Financial Institution Payment Status Report - **pacs.002.001.15** | +|--| + +#### Contexte +*(DFSP -> FXP, FXP -> DFSP, HUB -> DFSP, HUB -> FXP)* + +This is triggered as a callback response to the POST /fxQuotes call when an error occurs. The message is generated by the entity who first encounter the error which can either be the DFSP, the HUB, or the FPX. All other participants involved are informed by this message. The `TxInfAndSts.StsRsnInf.Rsn.Cd` contains the Mojaloop error code, which specified the source and cause of the error. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader120[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - MessageIdentification[1..1]Definition: Point to point reference, as assigned by the instructing party, and sent to the next party in the chain to unambiguously identify the message.
Usage: The instructing party has to make sure that MessageIdentification is unique per instructed party for a pre-agreed period.
     CreDtTm - CreationDateTime[1..1]Date and time at which the message was created.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlBizQry - OriginalBusinessQuery1[0..0]
OrgnlGrpInfAndSts - OriginalGroupHeader22[0..0]
TxInfAndSts - PaymentTransaction161[1..1]Information concerning the original transactions, to which the status report message refers.
     StsId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to unambiguously identify the status report.
     OrgnlGrpInf - OriginalGroupInformation29[0..0]
     OrgnlInstrId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original instruction.

(FSPIOP equivalent: transactionRequestId)
     OrgnlEndToEndId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original end-to-end transaction.

(FSPIOP equivalent: transactionId)
     OrgnlTxId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original transaction.

(FSPIOP equivalent: quoteId)
     OrgnlUETR - UUIDv4Identifier[0..1]Unique end-to-end transaction reference, as assigned by the original sending party, to unambiguously identify the original transaction.
     TxSts - ExternalPaymentTransactionStatus1Code[0..1]Specifies the status of the transaction.
     StsRsnInf - StatusReasonInformation14[1..1]Information concerning the reason for the status.
         Orgtr - Originator[0..1]Party that issues the status.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[0..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[0..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[0..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         Rsn - Reason[1..1]Specifies the reason for the status report.
             Cd - Code[1..1]Reason for the status, as published in an external reason code list.
             Prtry - Proprietary[1..1]Reason for the status, in a proprietary form.
         AddtlInf - AdditionalInformation[0..1]Additional information about the status report.
     ChrgsInf - Charges16[0..0]NOTE: Unsure on description.

Seemingly a generic schema for charges, with an amount, agent, and type.
     AccptncDtTm - ISODateTime[0..1]Date and time at which the status was accepted.
     PrcgDt - DateAndDateTime2Choice[0..1]Date/time at which the instruction was processed by the specified party.
         Dt - Date[0..1]Specified date.
         DtTm - DateTime[0..1]Specified date and time.
     FctvIntrBkSttlmDt - DateAndDateTime2Choice[0..0]Specifies the reason for the status.
     AcctSvcrRef - Max35Text[0..1]Unique reference, as assigned by the account servicing institution, to unambiguously identify the status report.
     ClrSysRef - Max35Text[0..1]Reference that is assigned by the account servicing institution and sent to the account owner to unambiguously identify the transaction.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlTxRef - OriginalTransactionReference42[0..0]
     SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
         PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
         Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_PATCH.md b/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_PATCH.md new file mode 100644 index 000000000..0baf586cc --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_PATCH.md @@ -0,0 +1,186 @@ +--- +sidebarTitle: "PATCH /fxTransfers/{ID}" +--- + +## 7.13 PATCH /fxTransfers/{ID} +| Financial Institution to Financial Institution Payment Status Report - **pacs.002.001.15**| +|--| + +#### Contexte +*(HUB -> FXP)* + +This message use by the HUB to inform the foreign exchange provider participant in a cross currency transfer of the successful conclusion of the conversion. This message is only generated if the dependent transfer is committed in the hub. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{ + "PrcgDt":{ + "DtTm":"2024-11-04T12:57:45.213Z"}, + "TxSts":"COMM"} +} +``` + +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader120[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - MessageIdentification[1..1]Definition: Point to point reference, as assigned by the instructing party, and sent to the next party in the chain to unambiguously identify the message.
Usage: The instructing party has to make sure that MessageIdentification is unique per instructed party for a pre-agreed period.
     CreDtTm - CreationDateTime[1..1]Date and time at which the message was created.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlBizQry - OriginalBusinessQuery1[0..0]
OrgnlGrpInfAndSts - OriginalGroupHeader22[0..0]
TxInfAndSts - PaymentTransaction161[1..1]Information concerning the original transactions, to which the status report message refers.
     StsId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to unambiguously identify the status report.
     OrgnlGrpInf - OriginalGroupInformation29[0..0]
     OrgnlInstrId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original instruction.

(FSPIOP equivalent: transactionRequestId)
     OrgnlEndToEndId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original end-to-end transaction.

(FSPIOP equivalent: transactionId)
     OrgnlTxId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original transaction.

(FSPIOP equivalent: quoteId)
     OrgnlUETR - UUIDv4Identifier[0..1]Unique end-to-end transaction reference, as assigned by the original sending party, to unambiguously identify the original transaction.
     TxSts - ExternalPaymentTransactionStatus1Code[1..1]Specifies the status of the transaction.
     StsRsnInf - StatusReasonInformation14[0..1]Information concerning the reason for the status.
         Orgtr - Originator[0..1]Party that issues the status.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[0..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[0..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[0..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         Rsn - Reason[0..1]Specifies the reason for the status report.
             Cd - Code[0..1]Reason for the status, as published in an external reason code list.
             Prtry - Proprietary[0..1]Reason for the status, in a proprietary form.
         AddtlInf - AdditionalInformation[0..1]Additional information about the status report.
     ChrgsInf - Charges16[0..0]NOTE: Unsure on description.

Seemingly a generic schema for charges, with an amount, agent, and type.
     AccptncDtTm - ISODateTime[0..1]Date and time at which the status was accepted.
     PrcgDt - DateAndDateTime2Choice[1..1]Date/time at which the instruction was processed by the specified party.
         Dt - Date[1..1]Specified date.
         DtTm - DateTime[1..1]Specified date and time.
     FctvIntrBkSttlmDt - DateAndDateTime2Choice[0..0]Specifies the reason for the status.
     AcctSvcrRef - Max35Text[0..1]Unique reference, as assigned by the account servicing institution, to unambiguously identify the status report.
     ClrSysRef - Max35Text[0..1]Reference that is assigned by the account servicing institution and sent to the account owner to unambiguously identify the transaction.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlTxRef - OriginalTransactionReference42[0..0]
     SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
         PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
         Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_POST.md b/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_POST.md new file mode 100644 index 000000000..74d00ced0 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_POST.md @@ -0,0 +1,780 @@ +--- +sidebarTitle: POST /fxTransfers +--- + +## 7.10 POST /fxTransfers +| Execute Financial Institution Credit Transfer - **pacs.009.001.12**| +|--| + +#### Contexte +*(DFSP -> FXP)* + +This message is initiated by a DFSP who is requesting to transfer funds in another currency. The message is sent to the foreign exchange provider who provided the conversion terms. This message is an acknowledgement that the terms of the conversion are accepted, and is thus an instruction to proceed with the conversion. + +The source amount and currency are defined here `CdtTrfTxInf.UndrlygCstmrCdtTrf.InstdAmt.ActiveOrHistoricCurrencyAndAmount` and here `CdtTrfTxInf.UndrlygCstmrCdtTrf.InstdAmt.Ccy`, and the target amount and currency are defined `CdtTrfTxInf.IntrBkSttlmAmt.ActiveCurrencyAndAmount` and here `CdtTrfTxInf.IntrBkSttlmAmt.Ccy`. + +This message includes can be seen as an agreement to the terms that have previously been set up and established in the fxQuotes resource. The `CdtTrfTxInf.UndrlygCstmrCdtTrf.VrfctnOfTerms.Sh256Sgntr` field is a reference to the ILPv4 cryptographic condition of those terms. + +The `GrpHdr.PmtInstrXpryDtTm` specifies the expiry of the this transfer message. It is the responsibility of the HUB to enforce this expiry. The status of which a DFSP can query by making a `GET /fxTransfers/{ID}` request. + +The currency conversion is dependent on a transfer (the determiningTransferId) and is specified in the `CdtTrfTxInf.PmtId.EndToEndId` field. + +Voici un exemple de message : +```json +{ +"GrpHdr":{ + "MsgId":"01JBVM1BW4J0RJZSQ539QB9TKT", + "CreDtTm":"2024-11-04T12:57:44.580Z", + "NbOfTxs":"1", + "SttlmInf":{"SttlmMtd":"CLRG"}, + "PmtInstrXpryDtTm":"2024-11-04T12:58:44.579Z"}, +"CdtTrfTxInf":{ + "PmtId":{"TxId":"01JBVM16V1ZXP2DM34BQT40NWA", + "EndToEndId":"01JBVM13SQYP507JB1DYBZVCMF"}, + "Dbtr":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}}, + "UndrlygCstmrCdtTrf":{ + "Dbtr":{"Id":{"OrgId":{"Othr":{"Id":"payer-dfsp"}}}}, + "DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}}, + "Cdtr":{"Id":{"OrgId":{"Othr":{"Id":"fxp"}}}}, + "CdtrAgt":{"FinInstnId":{"Othr":{"Id":"fxp"}}}, + "InstdAmt":{"Ccy":"ZMW", + "ActiveOrHistoricCurrencyAndAmount":"21"}}, + "Cdtr":{"FinInstnId":{"Othr":{"Id":"fxp"}}}, + "IntrBkSttlmAmt":{"Ccy":"MWK", + "ActiveCurrencyAndAmount":"1080"}, + "VrfctnOfTerms":{"Sh256Sgntr":"KVHFmdTD6A..."}} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader.[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - Message Identification[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
     CreDtTm - ISODateTime[1..1]Creation Date and Time
     BtchBookg - BatchBookingIndicator[0..0]
     NbOfTxs - Max15NumericText[1..1]Number of Transactions
     CtrlSum - DecimalNumber[0..0]
     TtlIntrBkSttlmAmt - ActiveCurrencyAndAmount[0..0]A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmInf - Settlement Information[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
         SttlmMtd - SettlementMethod1Code[1..1]Only the CLRG: Clearing option is supported.
Specifies the details on how the settlement of the original transaction(s) between the
instructing agent and the instructed agent was completed.
         SttlmAcct - CashAccount40[0..0]Provides the details to identify an account.
         ClrSys - ClearingSystemIdentification3Choice[0..0]
         InstgRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstgRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         InstdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         ThrdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         ThrdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     PmtTpInf - PaymentTypeInformation28[0..0]Provides further details of the type of payment.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
CdtTrfTxInf - CreditTransferTransactionInformation.[1..1]Set of elements providing information specific to the individual credit transfer(s).
     PmtId - PaymentIdentification[1..1]Set of elements used to reference a payment instruction.
         InstrId - Max35Text[0..1]InstructionIdentification (FSPIOP equivalent: transactionRequestId)

Definition: Unique identification, as assigned by an instructing party for an instructed party, to
unambiguously identify the instruction.

Usage: The instruction identification is a point to point reference that can be used between the
instructing party and the instructed party to refer to the individual instruction. It can be included in
several messages related to the instruction.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         EndToEndId - Max35Text[0..1]EndToEndIdentification (FSPIOP equivalent: transactionId)

Definition: Unique identification, as assigned by the initiating party, to unambiguously identify the
transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain.

Usage: The end-to-end identification can be used for reconciliation or to link tasks relating to the
transaction. It can be included in several messages related to the transaction.

Usage: In case there are technical limitations to pass on multiple references, the end-to-end
identification must be passed on throughout the entire end-to-end chain.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         TxId - Max35Text[1..1]TransactionIdentification (FSPIOP equivalent: quoteId in quote request, transferId in transfer request)

Definition: Unique identification, as assigned by the first instructing agent, to unambiguously identify the
transaction that is passed on, unchanged, throughout the entire interbank chain.

Usage: The transaction identification can be used for reconciliation, tracking or to link tasks relating to
the transaction on the interbank level.

Usage: The instructing agent has to make sure that the transaction identification is unique for a preagreed period.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         UETR - UETR[0..1]Universally unique identifier to provide an end-to-end reference of a payment transaction.
         ClrSysRef - ClearingSystemReference[0..1]Unique reference, as assigned by a clearing system, to unambiguously identify the instruction.
     PmtTpInf - PaymentTypeInformation[0..1]Set of elements used to further specify the type of transaction.
         InstrPrty - Priority2Code[0..1]Indicator of the urgency or order of importance that the instructing party
would like the instructed party to apply to the processing of the instruction.

HIGH: High priority
NORM: Normal priority
         ClrChanl - ClearingChannel2Code[0..1]Specifies the clearing channel for the routing of the transaction, as part of
the payment type identification.

RTGS: RealTimeGrossSettlementSystem Clearing channel is a real-time gross settlement system.
RTNS: RealTimeNetSettlementSystem Clearing channel is a real-time net settlement system.
MPNS: MassPaymentNetSystem Clearing channel is a mass payment net settlement system.
BOOK: BookTransfer Payment through internal book transfer.
         SvcLvl - ServiceLevel[0..1]Agreement under which or rules under which the transaction should be processed.
             Cd - Code[0..1]Specifies a pre-agreed service or level of service between the parties, as published in an external service level code list.
             Prtry - Proprietary[0..1]Specifies a pre-agreed service or level of service between the parties, as a proprietary code.
         LclInstrm - LocalInstrument[0..1]Definition: User community specific instrument.
Usage: This element is used to specify a local instrument, local clearing option and/or further qualify the service or service level.
             Cd - Code[0..1]Specifies the local instrument, as published in an external local instrument code list.
             Prtry - Proprietary[0..1]Specifies the local instrument, as a proprietary code.
         CtgyPurp - CategoryPurpose[0..1]Specifies the high level purpose of the instruction based on a set of pre-defined categories.
             Cd - Code[0..1]Category purpose, as published in an external category purpose code list.
             Prtry - Proprietary[0..1]Category purpose, in a proprietary form.
     IntrBkSttlmAmt - InterbankSettlementAmount[1..1]Amount of money moved between the instructing agent and the instructed agent.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmPrty - Priority3Code[0..0]
     SttlmTmIndctn - SettlementDateTimeIndication1[0..0]
     SttlmTmReq - SettlementTimeRequest2[0..0]
     PrvsInstgAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     UltmtDbtr - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     Dbtr - Debtor[1..1]Party that owes an amount of money to the (ultimate) creditor.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     DbtrAcct - DebtorAccount[0..1]Account used to process a payment.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     DbtrAgt - DebtorAgent[0..1]Financial institution servicing an account for the debtor.
         FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[0..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     DbtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     CdtrAgt - CreditorAgent[0..1]Financial institution servicing an account for the creditor.
         FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[0..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     CdtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     Cdtr - Creditor[1..1]Party to which an amount of money is due.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     CdtrAcct - CreditorAccount[0..1]Account to which a credit entry is made.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     UltmtCdtr - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstrForCdtrAgt - InstructionForCreditorAgent[0..1]Set of elements used to provide information on the remittance advice.
         Cd - Code[0..1]Coded information related to the processing of the payment instruction, provided by the initiating party, and intended for the creditor's agent.
         InstrInf - InstructionInformation[0..1]Further information complementing the coded instruction or instruction to the creditor's agent that is bilaterally agreed or specific to a user community.
     InstrForNxtAgt - InstructionForNextAgent1[0..0]Further information related to the processing of the payment instruction, provided by the initiating party, and intended for the next agent in the payment chain.
     Purp - Purpose[0..1]Underlying reason for the payment transaction.
         Cd - Code[0..1]
Underlying reason for the payment transaction, as published in an external purpose code list.
         Prtry - Proprietary[0..1]
Purpose, in a proprietary form.
     RmtInf - RemittanceInformation2[0..0]
     UndrlygAllcn - TransactionAllocation1[0..0]
     UndrlygCstmrCdtTrf - CreditTransferTransaction63[1..1]Underlying Customer Credit Transfer
TBD
         UltmtDbtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
         InitgPty - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
         Dbtr - PartyIdentification272[1..1]Party that owes an amount of money to the (ultimate) creditor.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         DbtrAcct - CashAccount40[0..0]Provides the details to identify an account.
         DbtrAgt - BranchAndFinancialInstitutionIdentification8[1..1]Financial institution servicing an account for the debtor.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
         DbtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         PrvsInstgAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         PrvsInstgAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
         PrvsInstgAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         PrvsInstgAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
         PrvsInstgAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         PrvsInstgAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
         IntrmyAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         IntrmyAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
         IntrmyAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         IntrmyAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
         IntrmyAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         IntrmyAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
         CdtrAgt - BranchAndFinancialInstitutionIdentification8[1..1]Financial institution servicing an account for the creditor.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
         CdtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         Cdtr - PartyIdentification272[1..1]Party to which an amount of money is due.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         CdtrAcct - CashAccount40[0..0]Provides the details to identify an account.
         UltmtCdtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
         InstrForCdtrAgt - InstructionForCreditorAgent3[0..0]Further information related to the processing of the payment instruction, provided by the initiating party, and intended for the creditor agent.
         InstrForNxtAgt - InstructionForNextAgent1[0..0]Further information related to the processing of the payment instruction, provided by the initiating party, and intended for the next agent in the payment chain.
         Tax - TaxData1[0..0]Details about tax paid, or to be paid, to the government in accordance with the law, including pre-defined parameters such as thresholds and type of account.
         RmtInf - RemittanceInformation22[0..0]
         InstdAmt - InstructedAmount[1..1]Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency as ordered by the initiating party.
     SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_PUT.md new file mode 100644 index 000000000..1ba6d6c16 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_PUT.md @@ -0,0 +1,102 @@ +--- +sidebarTitle: "PUT /fxTransfers/{ID}" +--- + +## 7.11 PUT /fxTransfers/{ID} + +| Financial Institution to Financial Institution Payment Status Report - **pacs.002.001.15**| +|--| + +#### Contexte +*(FXP -> DFSP)* + +This message is a response to the `POST \fxTransfers` call initiated by the DFSP who is requesting to proceed with the conversion terms presented in the `PUT \fxquotes`. It is the FXP's responsibility to check that the clearing amounts align with the agreed conversion terms, and if all requirements are met, use this message to lock-in the agreed terms. Once the hub receives this acceptance message, the conversion can no-longer timeout. Final completion of the conversion will only occur once the dependent transfer is committed. + +The cryptographic ILP fulfillment provided in the `TxInfAndSts.ExctnConf` field, is released by the FXP as an indication to the HUB that the terms have been met. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{ + "ExctnConf":"ou1887jmG-l...", + "PrcgDt":{"DtTm":"2024-11-04T12:57:45.213Z"}, + "TxSts":"RESV"} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader113[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - MessageIdentification[1..1]Definition: Point to point reference, as assigned by the instructing party, and sent to the next party in the chain to unambiguously identify the message.
Usage: The instructing party has to make sure that MessageIdentification is unique per instructed party for a pre-agreed period.
     CreDtTm - CreationDateTime[1..1]Date and time at which the message was created.
     BtchBookg - BatchBookingIndicator[0..0]
     NbOfTxs - Max15NumericText[0..0]Specifies a numeric string with a maximum length of 15 digits.
     CtrlSum - DecimalNumber[0..0]
     TtlIntrBkSttlmAmt - ActiveCurrencyAndAmount[0..0]A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmInf - SettlementInstruction15[0..0]Only the CLRG: Clearing option is supported.
Specifies the details on how the settlement of the original transaction(s) between the
instructing agent and the instructed agent was completed.
     PmtTpInf - PaymentTypeInformation28[0..0]Provides further details of the type of payment.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
CdtTrfTxInf - CreditTransferTransaction62[0..0]
SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_error_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_error_PUT.md new file mode 100644 index 000000000..8e395529d --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/fxtransfers_error_PUT.md @@ -0,0 +1,182 @@ +--- +sidebarTitle: "PUT /fxTransfers/{ID}/error" +--- + +## 7.12 PUT /fxTransfers/{ID}/error + +| Financial Institution to Financial Institution Payment Status Report - **pacs.002.001.15**| +|--| + +#### Contexte +*(FXP -> DFSP, FXP -> HUB, DFSP -> HUB, DFSP -> FXP, HUB -> DFSP)* + +This is triggered as a callback response to the POST /fxTransfers call when an error occurs. The message is generated by the entity who first encounter the error which can either be the DFSP, or the HUB. All other participants involved are informed by this message. The `TxInfAndSts.StsRsnInf.Rsn.Cd` contains the Mojaloop error code, which specified the source and cause of the error. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader120[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - MessageIdentification[1..1]Definition: Point to point reference, as assigned by the instructing party, and sent to the next party in the chain to unambiguously identify the message.
Usage: The instructing party has to make sure that MessageIdentification is unique per instructed party for a pre-agreed period.
     CreDtTm - CreationDateTime[1..1]Date and time at which the message was created.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlBizQry - OriginalBusinessQuery1[0..0]
OrgnlGrpInfAndSts - OriginalGroupHeader22[0..0]
TxInfAndSts - PaymentTransaction161[1..1]Information concerning the original transactions, to which the status report message refers.
     StsId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to unambiguously identify the status report.
     OrgnlGrpInf - OriginalGroupInformation29[0..0]
     OrgnlInstrId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original instruction.

(FSPIOP equivalent: transactionRequestId)
     OrgnlEndToEndId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original end-to-end transaction.

(FSPIOP equivalent: transactionId)
     OrgnlTxId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original transaction.

(FSPIOP equivalent: quoteId)
     OrgnlUETR - UUIDv4Identifier[0..1]Unique end-to-end transaction reference, as assigned by the original sending party, to unambiguously identify the original transaction.
     TxSts - ExternalPaymentTransactionStatus1Code[0..1]Specifies the status of the transaction.
     StsRsnInf - StatusReasonInformation14[1..1]Information concerning the reason for the status.
         Orgtr - Originator[0..1]Party that issues the status.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[0..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[0..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[0..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         Rsn - Reason[1..1]Specifies the reason for the status report.
             Cd - Code[1..1]Reason for the status, as published in an external reason code list.
             Prtry - Proprietary[1..1]Reason for the status, in a proprietary form.
         AddtlInf - AdditionalInformation[0..1]Additional information about the status report.
     ChrgsInf - Charges16[0..0]NOTE: Unsure on description.

Seemingly a generic schema for charges, with an amount, agent, and type.
     AccptncDtTm - ISODateTime[0..1]Date and time at which the status was accepted.
     PrcgDt - DateAndDateTime2Choice[0..1]Date/time at which the instruction was processed by the specified party.
         Dt - Date[0..1]Specified date.
         DtTm - DateTime[0..1]Specified date and time.
     FctvIntrBkSttlmDt - DateAndDateTime2Choice[0..0]Specifies the reason for the status.
     AcctSvcrRef - Max35Text[0..1]Unique reference, as assigned by the account servicing institution, to unambiguously identify the status report.
     ClrSysRef - Max35Text[0..1]Reference that is assigned by the account servicing institution and sent to the account owner to unambiguously identify the transaction.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlTxRef - OriginalTransactionReference42[0..0]
     SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
         PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
         Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
diff --git a/docs/fr/product/features/Iso20022/v1.0/script/parties_GET.md b/docs/fr/product/features/Iso20022/v1.0/script/parties_GET.md new file mode 100644 index 000000000..4953d2df0 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/parties_GET.md @@ -0,0 +1,16 @@ +--- +sidebarTitle: "GET /parties" +--- + +## 7.1 GET /parties/{type}/{partyIdentifier}[/{subId}] + +L’endpoint GET /parties ne prend pas en charge et n’exige pas de charge utile ; il peut être vu comme une instruction pour déclencher un rapport de vérification d’identification de compte. + +- **{type}** — Types d’identifiant de partie
+ Le **{type}** désigne la classification du type d’identifiant de partie. Chaque schéma ne prend en charge qu’un sous-ensemble de ces codes. Les codes pris en charge par le schéma peuvent provenir des codes ISO 20022 d’identification externe d’organisation ou de personne, ou de codes pris en charge par FSPIOP. La liste complète des codes pris en charge figure dans [**l’annexe A**](../Appendix.md). + +- **partyIdentifier**
+ Il s’agit de l’identifiant de la partie représentée, du type indiqué par le {type} ci-dessus. + +- **{subId}**
+ Sous-identifiant ou sous-type pour la partie ; certaines implémentations l’exigent pour garantir l’unicité de l’identifiant. diff --git a/docs/fr/product/features/Iso20022/v1.0/script/parties_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/parties_PUT.md new file mode 100644 index 000000000..5e04eb9ee --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/parties_PUT.md @@ -0,0 +1,680 @@ +--- +sidebarTitle: PUT /parties +--- + +## 7.2 PUT /Parties/{type}/{partyIdentifier}[/{subId}] +|**Account Identification Verification Report - acmt.024.001.04**| +|--| + +#### Contexte +*(DFSP -> DFSP)* + +This is triggers as a callback response to the GET /parties call. The message is between DFSPs connected in the scheme and is a check that validates that the account represented is active. + +Voici un exemple de message : +``` json +{ +"Assgnmt": { + "MsgId": "01JBVM14S6SC453EY9XB9GXQB5", + "CreDtTm": "2024-11-04T12:57:37.318Z", + "Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id": "payee-dfps" }}}}, + "Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp" }}}}}, +"Rpt": { + "Vrfctn": true, + "OrgnlId": "MSISDN/16665551002", + "UpdtdPtyAndAcctId": { + "Pty": { + "Id": {"PrvtId": {"Othr": {"SchmeNm": {"Prtry": "MSISDN"}, + "Id": "16665551002"}}}, + "Nm": "Chikondi Banda"}, + "Agt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp" }}}, + "Acct": { "Ccy": "MWK" }}} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
Assgnmt - Assignment[1..1]Identifies the identification assignment.
     MsgId - MessageIdentification[1..1]Unique identification, as assigned by the assigner, to unambiguously identify the message.
     CreDtTm - CreationDateTime[1..1]Date and time at which the identification assignment was created.
     Cretr - Party50Choice[0..0]
     FrstAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     Assgnr - Assignor[1..1]Party that assigns the identification assignment to another party. This is also the sender of the message.
         Pty - Party[1..1]Identification of a person or an organisation.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous way to identify an organisation.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Max256Text[0..1]Identification for an organisation. FSPIOP equivalent to Party Identifier for an organisation in ISO 20022. Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - PrivateIdentification[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryOfResidence[0..1]Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - ContactDetails[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Name prefix to be used before the name of the person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - Max2048Text[0..0]Specifies a character string with a maximum length of 2048 characters.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - Other[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredMethod[0..1]Preferred method used to reach the contact.
         Agt - Agent[1..1]Identification of a financial institution.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution, as assigned under an internationally recognised or proprietary identification scheme.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Definition: Identifies a specific branch of a financial institution.
Usage: This component should be used in case the identification information in the financial institution component does not provide identification up to branch level.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEIIdentifier[0..1]Legal Entity Identifier
Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
     Assgne - Assignee[1..1]Party that the identification assignment is assigned to. This is also the receiver of the message.
         Pty - Party[1..1]Identification of a person or an organisation.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous way to identify an organisation.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Max256Text[0..1]Identification for an organisation. FSPIOP equivalent to Party Identifier for an organisation in ISO 20022. Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - PrivateIdentification[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryOfResidence[0..1]Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - ContactDetails[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Name prefix to be used before the name of the person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - Max2048Text[0..0]Specifies a character string with a maximum length of 2048 characters.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - Other[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredMethod[0..1]Preferred method used to reach the contact.
         Agt - Agent[1..1]Identification of a financial institution.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution, as assigned under an internationally recognised or proprietary identification scheme.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Definition: Identifies a specific branch of a financial institution.
Usage: This component should be used in case the identification information in the financial institution component does not provide identification up to branch level.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEIIdentifier[0..1]Legal Entity Identifier
Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
OrgnlAssgnmt - MessageIdentification8[0..0]
Rpt - Report[1..1]Information concerning the verification of the identification data for which verification was requested.
     OrgnlId - OriginalIdentification[1..1]Unique identification, as assigned by a sending party, to unambiguously identify the party and account identification information group within the original message.
     Vrfctn - Verification[1..1]Identifies whether the party and/or account information received is correct. Boolean value.
     Rsn - Reason[0..1]Specifies the reason why the verified identification information is incorrect.
         Cd - Code[0..1]Reason why the verified identification information is incorrect, as published in an external reason code list.
         Prtry - Proprietary[0..1]Reason why the verified identification information is incorrect, in a free text form.
     OrgnlPtyAndAcctId - OriginalPartyAndAccountIdentification[0..1]Provides party and/or account identification information as given in the original message.
         Pty - Party[0..1]Account owner that owes an amount of money or to whom an amount of money is due.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[0..1]Unique and unambiguous way to identify an organisation.
                 OrgId - Organisation[0..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Max256Text[0..1]Identification for an organisation. FSPIOP equivalent to Party Identifier for an organisation in ISO 20022. Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - PrivateIdentification[0..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryOfResidence[0..1]Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - ContactDetails[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Name prefix to be used before the name of the person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - Max2048Text[0..0]Specifies a character string with a maximum length of 2048 characters.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - Other[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredMethod[0..1]Preferred method used to reach the contact.
         Acct - Account[0..1]Unambiguous identification of the account of a party.
             Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
                 IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
                 Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             Tp - Type[0..1]Specifies the nature, or use of the account.
                 Cd - Code[0..1]Account type, in a coded form.
                 Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
             Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
             Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
             Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
                 Tp - Type[0..1]Type of the proxy identification.
                     Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
                 Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
         Agt - Agent[0..1]Financial institution servicing an account for a party.
             FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution, as assigned under an internationally recognised or proprietary identification scheme.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Definition: Identifies a specific branch of a financial institution.
Usage: This component should be used in case the identification information in the financial institution component does not provide identification up to branch level.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEIIdentifier[0..1]Legal Entity Identifier
Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
     UpdtdPtyAndAcctId - UpdatedPartyAndAccountIdentification[1..1]Provides party and/or account identification information.
         Pty - Party[1..1]Account owner that owes an amount of money or to whom an amount of money is due.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous way to identify an organisation.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Max256Text[0..1]Identification for an organisation. FSPIOP equivalent to Party Identifier for an organisation in ISO 20022. Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - PrivateIdentification[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryOfResidence[0..1]Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - ContactDetails[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Name prefix to be used before the name of the person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - Max2048Text[0..0]Specifies a character string with a maximum length of 2048 characters.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - Other[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredMethod[0..1]Preferred method used to reach the contact.
         Acct - Account[0..1]Unambiguous identification of the account of a party.
             Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
                 IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
                 Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             Tp - Type[0..1]Specifies the nature, or use of the account.
                 Cd - Code[0..1]Account type, in a coded form.
                 Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
             Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
             Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
             Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
                 Tp - Type[0..1]Type of the proxy identification.
                     Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
                 Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
         Agt - Agent[0..1]Financial institution servicing an account for a party.
             FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution, as assigned under an internationally recognised or proprietary identification scheme.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Definition: Identifies a specific branch of a financial institution.
Usage: This component should be used in case the identification information in the financial institution component does not provide identification up to branch level.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEIIdentifier[0..1]Legal Entity Identifier
Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
SplmtryData - SupplementaryData[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/parties_error_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/parties_error_PUT.md new file mode 100644 index 000000000..faf5d8fdd --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/parties_error_PUT.md @@ -0,0 +1,679 @@ +--- +sidebarTitle: "PUT /parties/{ID}/error" +--- + + +## 7.3 PUT /parties/{type}/{partyIdentifier}[/{subId}]/error +|**Account Identification Verification Report - acmt.024.001.04**| +|--| + +#### Contexte +*(DFSP -> DFSP)* + +This is triggered as a callback response to the GET /parties call when an error occurs. The message is between DFSPs connected in the scheme and indicates an error in the account verification process. All DFSP participating the the scheme are expected to respond with this message. + +Voici un exemple de message : +```json +{ + "Assgnmt": { + "MsgId": "01JBVM14S6SC453EY9XB9GXQBW", + "CreDtTm": "2013-03-07T16:30:00", + "Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp" } } } }, + "Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp" } } } } + }, + "Rpt": { + "Vrfctn": false, + "OrgnlId": "MSISDN/16665551002", + "CreDtTm": "2013-03-07T16:30:00", + "Rsn": { "Prtry": 3204 } + } +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
Assgnmt - Assignment[1..1]Information related to the identification assignment.
     MsgId - MessageIdentification[1..1]Unique identification, as assigned by the assigner, to unambiguously identify the message.
     CreDtTm - CreationDateTime[1..1]Date and time at which the identification assignment was created.
     Cretr - Party50Choice[0..0]
     FrstAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     Assgnr - Assignor[1..1]Party that assigns the identification assignment to another party. This is also the sender of the message.
         Pty - Party[1..1]Identification of a person or an organisation.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous way to identify an organisation.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Max256Text[0..1]Identification for an organisation. FSPIOP equivalent to Party Identifier for an organisation in ISO 20022. Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - PrivateIdentification[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryOfResidence[0..1]Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - ContactDetails[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Name prefix to be used before the name of the person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - Max2048Text[0..0]Specifies a character string with a maximum length of 2048 characters.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - Other[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredMethod[0..1]Preferred method used to reach the contact.
         Agt - Agent[1..1]Identification of a financial institution.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution, as assigned under an internationally recognised or proprietary identification scheme.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Definition: Identifies a specific branch of a financial institution.
Usage: This component should be used in case the identification information in the financial institution component does not provide identification up to branch level.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEIIdentifier[0..1]Legal Entity Identifier
Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
     Assgne - Assignee[1..1]Party that the identification assignment is assigned to. This is also the receiver of the message.
         Pty - Party[1..1]Identification of a person or an organisation.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[1..1]Unique and unambiguous way to identify an organisation.
                 OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Max256Text[0..1]Identification for an organisation. FSPIOP equivalent to Party Identifier for an organisation in ISO 20022. Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - PrivateIdentification[1..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryOfResidence[0..1]Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - ContactDetails[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Name prefix to be used before the name of the person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - Max2048Text[0..0]Specifies a character string with a maximum length of 2048 characters.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - Other[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredMethod[0..1]Preferred method used to reach the contact.
         Agt - Agent[1..1]Identification of a financial institution.
             FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution, as assigned under an internationally recognised or proprietary identification scheme.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[1..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Definition: Identifies a specific branch of a financial institution.
Usage: This component should be used in case the identification information in the financial institution component does not provide identification up to branch level.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEIIdentifier[0..1]Legal Entity Identifier
Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
OrgnlAssgnmt - MessageIdentification8[0..0]
Rpt - Report[1..1]Information concerning the verification of the identification data for which verification was requested.
     OrgnlId - OriginalIdentification[1..1]Unique identification, as assigned by a sending party, to unambiguously identify the party and account identification information group within the original message.
     Vrfctn - Verification[1..1]Identifies whether the party and/or account information received is correct. Boolean value.
     Rsn - Reason[1..1]Specifies the reason why the verified identification information is incorrect.
         Cd - Code[1..1]Reason why the verified identification information is incorrect, as published in an external reason code list.
         Prtry - Proprietary[1..1]Reason why the verified identification information is incorrect, in a free text form.
     OrgnlPtyAndAcctId - OriginalPartyAndAccountIdentification[0..1]Provides party and/or account identification information as given in the original message.
         Pty - Party[0..1]Account owner that owes an amount of money or to whom an amount of money is due.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[0..1]Unique and unambiguous way to identify an organisation.
                 OrgId - Organisation[0..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Max256Text[0..1]Identification for an organisation. FSPIOP equivalent to Party Identifier for an organisation in ISO 20022. Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - PrivateIdentification[0..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryOfResidence[0..1]Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - ContactDetails[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Name prefix to be used before the name of the person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - Max2048Text[0..0]Specifies a character string with a maximum length of 2048 characters.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - Other[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredMethod[0..1]Preferred method used to reach the contact.
         Acct - Account[0..1]Unambiguous identification of the account of a party.
             Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
                 IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
                 Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             Tp - Type[0..1]Specifies the nature, or use of the account.
                 Cd - Code[0..1]Account type, in a coded form.
                 Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
             Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
             Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
             Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
                 Tp - Type[0..1]Type of the proxy identification.
                     Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
                 Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
         Agt - Agent[0..1]Financial institution servicing an account for a party.
             FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution, as assigned under an internationally recognised or proprietary identification scheme.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Definition: Identifies a specific branch of a financial institution.
Usage: This component should be used in case the identification information in the financial institution component does not provide identification up to branch level.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEIIdentifier[0..1]Legal Entity Identifier
Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
     UpdtdPtyAndAcctId - UpdatedPartyAndAccountIdentification[0..1]Provides party and/or account identification information.
         Pty - Party[0..1]Account owner that owes an amount of money or to whom an amount of money is due.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[0..1]Unique and unambiguous way to identify an organisation.
                 OrgId - Organisation[0..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Max256Text[0..1]Identification for an organisation. FSPIOP equivalent to Party Identifier for an organisation in ISO 20022. Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - PrivateIdentification[0..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryOfResidence[0..1]Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - ContactDetails[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Name prefix to be used before the name of the person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - Max2048Text[0..0]Specifies a character string with a maximum length of 2048 characters.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - Other[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredMethod[0..1]Preferred method used to reach the contact.
         Acct - Account[0..1]Unambiguous identification of the account of a party.
             Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
                 IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
                 Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             Tp - Type[0..1]Specifies the nature, or use of the account.
                 Cd - Code[0..1]Account type, in a coded form.
                 Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
             Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
             Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
             Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
                 Tp - Type[0..1]Type of the proxy identification.
                     Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
                 Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
         Agt - Agent[0..1]Financial institution servicing an account for a party.
             FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution, as assigned under an internationally recognised or proprietary identification scheme.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Definition: Identifies a specific branch of a financial institution.
Usage: This component should be used in case the identification information in the financial institution component does not provide identification up to branch level.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEIIdentifier[0..1]Legal Entity Identifier
Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
SplmtryData - SupplementaryData[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
+ + diff --git a/docs/fr/product/features/Iso20022/v1.0/script/quotes_POST.md b/docs/fr/product/features/Iso20022/v1.0/script/quotes_POST.md new file mode 100644 index 000000000..a8ff1e187 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/quotes_POST.md @@ -0,0 +1,635 @@ +--- +sidebarTitle: POST /quotes +--- + +## 7.7 POST /quotes +|**Financial Institution to Financial Institution Customer Credit Transfer Quote Request - pacs.081.001.01**| +|--| + +#### Contexte +*(DFSP -> DFSP)* + +This request for quote message that is initiated by the payer DFSP who is requesting the payee DFSP to provide the terms of the transfer. The reply to this request is a callback made on the PUT /quotes endpoint. In this phase of the transfer all participants present and agree on the terms of the transfer, and are expected to validate whether the transfer will be able to proceed. + +If this transaction includes currency conversion, then the transfer amount and currency specified must be in target currency. The transfer amounts is specified in the `CdtTrfTxInf.IntrBkSttlmAmt.ActiveCurrencyAndAmount` and the `CdtTrfTxInf.IntrBkSttlmAmt.Ccy` fields. +Both the `ChrgBr` type `CRED` and `DEBT` are supported. +#### Charge Type `CRED` +If the `CdtTrfTxInf.ChrgBr` is defined as `CRED`, then the transfer amount is expected to remain the same in the returned transfer terms and the payee party receive amount is adjusted to account for any fees. + +#### Charge Type `DEBT` +If the `CdtTrfTxInf.ChrgBr` is defined as `DEBT`, then the amount the payee party receives must equal the transfer amount specified. The transfer amount in returned transfer terms is adjusted to account for any fees. + +The Identifier for this request must be a ULID generated identifier and is specified in the `CdtTrfTxInf.PmtId.TxId` field. If this transfer is part of a wider transaction, then that too is represented by a ULID specified in the `CdtTrfTxInf.PmtId.EndToEndId` field. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId": "01JBVM19DJQ96BS9X6VA5AMW2Y", + "CreDtTm": "2024-11-04T12:57:42.066Z", + "NbOfTxs": "1", + "PmtInstrXpryDtTm": "2024-11-04T12:58:42.063Z", + "SttlmInf": { "SttlmMtd": "CLRG" } + }, +"CdtTrfTxInf": { + "PmtId": { + "TxId": "01JBVM19DFKNRWC21FGJNTHRAT", + "EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF"}, + "Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16665551002" }}}}, + "CdtrAgt": { "FinInstnId": { "Othr": { "Id": "test-mwk-dfsp" }}}, + "Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16135551001" }}}, + "Name": "Joe Blogs"}, + "DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp" }}}, + "IntrBkSttlmAmt": { + "Ccy": "MWK", + "ActiveCurrencyAndAmount": "1080"}, + "Purp": { "Prtry": "TRANSFER"}, + "ChrgBr": "CRED"} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - Group Header[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - Message Identification[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
     CreDtTm - ISODateTime[1..1]Creation Date and Time
     BtchBookg - BatchBookingIndicator[0..0]
     NbOfTxs - Max15NumericText[1..1]Number of Transactions
     CtrlSum - DecimalNumber[0..0]
     TtlIntrBkSttlmAmt - ActiveCurrencyAndAmount[0..0]A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmInf - Settlement Information[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
         SttlmMtd - SettlementMethod1Code[1..1]Only the CLRG: Clearing option is supported.
Specifies the details on how the settlement of the original transaction(s) between the
instructing agent and the instructed agent was completed.
         SttlmAcct - CashAccount40[0..0]Provides the details to identify an account.
         ClrSys - ClearingSystemIdentification3Choice[0..0]
         InstgRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstgRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         InstdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         ThrdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         ThrdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     PmtTpInf - PaymentTypeInformation28[0..0]Provides further details of the type of payment.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
CdtTrfTxInf - CreditTransferTransaction64[1..1]Credit Transfer Transaction Information
     PmtId - PaymentIdentification[1..1]Set of elements used to reference a payment instruction.
         InstrId - Max35Text[0..1]InstructionIdentification (FSPIOP equivalent: transactionRequestId)

Definition: Unique identification, as assigned by an instructing party for an instructed party, to
unambiguously identify the instruction.

Usage: The instruction identification is a point to point reference that can be used between the
instructing party and the instructed party to refer to the individual instruction. It can be included in
several messages related to the instruction.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         EndToEndId - Max35Text[0..1]EndToEndIdentification (FSPIOP equivalent: transactionId)

Definition: Unique identification, as assigned by the initiating party, to unambiguously identify the
transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain.

Usage: The end-to-end identification can be used for reconciliation or to link tasks relating to the
transaction. It can be included in several messages related to the transaction.

Usage: In case there are technical limitations to pass on multiple references, the end-to-end
identification must be passed on throughout the entire end-to-end chain.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         TxId - Max35Text[1..1]TransactionIdentification (FSPIOP equivalent: quoteId in quote request, transferId in transfer request)

Definition: Unique identification, as assigned by the first instructing agent, to unambiguously identify the
transaction that is passed on, unchanged, throughout the entire interbank chain.

Usage: The transaction identification can be used for reconciliation, tracking or to link tasks relating to
the transaction on the interbank level.

Usage: The instructing agent has to make sure that the transaction identification is unique for a preagreed period.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         UETR - UETR[0..1]Universally unique identifier to provide an end-to-end reference of a payment transaction.
         ClrSysRef - ClearingSystemReference[0..1]Unique reference, as assigned by a clearing system, to unambiguously identify the instruction.
     PmtTpInf - PaymentTypeInformation[0..1]Set of elements used to further specify the type of transaction.
         InstrPrty - Priority2Code[0..1]Indicator of the urgency or order of importance that the instructing party
would like the instructed party to apply to the processing of the instruction.

HIGH: High priority
NORM: Normal priority
         ClrChanl - ClearingChannel2Code[0..1]Specifies the clearing channel for the routing of the transaction, as part of
the payment type identification.

RTGS: RealTimeGrossSettlementSystem Clearing channel is a real-time gross settlement system.
RTNS: RealTimeNetSettlementSystem Clearing channel is a real-time net settlement system.
MPNS: MassPaymentNetSystem Clearing channel is a mass payment net settlement system.
BOOK: BookTransfer Payment through internal book transfer.
         SvcLvl - ServiceLevel[0..1]Agreement under which or rules under which the transaction should be processed.
             Cd - Code[0..1]Specifies a pre-agreed service or level of service between the parties, as published in an external service level code list.
             Prtry - Proprietary[0..1]Specifies a pre-agreed service or level of service between the parties, as a proprietary code.
         LclInstrm - LocalInstrument[0..1]Definition: User community specific instrument.
Usage: This element is used to specify a local instrument, local clearing option and/or further qualify the service or service level.
             Cd - Code[0..1]Specifies the local instrument, as published in an external local instrument code list.
             Prtry - Proprietary[0..1]Specifies the local instrument, as a proprietary code.
         CtgyPurp - CategoryPurpose[0..1]Specifies the high level purpose of the instruction based on a set of pre-defined categories.
             Cd - Code[0..1]Category purpose, as published in an external category purpose code list.
             Prtry - Proprietary[0..1]Category purpose, in a proprietary form.
     IntrBkSttlmAmt - InterbankSettlementAmount[1..1]Amount of money moved between the instructing agent and the instructed agent.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmPrty - Priority3Code[0..0]
     SttlmTmIndctn - SettlementDateTimeIndication1[0..0]
     SttlmTmReq - SettlementTimeRequest2[0..0]
     AccptncDtTm - ISODateTime[0..0]A particular point in the progression of time defined by a mandatory
date and a mandatory time component, expressed in either UTC time
format (YYYY-MM-DDThh:mm:ss.sssZ), local time with UTC offset format
(YYYY-MM-DDThh:mm:ss.sss+/-hh:mm), or local time format
(YYYY-MM-DDThh:mm:ss.sss). These representations are defined in
"XML Schema Part 2: Datatypes Second Edition -
W3C Recommendation 28 October 2004" which is aligned with ISO 8601.

Note on the time format:
1) beginning / end of calendar day
00:00:00 = the beginning of a calendar day
24:00:00 = the end of a calendar day

2) fractions of second in time format
Decimal fractions of seconds may be included. In this case, the
involved parties shall agree on the maximum number of digits that are allowed.
     PoolgAdjstmntDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     InstdAmt - InstructedAmount[0..1]Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency as ordered by the initiating party.
     XchgRate - ExchangeRate[0..1]Factor used to convert an amount from one currency into another. This reflects the price at which one currency was bought with another currency.
     ChrgBr - ChargeBearerType1Code[1..1]Provides further details specific to the individual transaction(s) included in the message.
     ChrgsInf - ChargesInformation[0..1]Provides information on the charges to be paid by the charge bearer(s) related to the payment transaction.
         Amt - Amount[0..1]Transaction charges to be paid by the charge bearer.
         Agt - Agent[0..1]Agent that takes the transaction charges or to which the transaction charges are due.
             FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
         Tp - Type[0..1]Defines the type of charges.
             Cd - Code[0..1]Charge type, in a coded form.
             Prtry - Proprietary[0..1]Type of charge in a proprietary form, as defined by the issuer.
                 Id - Identification[0..1]Name or number assigned by an entity to enable recognition of that entity, for example, account identifier.
                 Issr - Issuer[0..1]Entity that assigns the identification.
     MndtRltdInf - CreditTransferMandateData1[0..0]
     PrvsInstgAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     UltmtDbtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
     InitgPty - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
     Dbtr - Debtor[1..1]Party that owes an amount of money to the (ultimate) creditor.
         Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
         PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
             AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                 Cd - Code[0..1]Type of address expressed as a code.
                 Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                     Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                     Issr - Issuer[0..1]Entity that assigns the identification.
                     SchmeNm - SchemeName[0..1]Short textual description of the scheme.
             CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
             Dept - Max70Text[0..1]Name of a department within an organization.
             SubDept - Max70Text[0..1]Name of a sub-department within a department.
             StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
             BldgNb - Max16Text[0..1]Number that identifies a building on the street.
             BldgNm - Max140Text[0..1]Name of the building, if applicable.
             Flr - Max70Text[0..1]Floor number or identifier within a building.
             UnitNb - Max16Text[0..1]Unit or apartment number within a building.
             PstBx - Max16Text[0..1]Post office box number.
             Room - Max70Text[0..1]Room number or identifier within a building.
             PstCd - Max16Text[0..1]Postal code or ZIP code.
             TwnNm - Max140Text[0..1]Name of the town or city.
             TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
             DstrctNm - Max140Text[0..1]Name of the district or region.
             CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
             Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
             AdrLine - Max70Text[0..1]Free-form text line for the address.
         Id - Identification[1..1]Unique and unambiguous identification of a party.
             OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                 AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                 LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                 Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                 DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                     BirthDt - BirthDate[0..1]Date on which a person was born.
                     PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                     CityOfBirth - CityOfBirth[0..1]City where a person was born.
                     CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                 Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
         CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
         CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
             NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
             MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
             FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
             URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
             EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
             EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
             JobTitl - JobTitle[0..1]Title of the function.
             Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
             Dept - Department[0..1]Identification of a division of a large organisation or building.
             Othr - OtherContact[0..1]Contact details in another form.
                 ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                 Id - Identifier[0..1]Communication value such as phone number or email address.
             PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
     DbtrAcct - DebtorAccount[0..1]Unambiguous identification of the account of the debtor to which a debit entry will be made as a result of the transaction.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     DbtrAgt - DebtorAgent[1..1]Financial institution servicing an account for the debtor.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     DbtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     CdtrAgt - CreditorAgent[1..1]Financial institution servicing an account for the creditor.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     CdtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     Cdtr - Creditor[1..1]Party to which an amount of money is due.
         Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
         PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
             AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                 Cd - Code[0..1]Type of address expressed as a code.
                 Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                     Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                     Issr - Issuer[0..1]Entity that assigns the identification.
                     SchmeNm - SchemeName[0..1]Short textual description of the scheme.
             CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
             Dept - Max70Text[0..1]Name of a department within an organization.
             SubDept - Max70Text[0..1]Name of a sub-department within a department.
             StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
             BldgNb - Max16Text[0..1]Number that identifies a building on the street.
             BldgNm - Max140Text[0..1]Name of the building, if applicable.
             Flr - Max70Text[0..1]Floor number or identifier within a building.
             UnitNb - Max16Text[0..1]Unit or apartment number within a building.
             PstBx - Max16Text[0..1]Post office box number.
             Room - Max70Text[0..1]Room number or identifier within a building.
             PstCd - Max16Text[0..1]Postal code or ZIP code.
             TwnNm - Max140Text[0..1]Name of the town or city.
             TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
             DstrctNm - Max140Text[0..1]Name of the district or region.
             CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
             Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
             AdrLine - Max70Text[0..1]Free-form text line for the address.
         Id - Identification[1..1]Unique and unambiguous identification of a party.
             OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                 AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                 LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                 Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                 DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                     BirthDt - BirthDate[0..1]Date on which a person was born.
                     PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                     CityOfBirth - CityOfBirth[0..1]City where a person was born.
                     CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                 Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
         CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
         CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
             NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
             MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
             FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
             URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
             EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
             EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
             JobTitl - JobTitle[0..1]Title of the function.
             Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
             Dept - Department[0..1]Identification of a division of a large organisation or building.
             Othr - OtherContact[0..1]Contact details in another form.
                 ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                 Id - Identifier[0..1]Communication value such as phone number or email address.
             PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
     CdtrAcct - CreditorAccount[0..1]Unambiguous identification of the account of the creditor to which a credit entry will be posted as a result of the payment transaction.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     UltmtCdtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
     InstrForCdtrAgt - InstructionForCreditorAgent[0..1]Set of elements used to provide information on the remittance advice.
         Cd - Code[0..1]Coded information related to the processing of the payment instruction, provided by the initiating party, and intended for the creditor's agent.
         InstrInf - InstructionInformation[0..1]Further information complementing the coded instruction or instruction to the creditor's agent that is bilaterally agreed or specific to a user community.
     InstrForNxtAgt - InstructionForNextAgent[0..1]Set of elements used to provide information on the remittance advice.
         Cd - Code[0..1]Coded information related to the processing of the payment instruction, provided by the initiating party, and intended for the next agent in the payment chain.
         InstrInf - InstructionInformation[0..1]Further information complementing the coded instruction or instruction to the next agent that is bilaterally agreed or specific to a user community.
     Purp - Purpose[1..1]Underlying reason for the payment transaction.
         Cd - Code[1..1]
Underlying reason for the payment transaction, as published in an external purpose code list.
         Prtry - Proprietary[1..1]
Purpose, in a proprietary form.
     RgltryRptg - RegulatoryReporting[0..1]Information needed due to regulatory and statutory requirements.
         DbtCdtRptgInd - DebitCreditReportingIndicator[0..1]Identifies whether the regulatory reporting information applies to the debit side, to the credit side or to both debit and credit sides of the transaction.
         Authrty - Authority[0..1]
Entity requiring the regulatory reporting information.
             Nm - Name[0..1]
Name of the entity requiring the regulatory reporting information.
             Ctry - Country[0..1]
Country of the entity that requires the regulatory reporting information.
         Dtls - Details[0..1]Identifies whether the regulatory reporting information applies to the debit side, to the credit side or to both debit and credit sides of the transaction.
             Tp - Type[0..1]
Specifies the type of the information supplied in the regulatory reporting details.
             Dt - Date[0..1]
Date related to the specified type of regulatory reporting details.
             Ctry - Country[0..1]
Country related to the specified type of regulatory reporting details.
             Cd - Code[0..1]Specifies the nature, purpose, and reason for the transaction to be reported for regulatory and statutory requirements in a coded form.
             Amt - Amount[0..1]
Amount of money to be reported for regulatory and statutory requirements.
             Inf - Information[0..1]
Additional details that cater for specific domestic regulatory requirements.
     Tax - Tax[0..1]Provides details on the tax.
         Cdtr - Creditor[0..1]
Party on the credit side of the transaction to which the tax applies.
             TaxId - TaxIdentification[0..1]
Tax identification number of the creditor.
             RegnId - RegistrationIdentification[0..1]
Unique identification, as assigned by an organisation, to unambiguously identify a party.
             TaxTp - TaxType[0..1]
Type of tax payer.
         Dbtr - Debtor[0..1]
Party on the debit side of the transaction to which the tax applies.
             TaxId - TaxIdentification[0..1]
Tax identification number of the debtor.
             RegnId - RegistrationIdentification[0..1]
Unique identification, as assigned by an organisation, to unambiguously identify a party.
             TaxTp - TaxType[0..1]
Type of tax payer.
             Authstn - Authorisation[0..1]
Details of the authorised tax paying party.
                 Titl - Title[0..1]
Title or position of debtor or the debtor's authorised representative.
                 Nm - Name[0..1]
Name of the debtor or the debtor's authorised representative.
         UltmtDbtr - UltimateDebtor[0..1]
Ultimate party that owes an amount of money to the (ultimate) creditor, in this case, to the taxing authority.
             TaxId - TaxIdentification[0..1]
Tax identification number of the debtor.
             RegnId - RegistrationIdentification[0..1]
Unique identification, as assigned by an organisation, to unambiguously identify a party.
             TaxTp - TaxType[0..1]
Type of tax payer.
             Authstn - Authorisation[0..1]
Details of the authorised tax paying party.
                 Titl - Title[0..1]
Title or position of debtor or the debtor's authorised representative.
                 Nm - Name[0..1]
Name of the debtor or the debtor's authorised representative.
         AdmstnZone - AdministrationZone[0..1]
Territorial part of a country to which the tax payment is related.
         RefNb - ReferenceNumber[0..1]
Tax reference information that is specific to a taxing agency.
         Mtd - Method[0..1]
Method used to indicate the underlying business or how the tax is paid.
         TtlTaxblBaseAmt - TotalTaxableBaseAmount[0..1]
Total amount of money on which the tax is based.
         TtlTaxAmt - TotalTaxAmount[0..1]
Total amount of money as result of the calculation of the tax.
         Dt - Date[0..1]
Date by which tax is due.
         SeqNb - SequenceNumber[0..1]
Sequential number of the tax report.
         Rcrd - Record[0..1]
Details of the tax record.
             Tp - Type[0..1]
High level code to identify the type of tax details.
             Ctgy - Category[0..1]
Specifies the tax code as published by the tax authority.
             CtgyDtls - CategoryDetails[0..1]
Provides further details of the category tax code.
             DbtrSts - DebtorStatus[0..1]
Code provided by local authority to identify the status of the party that has drawn up the settlement document.
             CertId - CertificateIdentification[0..1]
Identification number of the tax report as assigned by the taxing authority.
             FrmsCd - FormsCode[0..1]
Identifies, in a coded form, on which template the tax report is to be provided.
             Prd - Period[0..1]
Set of elements used to provide details on the period of time related to the tax payment.
                 Yr - Year[0..1]
Year related to the tax payment.
                 Tp - Type[0..1]
Identification of the period related to the tax payment.
                 FrToDt - FromToDate[0..1]
Range of time between a start date and an end date for which the tax report is provided.
                     FrDt - FromDate[0..1]Start date of the range.
                     ToDt - ToDate[0..1]End date of the range.
             TaxAmt - TaxAmount[0..1]
Set of elements used to provide information on the amount of the tax record.
                 Rate - Rate[0..1]
Rate used to calculate the tax.
                 TaxblBaseAmt - TaxableBaseAmount[0..1]
Amount of money on which the tax is based.
                 TtlAmt - TotalAmount[0..1]
Total amount that is the result of the calculation of the tax for the record.
                 Dtls - Details[0..1]
Set of elements used to provide details on the tax period and amount.
                     Prd - Period[0..1]
Set of elements used to provide details on the period of time related to the tax payment.
                         Yr - Year[0..1]
Year related to the tax payment.
                         Tp - Type[0..1]
Identification of the period related to the tax payment.
                         FrToDt - FromToDate[0..1]
Range of time between a start date and an end date for which the tax report is provided.
                             FrDt - FromDate[0..1]Start date of the range.
                             ToDt - ToDate[0..1]End date of the range.
                     Amt - Amount[0..1]
Underlying tax amount related to the specified period.
             AddtlInf - AdditionalInformation[0..1]
Further details of the tax record.
     RltdRmtInf - RemittanceLocation8[0..0]
     RmtInf - RemittanceInformation22[0..0]
     SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/quotes_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/quotes_PUT.md new file mode 100644 index 000000000..41c8b4b6d --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/quotes_PUT.md @@ -0,0 +1,638 @@ +--- +sidebarTitle: "PUT /quotes/{ID}" +--- + +## 7.8 PUT /quotes/{ID} +|Financial Institution to Financial Institution Customer Credit Transfer Quote Response - **pacs.082.001.01**| +|--| + +#### Contexte +*(DFSP -> DFSP)* + +This is triggered as a callback response to the POST /quotes call. The message is generated by the payee DFSP and is a message response that includes the transfer terms. The payee DFSP is expected to respond with this message if a terms requested are favorable and the payee DFSP would like to participate in the transaction. + +The transfer amounts is specified in the `CdtTrfTxInf.IntrBkSttlmAmt.ActiveCurrencyAndAmount` and the `CdtTrfTxInf.IntrBkSttlmAmt.Ccy` fields. These are clearing amounts and must have fees already included in their calculation. + +The `GrpHdr.PmtInstrXpryDtTm` specifies the expiry of the terms presented. It is the responsibility of the payee DFSP to enforce this expiry in the transfer phase of a transaction. + +The `CdtTrfTxInf.PmtId.TxId` must reference the message that this is a response to and is the same as what is included in the path as `{ID}`. + +The `CdtTrfTxInf.VrfctnOfTerms.IlpV4PrepPacket` must contain the ILPv4 cryptographically signed packet, which is a cryptographic version of the transfers terms. These are the terms against with the payer DFSP agrees, and against which the non-repudiation of the transfer is base. It is thus important that the payer DFSP inspects these terms. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId": "01JBVM19SPQAQV9EEP0QC1RNAD", + "CreDtTm": "2024-11-04T12:57:42.455Z", + "NbOfTxs": "1", + "SttlmInf": { "SttlmMtd": "CLRG" }, + "PmtInstrXpryDtTm": "2024-11-04T12:58:42.450Z" +}, +"CdtTrfTxInf": { + "PmtId": { "TxId": "01JBVM19DFKNRWC21FGJNTHRAT" }, + "Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16135551001"}}}, + "Name": "Payer Joe" }, + "DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp"}}}, + "Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16665551002"}}}, + "CdtrAgt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"}}}, + "ChrgBr": "CRED", + "IntrBkSttlmAmt": { + "Ccy": "MWK", + "ActiveCurrencyAndAmount": "1080" }, + "InstdAmt": { + "Ccy": "MWK", + "ActiveOrHistoricCurrencyAndAmount": "1080" }, + "ChrgsInf": { + "Amt": { "Ccy": "MWK", + "ActiveOrHistoricCurrencyAndAmount": "0" }, + "Agt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"}}}}, + "VrfctnOfTerms": { "IlpV4PrepPacket": "DIICzQAAAA..." }}} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - Group Header[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - Message Identification[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
     CreDtTm - ISODateTime[1..1]Creation Date and Time
     BtchBookg - BatchBookingIndicator[0..0]
     NbOfTxs - Max15NumericText[1..1]Number of Transactions
     CtrlSum - DecimalNumber[0..0]
     TtlIntrBkSttlmAmt - ActiveCurrencyAndAmount[0..0]A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmInf - Settlement Information[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
         SttlmMtd - SettlementMethod1Code[1..1]Only the CLRG: Clearing option is supported.
Specifies the details on how the settlement of the original transaction(s) between the
instructing agent and the instructed agent was completed.
         SttlmAcct - CashAccount40[0..0]Provides the details to identify an account.
         ClrSys - ClearingSystemIdentification3Choice[0..0]
         InstgRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstgRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         InstdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         ThrdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         ThrdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     PmtTpInf - PaymentTypeInformation28[0..0]Provides further details of the type of payment.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
CdtTrfTxInf - CreditTransferTransaction64[1..1]Credit Transfer Transaction Information
Set of elements providing information specific to the individual credit transfer(s).
     PmtId - PaymentIdentification[1..1]Set of elements used to reference a payment instruction.
         InstrId - Max35Text[0..1]InstructionIdentification (FSPIOP equivalent: transactionRequestId)

Definition: Unique identification, as assigned by an instructing party for an instructed party, to
unambiguously identify the instruction.

Usage: The instruction identification is a point to point reference that can be used between the
instructing party and the instructed party to refer to the individual instruction. It can be included in
several messages related to the instruction.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         EndToEndId - Max35Text[0..1]EndToEndIdentification (FSPIOP equivalent: transactionId)

Definition: Unique identification, as assigned by the initiating party, to unambiguously identify the
transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain.

Usage: The end-to-end identification can be used for reconciliation or to link tasks relating to the
transaction. It can be included in several messages related to the transaction.

Usage: In case there are technical limitations to pass on multiple references, the end-to-end
identification must be passed on throughout the entire end-to-end chain.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         TxId - Max35Text[1..1]TransactionIdentification (FSPIOP equivalent: quoteId in quote request, transferId in transfer request)

Definition: Unique identification, as assigned by the first instructing agent, to unambiguously identify the
transaction that is passed on, unchanged, throughout the entire interbank chain.

Usage: The transaction identification can be used for reconciliation, tracking or to link tasks relating to
the transaction on the interbank level.

Usage: The instructing agent has to make sure that the transaction identification is unique for a preagreed period.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         UETR - UETR[0..1]Universally unique identifier to provide an end-to-end reference of a payment transaction.
         ClrSysRef - ClearingSystemReference[0..1]Unique reference, as assigned by a clearing system, to unambiguously identify the instruction.
     PmtTpInf - PaymentTypeInformation[0..1]Set of elements used to further specify the type of transaction.
         InstrPrty - Priority2Code[0..1]Indicator of the urgency or order of importance that the instructing party
would like the instructed party to apply to the processing of the instruction.

HIGH: High priority
NORM: Normal priority
         ClrChanl - ClearingChannel2Code[0..1]Specifies the clearing channel for the routing of the transaction, as part of
the payment type identification.

RTGS: RealTimeGrossSettlementSystem Clearing channel is a real-time gross settlement system.
RTNS: RealTimeNetSettlementSystem Clearing channel is a real-time net settlement system.
MPNS: MassPaymentNetSystem Clearing channel is a mass payment net settlement system.
BOOK: BookTransfer Payment through internal book transfer.
         SvcLvl - ServiceLevel[0..1]Agreement under which or rules under which the transaction should be processed.
             Cd - Code[0..1]Specifies a pre-agreed service or level of service between the parties, as published in an external service level code list.
             Prtry - Proprietary[0..1]Specifies a pre-agreed service or level of service between the parties, as a proprietary code.
         LclInstrm - LocalInstrument[0..1]Definition: User community specific instrument.
Usage: This element is used to specify a local instrument, local clearing option and/or further qualify the service or service level.
             Cd - Code[0..1]Specifies the local instrument, as published in an external local instrument code list.
             Prtry - Proprietary[0..1]Specifies the local instrument, as a proprietary code.
         CtgyPurp - CategoryPurpose[0..1]Specifies the high level purpose of the instruction based on a set of pre-defined categories.
             Cd - Code[0..1]Category purpose, as published in an external category purpose code list.
             Prtry - Proprietary[0..1]Category purpose, in a proprietary form.
     IntrBkSttlmAmt - InterbankSettlementAmount[1..1]Amount of money moved between the instructing agent and the instructed agent.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmPrty - Priority3Code[0..0]
     SttlmTmIndctn - SettlementDateTimeIndication1[0..0]
     SttlmTmReq - SettlementTimeRequest2[0..0]
     AccptncDtTm - ISODateTime[0..0]A particular point in the progression of time defined by a mandatory
date and a mandatory time component, expressed in either UTC time
format (YYYY-MM-DDThh:mm:ss.sssZ), local time with UTC offset format
(YYYY-MM-DDThh:mm:ss.sss+/-hh:mm), or local time format
(YYYY-MM-DDThh:mm:ss.sss). These representations are defined in
"XML Schema Part 2: Datatypes Second Edition -
W3C Recommendation 28 October 2004" which is aligned with ISO 8601.

Note on the time format:
1) beginning / end of calendar day
00:00:00 = the beginning of a calendar day
24:00:00 = the end of a calendar day

2) fractions of second in time format
Decimal fractions of seconds may be included. In this case, the
involved parties shall agree on the maximum number of digits that are allowed.
     PoolgAdjstmntDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     InstdAmt - InstructedAmount[0..1]Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency as ordered by the initiating party.
     XchgRate - ExchangeRate[0..1]Factor used to convert an amount from one currency into another. This reflects the price at which one currency was bought with another currency.
     ChrgBr - ChargeBearerType1Code[1..1]Provides further details specific to the individual transaction(s) included in the message.
     ChrgsInf - ChargesInformation[0..1]Provides information on the charges to be paid by the charge bearer(s) related to the payment transaction.
         Amt - Amount[0..1]Transaction charges to be paid by the charge bearer.
         Agt - Agent[0..1]Agent that takes the transaction charges or to which the transaction charges are due.
             FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
         Tp - Type[0..1]Defines the type of charges.
             Cd - Code[0..1]Charge type, in a coded form.
             Prtry - Proprietary[0..1]Type of charge in a proprietary form, as defined by the issuer.
                 Id - Identification[0..1]Name or number assigned by an entity to enable recognition of that entity, for example, account identifier.
                 Issr - Issuer[0..1]Entity that assigns the identification.
     MndtRltdInf - CreditTransferMandateData1[0..0]
     PrvsInstgAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     UltmtDbtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
     InitgPty - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
     Dbtr - Debtor[1..1]Party that owes an amount of money to the (ultimate) creditor.
         Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
         PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
             AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                 Cd - Code[0..1]Type of address expressed as a code.
                 Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                     Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                     Issr - Issuer[0..1]Entity that assigns the identification.
                     SchmeNm - SchemeName[0..1]Short textual description of the scheme.
             CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
             Dept - Max70Text[0..1]Name of a department within an organization.
             SubDept - Max70Text[0..1]Name of a sub-department within a department.
             StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
             BldgNb - Max16Text[0..1]Number that identifies a building on the street.
             BldgNm - Max140Text[0..1]Name of the building, if applicable.
             Flr - Max70Text[0..1]Floor number or identifier within a building.
             UnitNb - Max16Text[0..1]Unit or apartment number within a building.
             PstBx - Max16Text[0..1]Post office box number.
             Room - Max70Text[0..1]Room number or identifier within a building.
             PstCd - Max16Text[0..1]Postal code or ZIP code.
             TwnNm - Max140Text[0..1]Name of the town or city.
             TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
             DstrctNm - Max140Text[0..1]Name of the district or region.
             CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
             Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
             AdrLine - Max70Text[0..1]Free-form text line for the address.
         Id - Identification[1..1]Unique and unambiguous identification of a party.
             OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                 AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                 LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                 Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                 DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                     BirthDt - BirthDate[0..1]Date on which a person was born.
                     PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                     CityOfBirth - CityOfBirth[0..1]City where a person was born.
                     CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                 Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
         CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
         CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
             NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
             MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
             FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
             URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
             EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
             EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
             JobTitl - JobTitle[0..1]Title of the function.
             Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
             Dept - Department[0..1]Identification of a division of a large organisation or building.
             Othr - OtherContact[0..1]Contact details in another form.
                 ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                 Id - Identifier[0..1]Communication value such as phone number or email address.
             PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
     DbtrAcct - DebtorAccount[0..1]Unambiguous identification of the account of the debtor to which a debit entry will be made as a result of the transaction.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     DbtrAgt - DebtorAgent[1..1]Financial institution servicing an account for the debtor.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     DbtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     CdtrAgt - CreditorAgent[1..1]Financial institution servicing an account for the creditor.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     CdtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     Cdtr - Creditor[1..1]Party to which an amount of money is due.
         Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
         PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
             AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                 Cd - Code[0..1]Type of address expressed as a code.
                 Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                     Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                     Issr - Issuer[0..1]Entity that assigns the identification.
                     SchmeNm - SchemeName[0..1]Short textual description of the scheme.
             CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
             Dept - Max70Text[0..1]Name of a department within an organization.
             SubDept - Max70Text[0..1]Name of a sub-department within a department.
             StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
             BldgNb - Max16Text[0..1]Number that identifies a building on the street.
             BldgNm - Max140Text[0..1]Name of the building, if applicable.
             Flr - Max70Text[0..1]Floor number or identifier within a building.
             UnitNb - Max16Text[0..1]Unit or apartment number within a building.
             PstBx - Max16Text[0..1]Post office box number.
             Room - Max70Text[0..1]Room number or identifier within a building.
             PstCd - Max16Text[0..1]Postal code or ZIP code.
             TwnNm - Max140Text[0..1]Name of the town or city.
             TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
             DstrctNm - Max140Text[0..1]Name of the district or region.
             CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
             Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
             AdrLine - Max70Text[0..1]Free-form text line for the address.
         Id - Identification[1..1]Unique and unambiguous identification of a party.
             OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                 AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                 LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                 Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                 DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                     BirthDt - BirthDate[0..1]Date on which a person was born.
                     PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                     CityOfBirth - CityOfBirth[0..1]City where a person was born.
                     CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                 Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
         CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
         CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
             NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
             MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
             FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
             URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
             EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
             EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
             JobTitl - JobTitle[0..1]Title of the function.
             Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
             Dept - Department[0..1]Identification of a division of a large organisation or building.
             Othr - OtherContact[0..1]Contact details in another form.
                 ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                 Id - Identifier[0..1]Communication value such as phone number or email address.
             PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
     CdtrAcct - CreditorAccount[0..1]Unambiguous identification of the account of the creditor to which a credit entry will be posted as a result of the payment transaction.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     UltmtCdtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
     InstrForCdtrAgt - InstructionForCreditorAgent[0..1]Set of elements used to provide information on the remittance advice.
         Cd - Code[0..1]Coded information related to the processing of the payment instruction, provided by the initiating party, and intended for the creditor's agent.
         InstrInf - InstructionInformation[0..1]Further information complementing the coded instruction or instruction to the creditor's agent that is bilaterally agreed or specific to a user community.
     InstrForNxtAgt - InstructionForNextAgent[0..1]Set of elements used to provide information on the remittance advice.
         Cd - Code[0..1]Coded information related to the processing of the payment instruction, provided by the initiating party, and intended for the next agent in the payment chain.
         InstrInf - InstructionInformation[0..1]Further information complementing the coded instruction or instruction to the next agent that is bilaterally agreed or specific to a user community.
     Purp - Purpose[0..1]Underlying reason for the payment transaction.
         Cd - Code[0..1]
Underlying reason for the payment transaction, as published in an external purpose code list.
         Prtry - Proprietary[0..1]
Purpose, in a proprietary form.
     RgltryRptg - RegulatoryReporting[0..1]Information needed due to regulatory and statutory requirements.
         DbtCdtRptgInd - DebitCreditReportingIndicator[0..1]Identifies whether the regulatory reporting information applies to the debit side, to the credit side or to both debit and credit sides of the transaction.
         Authrty - Authority[0..1]
Entity requiring the regulatory reporting information.
             Nm - Name[0..1]
Name of the entity requiring the regulatory reporting information.
             Ctry - Country[0..1]
Country of the entity that requires the regulatory reporting information.
         Dtls - Details[0..1]Identifies whether the regulatory reporting information applies to the debit side, to the credit side or to both debit and credit sides of the transaction.
             Tp - Type[0..1]
Specifies the type of the information supplied in the regulatory reporting details.
             Dt - Date[0..1]
Date related to the specified type of regulatory reporting details.
             Ctry - Country[0..1]
Country related to the specified type of regulatory reporting details.
             Cd - Code[0..1]Specifies the nature, purpose, and reason for the transaction to be reported for regulatory and statutory requirements in a coded form.
             Amt - Amount[0..1]
Amount of money to be reported for regulatory and statutory requirements.
             Inf - Information[0..1]
Additional details that cater for specific domestic regulatory requirements.
     Tax - Tax[0..1]Provides details on the tax.
         Cdtr - Creditor[0..1]
Party on the credit side of the transaction to which the tax applies.
             TaxId - TaxIdentification[0..1]
Tax identification number of the creditor.
             RegnId - RegistrationIdentification[0..1]
Unique identification, as assigned by an organisation, to unambiguously identify a party.
             TaxTp - TaxType[0..1]
Type of tax payer.
         Dbtr - Debtor[0..1]
Party on the debit side of the transaction to which the tax applies.
             TaxId - TaxIdentification[0..1]
Tax identification number of the debtor.
             RegnId - RegistrationIdentification[0..1]
Unique identification, as assigned by an organisation, to unambiguously identify a party.
             TaxTp - TaxType[0..1]
Type of tax payer.
             Authstn - Authorisation[0..1]
Details of the authorised tax paying party.
                 Titl - Title[0..1]
Title or position of debtor or the debtor's authorised representative.
                 Nm - Name[0..1]
Name of the debtor or the debtor's authorised representative.
         UltmtDbtr - UltimateDebtor[0..1]
Ultimate party that owes an amount of money to the (ultimate) creditor, in this case, to the taxing authority.
             TaxId - TaxIdentification[0..1]
Tax identification number of the debtor.
             RegnId - RegistrationIdentification[0..1]
Unique identification, as assigned by an organisation, to unambiguously identify a party.
             TaxTp - TaxType[0..1]
Type of tax payer.
             Authstn - Authorisation[0..1]
Details of the authorised tax paying party.
                 Titl - Title[0..1]
Title or position of debtor or the debtor's authorised representative.
                 Nm - Name[0..1]
Name of the debtor or the debtor's authorised representative.
         AdmstnZone - AdministrationZone[0..1]
Territorial part of a country to which the tax payment is related.
         RefNb - ReferenceNumber[0..1]
Tax reference information that is specific to a taxing agency.
         Mtd - Method[0..1]
Method used to indicate the underlying business or how the tax is paid.
         TtlTaxblBaseAmt - TotalTaxableBaseAmount[0..1]
Total amount of money on which the tax is based.
         TtlTaxAmt - TotalTaxAmount[0..1]
Total amount of money as result of the calculation of the tax.
         Dt - Date[0..1]
Date by which tax is due.
         SeqNb - SequenceNumber[0..1]
Sequential number of the tax report.
         Rcrd - Record[0..1]
Details of the tax record.
             Tp - Type[0..1]
High level code to identify the type of tax details.
             Ctgy - Category[0..1]
Specifies the tax code as published by the tax authority.
             CtgyDtls - CategoryDetails[0..1]
Provides further details of the category tax code.
             DbtrSts - DebtorStatus[0..1]
Code provided by local authority to identify the status of the party that has drawn up the settlement document.
             CertId - CertificateIdentification[0..1]
Identification number of the tax report as assigned by the taxing authority.
             FrmsCd - FormsCode[0..1]
Identifies, in a coded form, on which template the tax report is to be provided.
             Prd - Period[0..1]
Set of elements used to provide details on the period of time related to the tax payment.
                 Yr - Year[0..1]
Year related to the tax payment.
                 Tp - Type[0..1]
Identification of the period related to the tax payment.
                 FrToDt - FromToDate[0..1]
Range of time between a start date and an end date for which the tax report is provided.
                     FrDt - FromDate[0..1]Start date of the range.
                     ToDt - ToDate[0..1]End date of the range.
             TaxAmt - TaxAmount[0..1]
Set of elements used to provide information on the amount of the tax record.
                 Rate - Rate[0..1]
Rate used to calculate the tax.
                 TaxblBaseAmt - TaxableBaseAmount[0..1]
Amount of money on which the tax is based.
                 TtlAmt - TotalAmount[0..1]
Total amount that is the result of the calculation of the tax for the record.
                 Dtls - Details[0..1]
Set of elements used to provide details on the tax period and amount.
                     Prd - Period[0..1]
Set of elements used to provide details on the period of time related to the tax payment.
                         Yr - Year[0..1]
Year related to the tax payment.
                         Tp - Type[0..1]
Identification of the period related to the tax payment.
                         FrToDt - FromToDate[0..1]
Range of time between a start date and an end date for which the tax report is provided.
                             FrDt - FromDate[0..1]Start date of the range.
                             ToDt - ToDate[0..1]End date of the range.
                     Amt - Amount[0..1]
Underlying tax amount related to the specified period.
             AddtlInf - AdditionalInformation[0..1]
Further details of the tax record.
     RltdRmtInf - RemittanceLocation8[0..0]
     RmtInf - RemittanceInformation22[0..0]
     SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/quotes_error_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/quotes_error_PUT.md new file mode 100644 index 000000000..add76b144 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/quotes_error_PUT.md @@ -0,0 +1,184 @@ +--- +sidebarTitle: "PUT /quotes/{ID}/error" +--- + + +## 7.9 PUT /quotes/{ID}/error +| Financial Institution to Financial Institution Payment Status Report - **pacs.002.001.15**| +|--| + +#### Contexte +*(DFSP -> DFSP, HUB -> DFSP)* + +This is triggered as a callback response to the POST /quotes call when an error occurs. The message is generated by the entity who first encounter the error which can either be the DFSP, or the HUB. All other participants involved are informed by this message. The `TxInfAndSts.StsRsnInf.Rsn.Cd` contains the Mojaloop error code, which specified the source and cause of the error. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} +} +``` + +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader120[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - MessageIdentification[1..1]Definition: Point to point reference, as assigned by the instructing party, and sent to the next party in the chain to unambiguously identify the message.
Usage: The instructing party has to make sure that MessageIdentification is unique per instructed party for a pre-agreed period.
     CreDtTm - CreationDateTime[1..1]Date and time at which the message was created.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlBizQry - OriginalBusinessQuery1[0..0]
OrgnlGrpInfAndSts - OriginalGroupHeader22[0..0]
TxInfAndSts - PaymentTransaction161[1..1]Information concerning the original transactions, to which the status report message refers.
     StsId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to unambiguously identify the status report.
     OrgnlGrpInf - OriginalGroupInformation29[0..0]
     OrgnlInstrId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original instruction.

(FSPIOP equivalent: transactionRequestId)
     OrgnlEndToEndId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original end-to-end transaction.

(FSPIOP equivalent: transactionId)
     OrgnlTxId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original transaction.

(FSPIOP equivalent: quoteId)
     OrgnlUETR - UUIDv4Identifier[0..1]Unique end-to-end transaction reference, as assigned by the original sending party, to unambiguously identify the original transaction.
     TxSts - ExternalPaymentTransactionStatus1Code[0..1]Specifies the status of the transaction.
     StsRsnInf - StatusReasonInformation14[1..1]Information concerning the reason for the status.
         Orgtr - Originator[0..1]Party that issues the status.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[0..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[0..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[0..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         Rsn - Reason[1..1]Specifies the reason for the status report.
             Cd - Code[1..1]Reason for the status, as published in an external reason code list.
             Prtry - Proprietary[1..1]Reason for the status, in a proprietary form.
         AddtlInf - AdditionalInformation[0..1]Additional information about the status report.
     ChrgsInf - Charges16[0..0]NOTE: Unsure on description.

Seemingly a generic schema for charges, with an amount, agent, and type.
     AccptncDtTm - ISODateTime[0..1]Date and time at which the status was accepted.
     PrcgDt - DateAndDateTime2Choice[0..1]Date/time at which the instruction was processed by the specified party.
         Dt - Date[0..1]Specified date.
         DtTm - DateTime[0..1]Specified date and time.
     FctvIntrBkSttlmDt - DateAndDateTime2Choice[0..0]Specifies the reason for the status.
     AcctSvcrRef - Max35Text[0..1]Unique reference, as assigned by the account servicing institution, to unambiguously identify the status report.
     ClrSysRef - Max35Text[0..1]Reference that is assigned by the account servicing institution and sent to the account owner to unambiguously identify the transaction.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlTxRef - OriginalTransactionReference42[0..0]
     SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
         PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
         Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/transfers_PATCH.md b/docs/fr/product/features/Iso20022/v1.0/script/transfers_PATCH.md new file mode 100644 index 000000000..2cf7ac636 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/transfers_PATCH.md @@ -0,0 +1,184 @@ +--- +sidebarTitle: "PATCH /transfers/{ID}" +--- + +## 7.17 PATCH /transfers/{ID} +| Financial Institution to Financial Institution Payment Status Report - **pacs.002.001.15**| +|--| + +#### Contexte +*(HUB -> DFSP)* + +This message use by the HUB to inform a payee DFSP participant of the successful conclusion of a transfer. This message is only generated if the payee DFSP response with a Reserved status when providing the fulfillment in the `PUT \transfers` message. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{ + "PrcgDt":{"DtTm":"2024-11-04T12:57:45.213Z"}, + "TxSts":"COMM"} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader120[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - MessageIdentification[1..1]Definition: Point to point reference, as assigned by the instructing party, and sent to the next party in the chain to unambiguously identify the message.
Usage: The instructing party has to make sure that MessageIdentification is unique per instructed party for a pre-agreed period.
     CreDtTm - CreationDateTime[1..1]Date and time at which the message was created.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlBizQry - OriginalBusinessQuery1[0..0]
OrgnlGrpInfAndSts - OriginalGroupHeader22[0..0]
TxInfAndSts - PaymentTransaction161[1..1]Information concerning the original transactions, to which the status report message refers.
     StsId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to unambiguously identify the status report.
     OrgnlGrpInf - OriginalGroupInformation29[0..0]
     OrgnlInstrId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original instruction.

(FSPIOP equivalent: transactionRequestId)
     OrgnlEndToEndId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original end-to-end transaction.

(FSPIOP equivalent: transactionId)
     OrgnlTxId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original transaction.

(FSPIOP equivalent: quoteId)
     OrgnlUETR - UUIDv4Identifier[0..1]Unique end-to-end transaction reference, as assigned by the original sending party, to unambiguously identify the original transaction.
     TxSts - ExternalPaymentTransactionStatus1Code[1..1]Specifies the status of the transaction.
     StsRsnInf - StatusReasonInformation14[0..1]Information concerning the reason for the status.
         Orgtr - Originator[0..1]Party that issues the status.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[0..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[0..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[0..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         Rsn - Reason[0..1]Specifies the reason for the status report.
             Cd - Code[0..1]Reason for the status, as published in an external reason code list.
             Prtry - Proprietary[0..1]Reason for the status, in a proprietary form.
         AddtlInf - AdditionalInformation[0..1]Additional information about the status report.
     ChrgsInf - Charges16[0..0]NOTE: Unsure on description.

Seemingly a generic schema for charges, with an amount, agent, and type.
     AccptncDtTm - ISODateTime[0..1]Date and time at which the status was accepted.
     PrcgDt - DateAndDateTime2Choice[1..1]Date/time at which the instruction was processed by the specified party.
         Dt - Date[1..1]Specified date.
         DtTm - DateTime[1..1]Specified date and time.
     FctvIntrBkSttlmDt - DateAndDateTime2Choice[0..0]Specifies the reason for the status.
     AcctSvcrRef - Max35Text[0..1]Unique reference, as assigned by the account servicing institution, to unambiguously identify the status report.
     ClrSysRef - Max35Text[0..1]Reference that is assigned by the account servicing institution and sent to the account owner to unambiguously identify the transaction.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlTxRef - OriginalTransactionReference42[0..0]
     SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
         PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
         Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/transfers_POST.md b/docs/fr/product/features/Iso20022/v1.0/script/transfers_POST.md new file mode 100644 index 000000000..d5a4ed459 --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/transfers_POST.md @@ -0,0 +1,627 @@ +--- +sidebarTitle: POST /transfers +--- + +## 7.14 POST /transfers +| Financial Institution to Financial Institution Customer Credit Transfer - **pacs.008.001.13**| +|--| + +#### Contexte +*(DFSP -> DFSP)* + +This message is initiated by a payer DFSP who is requesting to transfer funds. The message is sent to the payee DFSP who provided the transfer terms in the `PUT /quotes` message. This message is an acknowledgement that the terms of the transfer are accepted, and is thus an instruction to proceed with the transfer. + +The transfer amount which is the clearing amount that the payee DFSP receives is defined in the `CdtTrfTxInf.IntrBkSttlmAmt.Ccy` and `CdtTrfTxInf.IntrBkSttlmAmt.ActiveCurrencyAndAmount` fields. If this transfer includes currency conversion, then this amount an currency must correspond with the target amount and currency. + +This message can be seen as an agreement to the terms that have previously been set up and established in the `PUT \quotes` message. The `CdtTrfTxInf.VrfctnOfTerms.IlpV4PrepPacket` field is the ILP packet containing the terms that have been agreed to. + +The `GrpHdr.PmtInstrXpryDtTm` specifies the expiry of the this transfer message. It is the responsibility of the HUB to enforce this expiry. The status of which a DFSP can query by making a `GET /transfers/{ID}` request. + +Voici un exemple de message : +```json +{ +"GrpHdr":{ + "MsgId":"01JBVM1D2MR6D4WBWWYY3ZHGMM", + "CreDtTm":"2024-11-04T12:57:45.812Z", + "NbOfTxs":"1", + "SttlmInf":{"SttlmMtd":"CLRG"}, + "PmtInstrXpryDtTm":"2024-11-04T12:58:45.810Z"}, +"CdtTrfTxInf":{ + "PmtId":{"TxId":"01JBVM13SQYP507JB1DYBZVCMF"}, + "ChrgBr":"CRED", + "Cdtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"}, + "Id":"16665551002"}}}}, + "Dbtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"}, + "Id":"16135551001"}}}, + "Name":"Joe Blogs"}, + "CdtrAgt":{"FinInstnId":{"Othr":{"Id":"payee-dfsp"}}}, + "DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}}, + "IntrBkSttlmAmt":{"Ccy":"MWK", + "ActiveCurrencyAndAmount":"1080"}, + "VrfctnOfTerms":{"IlpV4PrepPacket":"DIICzQAAAAAAAaX..."}} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - Group Header[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - Message Identification[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
     CreDtTm - ISODateTime[1..1]Creation Date and Time
     BtchBookg - BatchBookingIndicator[0..0]
     NbOfTxs - Max15NumericText[1..1]Number of Transactions
     CtrlSum - DecimalNumber[0..0]
     TtlIntrBkSttlmAmt - ActiveCurrencyAndAmount[0..0]A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmInf - Settlement Information[1..1]Group Header Set of characteristics shared by all individual transactions included in the message.
         SttlmMtd - SettlementMethod1Code[1..1]Only the CLRG: Clearing option is supported.
Specifies the details on how the settlement of the original transaction(s) between the
instructing agent and the instructed agent was completed.
         SttlmAcct - CashAccount40[0..0]Provides the details to identify an account.
         ClrSys - ClearingSystemIdentification3Choice[0..0]
         InstgRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstgRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         InstdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         InstdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
         ThrdRmbrsmntAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
         ThrdRmbrsmntAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     PmtTpInf - PaymentTypeInformation28[0..0]Provides further details of the type of payment.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
CdtTrfTxInf - CreditTransferTransaction64[1..1]Credit Transfer Transaction Information
Set of elements providing information specific to the individual credit transfer(s).
     PmtId - PaymentIdentification[1..1]Set of elements used to reference a payment instruction.
         InstrId - Max35Text[0..1]InstructionIdentification (FSPIOP equivalent: transactionRequestId)

Definition: Unique identification, as assigned by an instructing party for an instructed party, to
unambiguously identify the instruction.

Usage: The instruction identification is a point to point reference that can be used between the
instructing party and the instructed party to refer to the individual instruction. It can be included in
several messages related to the instruction.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         EndToEndId - Max35Text[0..1]EndToEndIdentification (FSPIOP equivalent: transactionId)

Definition: Unique identification, as assigned by the initiating party, to unambiguously identify the
transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain.

Usage: The end-to-end identification can be used for reconciliation or to link tasks relating to the
transaction. It can be included in several messages related to the transaction.

Usage: In case there are technical limitations to pass on multiple references, the end-to-end
identification must be passed on throughout the entire end-to-end chain.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         TxId - Max35Text[1..1]TransactionIdentification (FSPIOP equivalent: quoteId in quote request, transferId in transfer request)

Definition: Unique identification, as assigned by the first instructing agent, to unambiguously identify the
transaction that is passed on, unchanged, throughout the entire interbank chain.

Usage: The transaction identification can be used for reconciliation, tracking or to link tasks relating to
the transaction on the interbank level.

Usage: The instructing agent has to make sure that the transaction identification is unique for a preagreed period.

This field has been changed from the original ISO20022 `Max35Text`` schema to a ULIDIdentifier schema.
         UETR - UETR[0..1]Universally unique identifier to provide an end-to-end reference of a payment transaction.
         ClrSysRef - ClearingSystemReference[0..1]Unique reference, as assigned by a clearing system, to unambiguously identify the instruction.
     PmtTpInf - PaymentTypeInformation[0..1]Set of elements used to further specify the type of transaction.
         InstrPrty - Priority2Code[0..1]Indicator of the urgency or order of importance that the instructing party
would like the instructed party to apply to the processing of the instruction.

HIGH: High priority
NORM: Normal priority
         ClrChanl - ClearingChannel2Code[0..1]Specifies the clearing channel for the routing of the transaction, as part of
the payment type identification.

RTGS: RealTimeGrossSettlementSystem Clearing channel is a real-time gross settlement system.
RTNS: RealTimeNetSettlementSystem Clearing channel is a real-time net settlement system.
MPNS: MassPaymentNetSystem Clearing channel is a mass payment net settlement system.
BOOK: BookTransfer Payment through internal book transfer.
         SvcLvl - ServiceLevel[0..1]Agreement under which or rules under which the transaction should be processed.
             Cd - Code[0..1]Specifies a pre-agreed service or level of service between the parties, as published in an external service level code list.
             Prtry - Proprietary[0..1]Specifies a pre-agreed service or level of service between the parties, as a proprietary code.
         LclInstrm - LocalInstrument[0..1]Definition: User community specific instrument.
Usage: This element is used to specify a local instrument, local clearing option and/or further qualify the service or service level.
             Cd - Code[0..1]Specifies the local instrument, as published in an external local instrument code list.
             Prtry - Proprietary[0..1]Specifies the local instrument, as a proprietary code.
         CtgyPurp - CategoryPurpose[0..1]Specifies the high level purpose of the instruction based on a set of pre-defined categories.
             Cd - Code[0..1]Category purpose, as published in an external category purpose code list.
             Prtry - Proprietary[0..1]Category purpose, in a proprietary form.
     IntrBkSttlmAmt - InterbankSettlementAmount[1..1]Amount of money moved between the instructing agent and the instructed agent.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmPrty - Priority3Code[0..0]
     SttlmTmIndctn - SettlementDateTimeIndication1[0..0]
     SttlmTmReq - SettlementTimeRequest2[0..0]
     AccptncDtTm - ISODateTime[0..0]A particular point in the progression of time defined by a mandatory
date and a mandatory time component, expressed in either UTC time
format (YYYY-MM-DDThh:mm:ss.sssZ), local time with UTC offset format
(YYYY-MM-DDThh:mm:ss.sss+/-hh:mm), or local time format
(YYYY-MM-DDThh:mm:ss.sss). These representations are defined in
"XML Schema Part 2: Datatypes Second Edition -
W3C Recommendation 28 October 2004" which is aligned with ISO 8601.

Note on the time format:
1) beginning / end of calendar day
00:00:00 = the beginning of a calendar day
24:00:00 = the end of a calendar day

2) fractions of second in time format
Decimal fractions of seconds may be included. In this case, the
involved parties shall agree on the maximum number of digits that are allowed.
     PoolgAdjstmntDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     InstdAmt - InstructedAmount[0..1]Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency as ordered by the initiating party.
     XchgRate - ExchangeRate[0..1]Factor used to convert an amount from one currency into another. This reflects the price at which one currency was bought with another currency.
     ChrgBr - ChargeBearerType1Code[1..1]Provides further details specific to the individual transaction(s) included in the message.
     ChrgsInf - ChargesInformation[0..1]Provides information on the charges to be paid by the charge bearer(s) related to the payment transaction.
         Amt - Amount[0..1]Transaction charges to be paid by the charge bearer.
         Agt - Agent[0..1]Agent that takes the transaction charges or to which the transaction charges are due.
             FinInstnId - FinancialInstitutionIdentification[0..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
                 BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
                 ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                     ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                         Cd - Code[0..1]Clearing system identification code, as published in an external list.
                         Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                     MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
                 LEI - LEI[0..1]Legal entity identifier of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
                 Othr - Other[0..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
                 Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
                 LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
                 Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
                 PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                     AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                         Cd - Code[0..1]Type of address expressed as a code.
                         Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                             Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                             Issr - Issuer[0..1]Entity that assigns the identification.
                             SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                     CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                     Dept - Max70Text[0..1]Name of a department within an organization.
                     SubDept - Max70Text[0..1]Name of a sub-department within a department.
                     StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                     BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                     BldgNm - Max140Text[0..1]Name of the building, if applicable.
                     Flr - Max70Text[0..1]Floor number or identifier within a building.
                     UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                     PstBx - Max16Text[0..1]Post office box number.
                     Room - Max70Text[0..1]Room number or identifier within a building.
                     PstCd - Max16Text[0..1]Postal code or ZIP code.
                     TwnNm - Max140Text[0..1]Name of the town or city.
                     TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                     DstrctNm - Max140Text[0..1]Name of the district or region.
                     CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                     Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                     AdrLine - Max70Text[0..1]Free-form text line for the address.
         Tp - Type[0..1]Defines the type of charges.
             Cd - Code[0..1]Charge type, in a coded form.
             Prtry - Proprietary[0..1]Type of charge in a proprietary form, as defined by the issuer.
                 Id - Identification[0..1]Name or number assigned by an entity to enable recognition of that entity, for example, account identifier.
                 Issr - Issuer[0..1]Entity that assigns the identification.
     MndtRltdInf - CreditTransferMandateData1[0..0]
     PrvsInstgAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     PrvsInstgAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     PrvsInstgAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt1Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt2 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt2Acct - CashAccount40[0..0]Provides the details to identify an account.
     IntrmyAgt3 - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     IntrmyAgt3Acct - CashAccount40[0..0]Provides the details to identify an account.
     UltmtDbtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
     InitgPty - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
     Dbtr - Debtor[1..1]Party that owes an amount of money to the (ultimate) creditor.
         Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
         PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
             AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                 Cd - Code[0..1]Type of address expressed as a code.
                 Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                     Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                     Issr - Issuer[0..1]Entity that assigns the identification.
                     SchmeNm - SchemeName[0..1]Short textual description of the scheme.
             CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
             Dept - Max70Text[0..1]Name of a department within an organization.
             SubDept - Max70Text[0..1]Name of a sub-department within a department.
             StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
             BldgNb - Max16Text[0..1]Number that identifies a building on the street.
             BldgNm - Max140Text[0..1]Name of the building, if applicable.
             Flr - Max70Text[0..1]Floor number or identifier within a building.
             UnitNb - Max16Text[0..1]Unit or apartment number within a building.
             PstBx - Max16Text[0..1]Post office box number.
             Room - Max70Text[0..1]Room number or identifier within a building.
             PstCd - Max16Text[0..1]Postal code or ZIP code.
             TwnNm - Max140Text[0..1]Name of the town or city.
             TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
             DstrctNm - Max140Text[0..1]Name of the district or region.
             CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
             Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
             AdrLine - Max70Text[0..1]Free-form text line for the address.
         Id - Identification[1..1]Unique and unambiguous identification of a party.
             OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                 AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                 LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                 Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                 DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                     BirthDt - BirthDate[0..1]Date on which a person was born.
                     PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                     CityOfBirth - CityOfBirth[0..1]City where a person was born.
                     CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                 Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
         CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
         CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
             NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
             MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
             FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
             URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
             EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
             EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
             JobTitl - JobTitle[0..1]Title of the function.
             Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
             Dept - Department[0..1]Identification of a division of a large organisation or building.
             Othr - OtherContact[0..1]Contact details in another form.
                 ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                 Id - Identifier[0..1]Communication value such as phone number or email address.
             PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
     DbtrAcct - DebtorAccount[0..1]Unambiguous identification of the account of the debtor to which a debit entry will be made as a result of the transaction.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     DbtrAgt - DebtorAgent[1..1]Financial institution servicing an account for the debtor.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     DbtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     CdtrAgt - CreditorAgent[1..1]Financial institution servicing an account for the creditor.
         FinInstnId - FinancialInstitutionIdentification[1..1]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
             BICFI - BICFI[0..1]Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362 "Banking - Banking telecommunication messages - Business identifier code (BIC)"
             ClrSysMmbId - ClearingSystemMemberIdentification[0..1]Information used to identify a member within a clearing system
                 ClrSysId - ClearingSystemIdentification[0..1]Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed.
                     Cd - Code[0..1]Clearing system identification code, as published in an external list.
                     Prtry - Proprietary[0..1]Proprietary identification of the clearing system.
                 MmbId - MemberIdentification[0..1]Identification of a member of a clearing system.
             LEI - LEI[0..1]Legal entity identifier of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..0]Specifies a character string with a maximum length of 140 characters.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..0]Specifies a character string with a maximum length of 16 characters.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Othr - Other[1..1]Unique identification of an agent, as assigned by an institution, using an identification scheme.
                 Id - Identification[1..1]Unique and unambiguous identification of a person.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         BrnchId - BranchIdentification[0..1]Identifies a specific branch of a financial institution.
             Id - Identification[0..1]Unique and unambiguous identification of a branch of a financial institution.
             LEI - LEI[0..1]Legal entity identification for the branch of the financial institution.
             Nm - Name[0..1]Name by which an agent is known and which is usually used to identify that agent.
             PstlAdr - PostalAddress[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
     CdtrAgtAcct - CashAccount40[0..0]Provides the details to identify an account.
     Cdtr - Creditor[1..1]Party to which an amount of money is due.
         Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
         PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
             AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                 Cd - Code[0..1]Type of address expressed as a code.
                 Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                     Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                     Issr - Issuer[0..1]Entity that assigns the identification.
                     SchmeNm - SchemeName[0..1]Short textual description of the scheme.
             CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
             Dept - Max70Text[0..1]Name of a department within an organization.
             SubDept - Max70Text[0..1]Name of a sub-department within a department.
             StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
             BldgNb - Max16Text[0..1]Number that identifies a building on the street.
             BldgNm - Max140Text[0..1]Name of the building, if applicable.
             Flr - Max70Text[0..1]Floor number or identifier within a building.
             UnitNb - Max16Text[0..1]Unit or apartment number within a building.
             PstBx - Max16Text[0..1]Post office box number.
             Room - Max70Text[0..1]Room number or identifier within a building.
             PstCd - Max16Text[0..1]Postal code or ZIP code.
             TwnNm - Max140Text[0..1]Name of the town or city.
             TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
             DstrctNm - Max140Text[0..1]Name of the district or region.
             CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
             Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
             AdrLine - Max70Text[0..1]Free-form text line for the address.
         Id - Identification[1..1]Unique and unambiguous identification of a party.
             OrgId - Organisation[1..1]Unique and unambiguous way to identify an organisation.
                 AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                 LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                 Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Identification assigned by an institution.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
             PrvtId - Person[1..1]Unique and unambiguous identification of a person, for example a passport.
                 DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                     BirthDt - BirthDate[0..1]Date on which a person was born.
                     PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                     CityOfBirth - CityOfBirth[0..1]City where a person was born.
                     CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                 Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                     Id - Identification[0..1]Unique and unambiguous identification of a person.
                     SchmeNm - SchemeName[0..1]Name of the identification scheme.
                         Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                         Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                     Issr - Issuer[0..1]Entity that assigns the identification.
         CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
         CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
             NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
             MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
             FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
             URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
             EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
             EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
             JobTitl - JobTitle[0..1]Title of the function.
             Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
             Dept - Department[0..1]Identification of a division of a large organisation or building.
             Othr - OtherContact[0..1]Contact details in another form.
                 ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                 Id - Identifier[0..1]Communication value such as phone number or email address.
             PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
     CdtrAcct - CreditorAccount[0..1]Unambiguous identification of the account of the creditor to which a credit entry will be posted as a result of the payment transaction.
         Id - Identification[0..1]Unique and unambiguous identification for the account between the account owner and the account servicer.
             IBAN - IBAN[0..1]International Bank Account Number (IBAN) - identifier used internationally by financial institutions to uniquely identify the account of a customer. Further specifications of the format and content of the IBAN can be found in the standard ISO 13616 "Banking and related financial services - International Bank Account Number (IBAN)" version 1997-10-01, or later revisions.
             Othr - Other[0..1]Unique identification of an account, as assigned by the account servicer, using an identification scheme.
                 Id - Identification[0..1]Identification assigned by an institution.
                 SchmeNm - SchemeName[0..1]Name of the identification scheme.
                     Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                     Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                 Issr - Issuer[0..1]Entity that assigns the identification.
         Tp - Type[0..1]Specifies the nature, or use of the account.
             Cd - Code[0..1]Account type, in a coded form.
             Prtry - Proprietary[0..1]Nature or use of the account in a proprietary form.
         Ccy - Currency[0..1]Identification of the currency in which the account is held.
Usage: Currency should only be used in case one and the same account number covers several currencies and the initiating party needs to identify which currency needs to be used for settlement on the account.
         Nm - Name[0..1]Name of the account, as assigned by the account servicing institution, in agreement with the account owner in order to provide an additional means of identification of the account.
Usage: The account name is different from the account owner name. The account name is used in certain user communities to provide a means of identifying the account, in addition to the account owner's identity and the account number.
         Prxy - Proxy[0..1]Specifies an alternate assumed name for the identification of the account.
             Tp - Type[0..1]Type of the proxy identification.
                 Cd - Code[0..1]Proxy account type, in a coded form as published in an external list.
                 Prtry - Proprietary[0..1]Proxy account type, in a proprietary form.
             Id - Identification[0..1]Identification used to indicate the account identification under another specified name.
     UltmtCdtr - PartyIdentification272[0..0]Specifies the identification of a person or an organisation.
     InstrForCdtrAgt - InstructionForCreditorAgent[0..1]Set of elements used to provide information on the remittance advice.
         Cd - Code[0..1]Coded information related to the processing of the payment instruction, provided by the initiating party, and intended for the creditor's agent.
         InstrInf - InstructionInformation[0..1]Further information complementing the coded instruction or instruction to the creditor's agent that is bilaterally agreed or specific to a user community.
     InstrForNxtAgt - InstructionForNextAgent[0..1]Set of elements used to provide information on the remittance advice.
         Cd - Code[0..1]Coded information related to the processing of the payment instruction, provided by the initiating party, and intended for the next agent in the payment chain.
         InstrInf - InstructionInformation[0..1]Further information complementing the coded instruction or instruction to the next agent that is bilaterally agreed or specific to a user community.
     Purp - Purpose[0..1]Underlying reason for the payment transaction.
         Cd - Code[0..1]
Underlying reason for the payment transaction, as published in an external purpose code list.
         Prtry - Proprietary[0..1]
Purpose, in a proprietary form.
     RgltryRptg - RegulatoryReporting[0..1]Information needed due to regulatory and statutory requirements.
         DbtCdtRptgInd - DebitCreditReportingIndicator[0..1]Identifies whether the regulatory reporting information applies to the debit side, to the credit side or to both debit and credit sides of the transaction.
         Authrty - Authority[0..1]
Entity requiring the regulatory reporting information.
             Nm - Name[0..1]
Name of the entity requiring the regulatory reporting information.
             Ctry - Country[0..1]
Country of the entity that requires the regulatory reporting information.
         Dtls - Details[0..1]Identifies whether the regulatory reporting information applies to the debit side, to the credit side or to both debit and credit sides of the transaction.
             Tp - Type[0..1]
Specifies the type of the information supplied in the regulatory reporting details.
             Dt - Date[0..1]
Date related to the specified type of regulatory reporting details.
             Ctry - Country[0..1]
Country related to the specified type of regulatory reporting details.
             Cd - Code[0..1]Specifies the nature, purpose, and reason for the transaction to be reported for regulatory and statutory requirements in a coded form.
             Amt - Amount[0..1]
Amount of money to be reported for regulatory and statutory requirements.
             Inf - Information[0..1]
Additional details that cater for specific domestic regulatory requirements.
     Tax - Tax[0..1]Provides details on the tax.
         Cdtr - Creditor[0..1]
Party on the credit side of the transaction to which the tax applies.
             TaxId - TaxIdentification[0..1]
Tax identification number of the creditor.
             RegnId - RegistrationIdentification[0..1]
Unique identification, as assigned by an organisation, to unambiguously identify a party.
             TaxTp - TaxType[0..1]
Type of tax payer.
         Dbtr - Debtor[0..1]
Party on the debit side of the transaction to which the tax applies.
             TaxId - TaxIdentification[0..1]
Tax identification number of the debtor.
             RegnId - RegistrationIdentification[0..1]
Unique identification, as assigned by an organisation, to unambiguously identify a party.
             TaxTp - TaxType[0..1]
Type of tax payer.
             Authstn - Authorisation[0..1]
Details of the authorised tax paying party.
                 Titl - Title[0..1]
Title or position of debtor or the debtor's authorised representative.
                 Nm - Name[0..1]
Name of the debtor or the debtor's authorised representative.
         UltmtDbtr - UltimateDebtor[0..1]
Ultimate party that owes an amount of money to the (ultimate) creditor, in this case, to the taxing authority.
             TaxId - TaxIdentification[0..1]
Tax identification number of the debtor.
             RegnId - RegistrationIdentification[0..1]
Unique identification, as assigned by an organisation, to unambiguously identify a party.
             TaxTp - TaxType[0..1]
Type of tax payer.
             Authstn - Authorisation[0..1]
Details of the authorised tax paying party.
                 Titl - Title[0..1]
Title or position of debtor or the debtor's authorised representative.
                 Nm - Name[0..1]
Name of the debtor or the debtor's authorised representative.
         AdmstnZone - AdministrationZone[0..1]
Territorial part of a country to which the tax payment is related.
         RefNb - ReferenceNumber[0..1]
Tax reference information that is specific to a taxing agency.
         Mtd - Method[0..1]
Method used to indicate the underlying business or how the tax is paid.
         TtlTaxblBaseAmt - TotalTaxableBaseAmount[0..1]
Total amount of money on which the tax is based.
         TtlTaxAmt - TotalTaxAmount[0..1]
Total amount of money as result of the calculation of the tax.
         Dt - Date[0..1]
Date by which tax is due.
         SeqNb - SequenceNumber[0..1]
Sequential number of the tax report.
         Rcrd - Record[0..1]
Details of the tax record.
             Tp - Type[0..1]
High level code to identify the type of tax details.
             Ctgy - Category[0..1]
Specifies the tax code as published by the tax authority.
             CtgyDtls - CategoryDetails[0..1]
Provides further details of the category tax code.
             DbtrSts - DebtorStatus[0..1]
Code provided by local authority to identify the status of the party that has drawn up the settlement document.
             CertId - CertificateIdentification[0..1]
Identification number of the tax report as assigned by the taxing authority.
             FrmsCd - FormsCode[0..1]
Identifies, in a coded form, on which template the tax report is to be provided.
             Prd - Period[0..1]
Set of elements used to provide details on the period of time related to the tax payment.
                 Yr - Year[0..1]
Year related to the tax payment.
                 Tp - Type[0..1]
Identification of the period related to the tax payment.
                 FrToDt - FromToDate[0..1]
Range of time between a start date and an end date for which the tax report is provided.
                     FrDt - FromDate[0..1]Start date of the range.
                     ToDt - ToDate[0..1]End date of the range.
             TaxAmt - TaxAmount[0..1]
Set of elements used to provide information on the amount of the tax record.
                 Rate - Rate[0..1]
Rate used to calculate the tax.
                 TaxblBaseAmt - TaxableBaseAmount[0..1]
Amount of money on which the tax is based.
                 TtlAmt - TotalAmount[0..1]
Total amount that is the result of the calculation of the tax for the record.
                 Dtls - Details[0..1]
Set of elements used to provide details on the tax period and amount.
                     Prd - Period[0..1]
Set of elements used to provide details on the period of time related to the tax payment.
                         Yr - Year[0..1]
Year related to the tax payment.
                         Tp - Type[0..1]
Identification of the period related to the tax payment.
                         FrToDt - FromToDate[0..1]
Range of time between a start date and an end date for which the tax report is provided.
                             FrDt - FromDate[0..1]Start date of the range.
                             ToDt - ToDate[0..1]End date of the range.
                     Amt - Amount[0..1]
Underlying tax amount related to the specified period.
             AddtlInf - AdditionalInformation[0..1]
Further details of the tax record.
     RltdRmtInf - RemittanceLocation8[0..0]
     RmtInf - RemittanceInformation22[0..0]
     SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
SplmtryData - SupplementaryData1[0..0]Additional information that cannot be captured in the structured fields and/or any other specific block.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/transfers_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/transfers_PUT.md new file mode 100644 index 000000000..2544ac10e --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/transfers_PUT.md @@ -0,0 +1,103 @@ +--- +sidebarTitle: "PUT /transfers/{ID}" +--- + +## 7.15 PUT /transfers/{ID} +| Financial Institution to Financial Institution Payment Status Report - **pacs.002.001.15**| +|--| + +#### Contexte +*(DFSP -> DFSP, DFSP -> HUB, HUB -> DFSP)* + +This message is a response to the `POST \transfers` call initiated by the DFSP who is requesting to proceed with the transfer terms presented in the `PUT \quotes`. It is the payee DFSPs responsibility to check that the clearing amounts align with the agreed transfer terms, and if all requirements are met, this message is used to lock-in the agreed terms. Once the hub receives this acceptance message, the transfer can no-longer timeout and will be committed. If this transfer is a dependent transfer in a currency conversion, then that currency conversion will be committed at the same time as this transfer. + +The cryptographic ILP fulfillment provided in the `TxInfAndSts.ExctnConf` field, is released by the payee DFSP as an indication to the HUB that the terms have been met. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{ + "ExctnConf":"ou1887jmG-l...", + "PrcgDt":{ + "DtTm":"2024-11-04T12:57:45.213Z"}, + "TxSts":"RESV"} +} +``` + +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader113[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - MessageIdentification[1..1]Definition: Point to point reference, as assigned by the instructing party, and sent to the next party in the chain to unambiguously identify the message.
Usage: The instructing party has to make sure that MessageIdentification is unique per instructed party for a pre-agreed period.
     CreDtTm - CreationDateTime[1..1]Date and time at which the message was created.
     BtchBookg - BatchBookingIndicator[0..0]
     NbOfTxs - Max15NumericText[0..0]Specifies a numeric string with a maximum length of 15 digits.
     CtrlSum - DecimalNumber[0..0]
     TtlIntrBkSttlmAmt - ActiveCurrencyAndAmount[0..0]A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
     IntrBkSttlmDt - ISODate[0..0]A particular point in the progression of time in a calendar year expressed in the YYYY-MM-DD format. This representation is defined in "XML Schema Part 2: Datatypes Second Edition - W3C Recommendation 28 October 2004" which is aligned with ISO 8601.
     SttlmInf - SettlementInstruction15[0..0]Only the CLRG: Clearing option is supported.
Specifies the details on how the settlement of the original transaction(s) between the
instructing agent and the instructed agent was completed.
     PmtTpInf - PaymentTypeInformation28[0..0]Provides further details of the type of payment.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
CdtTrfTxInf - CreditTransferTransaction64[0..0]
SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
+ diff --git a/docs/fr/product/features/Iso20022/v1.0/script/transfers_error_PUT.md b/docs/fr/product/features/Iso20022/v1.0/script/transfers_error_PUT.md new file mode 100644 index 000000000..8e9d9b87a --- /dev/null +++ b/docs/fr/product/features/Iso20022/v1.0/script/transfers_error_PUT.md @@ -0,0 +1,183 @@ +--- +sidebarTitle: "PUT /transfers/{ID}/error" +--- + +## 7.16 PUT /transfers/{ID}/error + +| Financial Institution to Financial Institution Payment Status Report - **pacs.002.001.15**| +|--| + +#### Contexte +*(DFSP -> DFSP, DFSP -> HUB, HUB -> DFSP)* + +This is triggered as a callback response to the POST /transfers call when an error occurs. The message is generated by the entity who first encounter the error which can either be the DFSP, or the HUB. All other participants involved are informed by this message. The `TxInfAndSts.StsRsnInf.Rsn.Cd` contains the Mojaloop error code, which specified the source and cause of the error. + +Voici un exemple de message : +```json +{ +"GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, +"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} +} +``` +#### Détails du message +La composition et l’utilisation de cette API sont décrites dans les sections suivantes : +1. [Éléments de données principaux](#core-data-elements)
Cette section précise quels champs sont obligatoires, facultatifs ou non pris en charge pour satisfaire les exigences de validation du message. +2. [Détails d’en-tête](../MarketPracticeDocument.md#_3-3-1-header-details)
Cette section générale décrit les exigences d’en-tête pour l’API. +3. [Réponses HTTP prises en charge](../MarketPracticeDocument.md#_3-3-2-supported-http-responses)
Cette section générale décrit les réponses HTTP qui doivent être prises en charge. +4. [Charge utile d’erreur commune](../MarketPracticeDocument.md#_3-3-3-common-error-payload)
Cette section générale décrit la charge utile d’erreur fournie dans la réponse HTTP d’erreur synchrone. + +#### Éléments de données principaux +Voici les éléments de données principaux nécessaires pour satisfaire cette exigence de pratique du marché. + +Les couleurs de fond indiquent la classification de l’élément de données. + + + + + + + +
Clé de type du modèle de données Description
obligatoireCes champs sont obligatoires pour satisfaire les exigences de validation du message.
facultatifCes champs peuvent être inclus facultativement dans le message. (Certains peuvent être obligatoires pour un schéma donné, selon les règles du schéma.)
non pris en chargeCes champs ne sont pas pris en charge. Les fonctionnalités associées à ces données ne sont pas compatibles avec un schéma Mojaloop ; leur fourniture entraînera un échec de validation du message.
+

+ + +Here is the defined core data element table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Champ ISO 20022Modèle de donnéesDescription
GrpHdr - GroupHeader120[1..1]Set of characteristics shared by all individual transactions included in the message.
     MsgId - MessageIdentification[1..1]Definition: Point to point reference, as assigned by the instructing party, and sent to the next party in the chain to unambiguously identify the message.
Usage: The instructing party has to make sure that MessageIdentification is unique per instructed party for a pre-agreed period.
     CreDtTm - CreationDateTime[1..1]Date and time at which the message was created.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlBizQry - OriginalBusinessQuery1[0..0]
OrgnlGrpInfAndSts - OriginalGroupHeader22[0..0]
TxInfAndSts - PaymentTransaction161[1..1]Information concerning the original transactions, to which the status report message refers.
     StsId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to unambiguously identify the status report.
     OrgnlGrpInf - OriginalGroupInformation29[0..0]
     OrgnlInstrId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original instruction.

(FSPIOP equivalent: transactionRequestId)
     OrgnlEndToEndId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original end-to-end transaction.

(FSPIOP equivalent: transactionId)
     OrgnlTxId - Max35Text[0..1]Unique identification, as assigned by the original sending party, to
unambiguously identify the original transaction.

(FSPIOP equivalent: quoteId)
     OrgnlUETR - UUIDv4Identifier[0..1]Unique end-to-end transaction reference, as assigned by the original sending party, to unambiguously identify the original transaction.
     TxSts - ExternalPaymentTransactionStatus1Code[0..1]Specifies the status of the transaction.
     StsRsnInf - StatusReasonInformation14[1..1]Information concerning the reason for the status.
         Orgtr - Originator[0..1]Party that issues the status.
             Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
             PstlAdr - Postal Address[0..1]Information that locates and identifies a specific address, as defined by postal services.
                 AdrTp - AddressType3Choice[0..1]Type of address, as defined by the postal services.
                     Cd - Code[0..1]Type of address expressed as a code.
                     Prtry - Proprietary[0..1]Type of address expressed as a proprietary code.
                         Id - Identification[0..1]Proprietary information, often a code, issued by the data source scheme issuer.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                         SchmeNm - SchemeName[0..1]Short textual description of the scheme.
                 CareOf - Max140Text[0..1]Name of the person or entity the mail is directed to, if different from the recipient.
                 Dept - Max70Text[0..1]Name of a department within an organization.
                 SubDept - Max70Text[0..1]Name of a sub-department within a department.
                 StrtNm - Max140Text[0..1]Name of the street or thoroughfare.
                 BldgNb - Max16Text[0..1]Number that identifies a building on the street.
                 BldgNm - Max140Text[0..1]Name of the building, if applicable.
                 Flr - Max70Text[0..1]Floor number or identifier within a building.
                 UnitNb - Max16Text[0..1]Unit or apartment number within a building.
                 PstBx - Max16Text[0..1]Post office box number.
                 Room - Max70Text[0..1]Room number or identifier within a building.
                 PstCd - Max16Text[0..1]Postal code or ZIP code.
                 TwnNm - Max140Text[0..1]Name of the town or city.
                 TwnLctnNm - Max140Text[0..1]Name of the location within a town or city.
                 DstrctNm - Max140Text[0..1]Name of the district or region.
                 CtrySubDvsn - Max35Text[0..1]Name of the country subdivision, such as a state or province.
                 Ctry - CountryCode[0..1]Country code, as defined by ISO 3166-1 alpha-2.
                 AdrLine - Max70Text[0..1]Free-form text line for the address.
             Id - Identification[0..1]Unique and unambiguous identification of a party.
                 OrgId - Organisation[0..1]Unique and unambiguous way to identify an organisation.
                     AnyBIC - AnyBIC[0..1]Business identification code of the organisation.
                     LEI - LEI[0..1]Legal entity identification as an alternate identification for a party.
                     Othr - Other[0..1]Unique identification of an organisation, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Identification assigned by an institution.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
                 PrvtId - Person[0..1]Unique and unambiguous identification of a person, for example a passport.
                     DtAndPlcOfBirth - DateAndPlaceOfBirth[0..1]Date and place of birth of a person.
                         BirthDt - BirthDate[0..1]Date on which a person was born.
                         PrvcOfBirth - ProvinceOfBirth[0..1]Province where a person was born.
                         CityOfBirth - CityOfBirth[0..1]City where a person was born.
                         CtryOfBirth - CountryOfBirth[0..1]Country where a person was born.
                     Othr - Other[0..1]Unique identification of a person, as assigned by an institution, using an identification scheme.
                         Id - Identification[0..1]Unique and unambiguous identification of a person.
                         SchmeNm - SchemeName[0..1]Name of the identification scheme.
                             Cd - Code[0..1]Name of the identification scheme, in a coded form as published in an external list.
                             Prtry - Proprietary[0..1]Name of the identification scheme, in a free text form.
                         Issr - Issuer[0..1]Entity that assigns the identification.
             CtryOfRes - CountryCode[0..1]Country of Residence
Country in which a person resides (the place of a person's home). In the case of a company, it is the country from which the affairs of that company are directed.
             CtctDtls - Contact Details[0..1]Set of elements used to indicate how to contact the party.
                 NmPrfx - NamePrefix[0..1]Specifies the terms used to formally address a person.
                 Nm - Name[0..1]Name by which a party is known and which is usually used to identify that party.
                 PhneNb - PhoneNumber[0..1]Collection of information that identifies a phone number, as defined by telecom services.
                 MobNb - MobilePhoneNumber[0..1]Collection of information that identifies a mobile phone number, as defined by telecom services.
                 FaxNb - FaxNumber[0..1]Collection of information that identifies a fax number, as defined by telecom services.
                 URLAdr - URLAddress[0..1]Address for the Universal Resource Locator (URL), for example an address used over the www (HTTP) service.
                 EmailAdr - EmailAddress[0..1]Address for electronic mail (e-mail).
                 EmailPurp - EmailPurpose[0..1]Purpose for which an email address may be used.
                 JobTitl - JobTitle[0..1]Title of the function.
                 Rspnsblty - Responsibility[0..1]Role of a person in an organisation.
                 Dept - Department[0..1]Identification of a division of a large organisation or building.
                 Othr - OtherContact[0..1]Contact details in another form.
                     ChanlTp - ChannelType[0..1]Method used to contact the financial institution's contact for the specific tax region.
                     Id - Identifier[0..1]Communication value such as phone number or email address.
                 PrefrdMtd - PreferredContactMethod[0..1]Preferred method used to reach the contact.
         Rsn - Reason[1..1]Specifies the reason for the status report.
             Cd - Code[1..1]Reason for the status, as published in an external reason code list.
             Prtry - Proprietary[1..1]Reason for the status, in a proprietary form.
         AddtlInf - AdditionalInformation[0..1]Additional information about the status report.
     ChrgsInf - Charges16[0..0]NOTE: Unsure on description.

Seemingly a generic schema for charges, with an amount, agent, and type.
     AccptncDtTm - ISODateTime[0..1]Date and time at which the status was accepted.
     PrcgDt - DateAndDateTime2Choice[0..1]Date/time at which the instruction was processed by the specified party.
         Dt - Date[0..1]Specified date.
         DtTm - DateTime[0..1]Specified date and time.
     FctvIntrBkSttlmDt - DateAndDateTime2Choice[0..0]Specifies the reason for the status.
     AcctSvcrRef - Max35Text[0..1]Unique reference, as assigned by the account servicing institution, to unambiguously identify the status report.
     ClrSysRef - Max35Text[0..1]Reference that is assigned by the account servicing institution and sent to the account owner to unambiguously identify the transaction.
     InstgAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     InstdAgt - BranchAndFinancialInstitutionIdentification8[0..0]Unique and unambiguous identification of a financial institution or a branch of a financial institution.
     OrgnlTxRef - OriginalTransactionReference42[0..0]
     SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
         PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
         Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
SplmtryData - SupplementaryData1[0..1]Additional information that cannot be captured in the structured elements and/or any other specific block.
     PlcAndNm - PlaceAndName[0..1]Unambiguous reference to the location where the supplementary data must be inserted in the message instance.
     Envlp - Envelope[0..1]Technical element wrapping the supplementary data.
Technical component that contains the validated supplementary data information. This technical envelope allows to segregate the supplementary data information from any other information.
+ diff --git a/docs/fr/product/features/Production_Readiness_Technical_Assessment.md b/docs/fr/product/features/Production_Readiness_Technical_Assessment.md new file mode 100644 index 000000000..7226f21f9 --- /dev/null +++ b/docs/fr/product/features/Production_Readiness_Technical_Assessment.md @@ -0,0 +1,32 @@ +--- +sidebarTitle: Préparation production +--- + +# Évaluation technique de préparation à la production + +| Catégorie | Description de l’exigence | +| --- | --- | +| Général | Votre instance Mojaloop de production sur cluster Kubernetes compte au moins 3 nœuds *master* et 3 nœuds *worker* répondant aux spécifications minimales suivantes :

- 3 nœuds master/worker : serveur entreprise milieu de gamme, minimum 128 cœurs CPU, 1024 Go RAM, 4 × 500 Go NVMe en RAID miroir, 2 × 10 GbE
- 5 nœuds worker et plus : serveur entreprise milieu de gamme, minimum 64 cœurs CPU, 512 Go RAM, 4 × 500 Go NVMe en RAID miroir, 2 × 10 GbE

Remarques :
- Les nœuds worker peuvent aussi être des masters, ce qui n’est pas recommandé pour la charge de production.
- Les spécifications des nœuds doivent être plus élevées s’il y en a moins. | +| Sécurité | Vous utilisez l’une des méthodes suivantes pour terminer le mTLS entre participants et switch :
- Passerelle applicative du fournisseur cloud
- Pare-feu du fournisseur cloud
- Répartiteur de charge du fournisseur cloud
- Ingress NGINX Kubernetes
- Passerelle API Kubernetes, ex. ISTIO
- Pare-feu matériel entreprise | +| | Vous utilisez une ou plusieurs des méthodes suivantes pour sécuriser les secrets en production :
- Hashicorp Vault dans le cluster
- Coffre de secrets du fournisseur cloud
- Appliance entreprise de stockage sécurisé des secrets | +| | Vous utilisez une ou plusieurs des méthodes suivantes pour exploiter votre autorité de certification pour la génération de paires de clés mTLS et la signature des certificats participants :

- Mojaloop Connection Manager
- Hashicorp Vault dans le cluster
- Plateforme CA entreprise
- Autorité de certification tierce de confiance, ex. DigiCert, GlobalSign, etc. | +| | Vous avez configuré le RBAC sur tous les portails Mojaloop pour limiter l’accès au personnel autorisé. | +| | Vous utilisez une liste d’adresses IP autorisées pour contrôler l’accès aux services Mojaloop.

(par défaut = blocage) | +| | Vous utilisez un pare-feu IP pour contrôler l’accès à votre infrastructure de production. | +| Gestion des utilisateurs | Tous vos participants signent les messages JWS et vérifient les signatures. | +| | Vous appliquez des contrôles de processus et techniques pour tout le personnel accédant à l’infrastructure et aux services applicatifs Mojaloop. | +| Résilience et fiabilité | Vous exécutez au minimum 3 instances saines en permanence des pods suivants :

ml-api-adapter, ml-api-adapter-handler-notification, central-ledger-service, central-ledger-handler-admin, central-ledger-handler-prepare, central-ledger-handler-position, central-ledger-handler-fulfil, central-ledger-handler-get, account-lookup-service, account-lookup-service-admin, moja-quoting-service, moja-centralsettlement-handler-deferred, moja-centralsettlement-handler-gross, moja-centralsettlement-handler-rules, moja-centralsettlement-service, (moja-cl-handler-bulk-transfer-fulfil, moja-cl-handler-bulk-transfer-get, moja-cl-handler-bulk-transfer-prepare, moja-cl-handler-bulk-transfer-processing)

Remarque : les éléments entre parenthèses dépendent de fonctionnalités optionnelles. | +| | Vous avez testé avec succès les mécanismes de récupération des pods Kubernetes pour faire face aux pannes et remplacer rapidement les pods dégradés afin de respecter vos SLA. | +| | Toutes les bases de données Mojaloop tournent en instances répliquées de façon synchrone avec au minimum 3 réplicas sains en permanence. | +| | Tous les pods avec état Mojaloop utilisent l’une des technologies de stockage sous-jacentes suivantes :

- Stockage NVMe sur nœud chiffré, en RAID miroir (voir spécifications des nœuds, section générale)
- Stockage cloud du fournisseur chiffré et répliqué.
- SAN entreprise chiffré et répliqué (non recommandé en production). | +| | Tous les pods de base de données Mojaloop sont planifiés sur des nœuds physiques distincts et y stockent leurs données. | +| | Tous les pods ZooKeeper Kafka sont planifiés sur des nœuds physiques distincts et y stockent leurs données. | +| | Tous les pods courtier Kafka sont planifiés sur des nœuds physiques distincts et y stockent leurs données. | +| | Un processus d’archivage des données est défini pour que les magasins de données de production ne dépassent pas une taille nuisible aux performances ou au risque d’épuisement d’espace libre. | +| | Votre stockage d’archives est chiffré au repos, répliqué et d’un niveau suffisant pour vos exigences métier et réglementaires. | +| Tests | Vous avez exécuté avec succès la suite de tests *golden path* Mojaloop et tous les tests passent. | +| Remarque : cette section est en cours d’extension par le workstream QA Framework | Vous avez exécuté avec succès des suites de tests adjacentes pour des fonctionnalités personnalisées ou complémentaires et tous les tests passent. | +| | Vous avez mené un test de charge réussi démontrant que votre instance de production supporte le trafic normal et de pointe attendu tout en respectant vos SLA. | +| | Vous avez mené un test d’endurance (*soak*) réussi démontrant la stabilité de votre instance sur de longues périodes sans défaillance inattendue ni erreur irrécupérable. | +| | Vous avez mené un test d’intrusion réussi sur votre instance de production et l’infrastructure associée, sans vulnérabilité identifiée. | +| | Vous avez mené des tests de chaos réussis sur votre instance de production et prouvé que la défaillance simultanée de plusieurs composants est tolérée sans états incohérents ou irrécupérables.

Remarque : le nombre et la nature des pannes simultanées tolérées sont en partie subjectifs, mais vous devez pouvoir démontrer qu’un ensemble de pannes « raisonnablement anticipées » est toléré sans rupture de vos SLA définis. | diff --git a/docs/fr/product/features/SimpleInterscheme.svg b/docs/fr/product/features/SimpleInterscheme.svg new file mode 100644 index 000000000..33e945028 --- /dev/null +++ b/docs/fr/product/features/SimpleInterscheme.svg @@ -0,0 +1,4 @@ + + + +
Scheme 1
Scheme 1
Scheme 2
Scheme 2
DFSP 1
DFSP 1
DFSP 2
DFSP 2
Proxy
Proxy
\ No newline at end of file diff --git a/docs/fr/product/features/Test.png b/docs/fr/product/features/Test.png new file mode 100644 index 0000000000000000000000000000000000000000..c68bb2e19dd963b48b9900533e64c2ba3f36ceab GIT binary patch literal 272873 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 ZO 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�LC(KNIil%P@cbQy~~gg39x1 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≺W~9E4}XeBZ~Q{=7SruLk5zsfG7J5(ufU~Q7c?XZhbc8y zu{_&}BMWx;8rp~a@}z&U*y&3({=9OV@A=YR%T8-yHOps60E5{J!N;e$?l~l7Ya7gFz{M|Dc@wL6DR2?EYfhMD9{t()Z1W$ zndH1y1`&{jy~b(LD1sqw*zc^SNx-G3l@u+Ehpyq4cqI!~nbw*?@82qloSAgV`^W(WgjB&E zO(p^HKisfK9ZvCSG6M|X55?H`oO;MPZI2(ve)y=V2~Q-eN2DgAY(K2t@Za=VqV0))7*_k)Bi

HLi$a!$7Eji*48 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%0ANJ~BEvz20`vXpfsS{vDX5)1E3CQyWl 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 literal 0 HcmV?d00001 diff --git a/docs/fr/product/features/XB.svg b/docs/fr/product/features/XB.svg new file mode 100644 index 000000000..ac97cc76a --- /dev/null +++ b/docs/fr/product/features/XB.svg @@ -0,0 +1,4 @@ + + + +
Jurisdiction B
Jurisdiction B
Jurisdiction A
Jurisdiction A
Scheme 1
Scheme 1
Scheme 2
Scheme 2
DFSP 1
DFSP 1
DFSP 2
DFSP 2
Proxy
Proxy
FXP 1
FXP 1
FXP 3
FXP 3
FXP 2
FXP 2
\ No newline at end of file diff --git a/docs/fr/product/features/connectivity.md b/docs/fr/product/features/connectivity.md new file mode 100644 index 000000000..a2c02bd89 --- /dev/null +++ b/docs/fr/product/features/connectivity.md @@ -0,0 +1,50 @@ +--- +sidebarTitle: Raccordement des DFSP +--- + +# Intégration des DFSP + +En principe, la définition et la documentation des [API Mojaloop](./transaction.md#mojaloop-apis) devraient suffire pour permettre aux DFSP de se connecter à un Hub Mojaloop. Toutefois, dans le cadre de la mission de la communauté Mojaloop en faveur de l’inclusion financière, il est depuis longtemps considéré que la clé pour réduire le coût et la complexité du raccordement du système d’information d’un DFSP à un Hub Mojaloop réside dans une offre de solutions de connectivité, permettant à chaque DFSP de choisir l’approche la mieux adaptée. Ces éléments sont complétés par un *DFSP Onboarding Playbook*, qui décrit les processus métier nécessaires à l’intégration d’un DFSP. + +## Intégration métier + +De nombreuses étapes de l’intégration d’un DFSP à un Hub Mojaloop ne relèvent pas de la technologie ; elles sont traitées dans le DFSP Onboarding Playbook. + +Ce playbook, offert par Thitsaworks, rassemble des outils et modèles pour aider à planifier et exécuter un déploiement Mojaloop, en se concentrant sur l’intégration des DFSP. Les éléments proposés sont : +- un modèle de plan de travail, avec des exemples issus de déploiements passés ; +- un cas de test de bout en bout, ici pour l’intégration côté bénéficiaire ; +- un formulaire d’évaluation technique, pour définir l’assistance technique dont les DFSP candidats ont besoin ; +- une liste de contrôle d’intégration technique ; +- un modèle de cartographie des API, pour relier les éléments d’API du Hub Mojaloop aux actions correspondantes du système d’information du DFSP ; +- un plan de mise en place de la sécurité de la connexion du DFSP au Hub Mojaloop. + +Vous pouvez [télécharger le DFSP Onboarding Playbook de Thitsaworks via ce lien](https://github.com/mojaloop/product-council/tree/main/Documentation/DFSP%20Playbook). + +## Intégration technique + +L’offre actuelle de connectivité comprend l’Integration Toolkit (ITK), qui permet à un intégrateur système (SI) de créer une connexion en assemblant les composants du toolkit de la manière la plus adaptée aux besoins du DFSP. Ces éléments incluent notamment : + - Mojaloop Connection Manager (MCM) ; + - Mojaloop Connector (pour l’intégration au Hub Mojaloop) ; + - un ensemble d’exemples de Core Connectors (pour le lien avec le système d’information du DFSP) ; + - de la documentation, dont des guides pratiques et des modèles. + +Pour les DFSP de grande taille, la communauté Mojaloop propose Payment Manager en alternative à l’ITK. Également appelé Payment Manager for Mojaloop (PM4ML), il offre l’ensemble des fonctionnalités et de la flexibilité qu’une grande banque peut exiger. + +Les différents outils de connectivité pour intégrer un DFSP à un Hub Mojaloop sont détaillés dans les [mini-guides](./connectivity/participation_tools_mini_guides.md) ; le choix de solution selon le type de participant et les exigences est présenté dans la [matrice des fonctionnalités par participant](./connectivity/participant-matrix.md). + +Tous les DFSP doivent avoir à l’esprit que les bénéfices d’une solution de paiement instantané inclusive comme Mojaloop reposent sur une démarche « écosystème complet » : il faut étendre la portée du service Mojaloop dans le périmètre des DFSP, leur offrant ainsi à eux et à leurs clients la garantie de finalité des transactions, des coûts plus bas et une exécution fiable de chaque transaction valide. + +Notez que le mode de déploiement de l’ITK influe sur le type de service qu’un DFSP peut offrir à ses clients, comme le soulignent les [mini-guides](./connectivity/participation_tools_mini_guides.md). Les options les plus exigeantes en ressources conviennent aux DFSP à fort débit et à fortes exigences de disponibilité ; une option modérée limite débit et disponibilité et peut mieux convenir aux DFSP moyens ou petits ; l’option la plus sobre impose des limites strictes sur le débit et la disponibilité et supprime la possibilité d’initier des paiements de masse, et ne convient donc qu’aux petits DFSP. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.4|17 décembre 2025| Paul Makin |Ajout du lien vers les mini-guides ; précisions sur le rôle de l’ITK| +|1.3|6 novembre 2025| Paul Makin|Lien vers le DFSP Onboarding Playbook de Thitsaworks| +|1.2|9 juin 2025| Tony Williams|Référence à la matrice des fonctionnalités par participant| +|1.1|14 avril 2025| Paul Makin|Mises à jour liées à la sortie de la V17| +|1.0|5 février 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/connectivity/images/ITK_architecture.png b/docs/fr/product/features/connectivity/images/ITK_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..fdc1aa0e690d87d05f098accedf7aebcd35b018d GIT binary patch literal 225147 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 K=d#Wzp$Pz7_Jb1u literal 0 HcmV?d00001 diff --git a/docs/fr/product/features/connectivity/images/PM4ML_system_architecture.png b/docs/fr/product/features/connectivity/images/PM4ML_system_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..568cb6cdfdb5c3d20a04d7c798e3fa6fafb44ec8 GIT binary patch literal 48899 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 z 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 cRkiVCM*hOqeO<`=1o#sbl>Au2|H +.participant-matrix { + border-collapse: collapse; + width: 100%; + margin: 20px 0; + font-size: 12px; + + th, td { + border: 1px solid #ddd; + padding: 8px; + text-align: left; + vertical-align: top; + position: relative; + } + + th { + background-color: #f8f9fa; + font-weight: bold; + font-size: 13px; + } + + .category-header { + background-color: #e9ecef; + font-weight: bold; + text-align: center; + } + + td.small { + background-color: rgba(46, 204, 113, 0.2); + } + + td.low-medium { + background-color: rgba(243, 156, 18, 0.2); + } + + td.high-medium { + background-color: rgba(230, 126, 34, 0.2); + } + + td.large { + background-color: rgba(231, 76, 60, 0.2); + } + + .participant-type { + font-weight: bold; + min-width: 120px; + } +} + + +## DFSP et cas d’usage paiement + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Catégorie de participantDescriptionCas d’usage attendusExigences d’infrastructure pour l’intégration MojaloopSLA de production attenduRéglementation probablement pertinenteExigences de sécurité particulièresOptions de solution
Petit DFSP en auto-hébergement- Petite institution financière à agence unique.
- Postes de travail propres
- Cloud et/ou SaaS minimaux.
- Tous les types de transfert Mojaloop sauf masse.
- Open banking (y compris PISP, AISP)
- Mini-PC dédié bon marché bas de gamme (p. ex. RPi)
- Connexion Internet haut débit petite entreprise unique
- Système bancaire cœur auto-hébergé p. ex. Mifos
- Pare-feu OS/logiciel sur le même nœud matériel que la couche d’intégration.
- Une certaine indisponibilité acceptable en cas de panne matérielle.
- Certains schémas peuvent exclure les DFSP qui ne respectent pas un SLA d’indisponibilité donné.
- L’achat de matériel de remplacement en cas de panne totale peut prendre plusieurs jours/semaines.
- Jeu complet de fonctions de sécurité Mojaloop : mTLS, JWS, ILP
- ~10 TPS de pic soutenu pendant 1 heure.
- Capacité max. 864000 sur 24 heures.
- Tenue des registres ?
- Sécurité ?
- Pas besoin d’intégration avec les plateformes de sécurité d’entreprise existantes.
- Solution entièrement sécurisée « prête à l’emploi » suivant les bonnes pratiques du secteur pour les services exposés à Internet, y compris pare-feu.
Le « Standard Service Manager » est recommandé : solution minimale basée sur l’Integration Toolkit (accessible localement via un outil BI). Elle peut être hébergée sur un serveur de base, d’un serveur milieu de gamme pour une grande IMF ou une petite banque jusqu’à un Raspberry Pi pour les plus petits DFSP avec des exigences de continuité de service moins strictes et des volumes de transaction plus faibles. Le Standard Service Manager ne prend pas en charge les paiements de masse.
- Couche d’intégration basée sur Docker Compose.
- Couche d’intégration minimale autonome.
DFSP faible-moyen en auto-hébergement- Petite institution financière à une ou deux agences.
- Propre « centre de données », c.-à-d. placard à balais avec quelques serveurs, routeur, pare-feu, etc.
- Quelques connaissances cloud et/ou usage SaaS.
- Tous les types de transfert Mojaloop
- Masse (milliers de transferts).
- Open banking (y compris PISP, AISP)
- Nœud matériel serveur de qualité entreprise unique.
- Pare-feu OS/logiciel sur le même nœud matériel que la couche d’intégration OU pare-feu matériel dédié.
- Une certaine indisponibilité acceptable en cas de panne matérielle.
- Certains schémas peuvent exclure les DFSP qui ne respectent pas un SLA d’indisponibilité donné.
- Le remplacement du matériel en cas de panne totale peut prendre des heures.
- Jeu complet de fonctions de sécurité Mojaloop : mTLS, JWS, ILP
- ~50 TPS de pic soutenu pendant 1 heure.
- Tenue des registres ?
- Sécurité ?
- Peut nécessiter une intégration avec les plateformes de sécurité d’entreprise existantes, p. ex. pare-feu, passerelles, etc.
?? à préciser
Le « Enhanced Service Manager » est recommandé : il étend le « Standard Service Manager » décrit précédemment en ajoutant un déploiement Kafka et la prise en charge des paiements de masse. Il peut être hébergé au minimum sur un serveur de base dans le « centre de données » du DFSP.
- Couche d’intégration basée sur Docker Compose ou Docker Swarm.
- Couche d’intégration minimale autonome.
DFSP moyen-élevé en auto-hébergement- Petite institution financière à une ou deux agences.
- Propre « centre de données », c.-à-d. placard à balais avec quelques serveurs, routeur, pare-feu, etc.
- Quelques connaissances cloud et/ou usage SaaS.
- Tous les types de transfert Mojaloop
- Masse (milliers de transferts).
- Open banking (y compris PISP, AISP)
- Pour tolérer la panne d’un nœud matériel, 3 nœuds matériels ou plus sont requis (2n+1).- Indisponibilité limitée (minutes) acceptable en cas de panne matérielle.
- Certains schémas peuvent exclure les DFSP qui ne respectent pas un SLA d’indisponibilité donné.
- Matériel de rechange disponible ou services de remplacement très rapides en cas de panne.
- Jeu complet de fonctions de sécurité Mojaloop : mTLS, JWS, ILP
- ~50 TPS de pic soutenu pendant 1 heure.
- Tenue des registres ?
- Sécurité ?
- Peut nécessiter une intégration avec les plateformes de sécurité d’entreprise existantes, p. ex. pare-feu, passerelles, etc.Le « Enhanced Service Manager » est recommandé : il étend le « Standard Service Manager » décrit précédemment en ajoutant un déploiement Kafka et la prise en charge des paiements de masse. Il peut être hébergé au minimum dans une configuration multi-serveurs redondante du « centre de données » du DFSP.
- Couche d’intégration basée sur Kubernetes
- Peut disposer déjà d’une technologie d’intégration.
Grand DFSP en auto-hébergement- Institution financière mature multi-agences avec forte capacité informatique interne
- Dispose de son propre centre de données et d’experts pour gérer les systèmes
- À l’aise avec le cloud et les applications hybrides
- Dispose d’une capacité d’ingénierie logicielle interne.
- Tous les types de transfert Mojaloop y compris masse.
- Masse (millions de transferts dans une transaction par paquets de 1000, triés par DFSP bénéficiaire).
- Open banking (y compris PISP, AISP)
- Haute disponibilité de l’infrastructure interne nécessaire
- Plusieurs instances actives de tous les services d’intégration critiques réparties sur plusieurs nœuds matériels.
- Stockage de données répliqué haute disponibilité.
- peut être multi-site / zone de disponibilité / région.
- Aucune indisponibilité acceptable
- Haute disponibilité de la connectivité.
- plusieurs connexions actives par des routes diversifiées.
- Stockage persistant facultatif.
- Le SLA de connexion au schéma et de la couche d’intégration doit s’aligner sur le SLA de l’infrastructure interne existante.
- Jusqu’à 800 TPS de pic soutenu pendant 1 heure pour les FXP par exemple.
- Tenue des registres ?
- Sécurité ?
- Peut nécessiter une intégration avec les plateformes de sécurité d’entreprise existantes, p. ex. pare-feu, passerelles, etc.Le « Premium Service Manager » est recommandé : service de type Payment Manager pleinement fonctionnel pour les grands DFSP. Son exploitation demande des ressources importantes ; il doit être hébergé soit dans le centre de données existant du DFSP, soit dans le cloud.
- Couche d’intégration basée sur Kubernetes
- Peut disposer déjà d’une technologie d’intégration.
+ +## Fintechs utilisant PISP et/ou AISP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Catégorie de participantDescriptionCas d’usage attendusExigences d’infrastructure pour l’intégration MojaloopSLA de production attenduRéglementation probablement pertinenteExigences de sécurité particulièresOptions de solution
Petit PISP/AISP en auto-hébergement- Petite organisation « agence » unique avec un ou deux produits.
- Postes de travail / serveurs propres
- Cloud et/ou SaaS minimaux.
- Paiements de masse relativement modestes, p. ex. salaires pour PME- Mini-PC dédié bon marché bas de gamme (p. ex. RPi)
- Connexion Internet haut débit petite entreprise unique
- Système bancaire cœur auto-hébergé p. ex. Mifos
- Pare-feu OS/logiciel sur le même nœud matériel que la couche d’intégration.
- Une certaine indisponibilité acceptable en cas de panne matérielle.
- Certains schémas peuvent exclure les DFSP qui ne respectent pas un SLA d’indisponibilité donné.
- L’achat de matériel de remplacement en cas de panne totale peut prendre plusieurs jours/semaines.
- Jeu complet de fonctions de sécurité Mojaloop : mTLS, JWS, ILP
- SLA interface masse ?
- Comment le définir ? Taille de lot ? Temps d’envoi du lot via API ? Délai de réponse aux callbacks ?
- Taille max. de lot ~10k paiements
- L’envoi de 10k paiements via l’API masse doit prendre < 30 secondes.
- La réponse aux callbacks doit prendre < 5 secondes.
- Tenue des registres ?
- Sécurité ?
- Pas besoin d’intégration avec les plateformes de sécurité d’entreprise existantes.
- Solution entièrement sécurisée « prête à l’emploi » suivant les bonnes pratiques du secteur pour les services exposés à Internet, y compris pare-feu.
- Couche d’intégration basée sur Docker Compose.
- Couche d’intégration minimale autonome.
PISP/AISP faible-moyen en auto-hébergement- Petite organisation à une ou deux agences.
- Propre « centre de données », c.-à-d. placard à balais avec quelques serveurs, routeur, pare-feu, etc.
- Quelques connaissances cloud et/ou usage SaaS.
- Paiements de masse relativement modestes, p. ex. salaires pour PME
- Agrégation de comptes
- Nœud matériel serveur de qualité entreprise unique.
- Pare-feu OS/logiciel sur le même nœud matériel que la couche d’intégration OU pare-feu matériel dédié.
- Une certaine indisponibilité acceptable en cas de panne matérielle.
- Certains schémas peuvent exclure les DFSP qui ne respectent pas un SLA d’indisponibilité donné.
- Le remplacement du matériel en cas de panne totale peut prendre des heures.
- Jeu complet de fonctions de sécurité Mojaloop : mTLS, JWS, ILP
- SLA interface masse ?
- Comment le définir ? Taille de lot ? Temps d’envoi du lot via API ? Délai de réponse aux callbacks ?
- Taille max. de lot ~25k paiements
- L’envoi de 25k paiements via l’API masse doit prendre < 60 secondes.
- La réponse aux callbacks doit prendre < 10 secondes.
- Tenue des registres ?
- Sécurité ?
- Peut nécessiter une intégration avec les plateformes de sécurité d’entreprise existantes, p. ex. pare-feu, passerelles, etc.
?? à préciser
- Couche d’intégration basée sur Docker Compose ou Docker Swarm.
- Couche d’intégration minimale autonome.
PISP/AISP moyen-élevé en auto-hébergement- Petite organisation à une ou deux agences.
- Propre « centre de données », c.-à-d. placard à balais avec quelques serveurs, routeur, pare-feu, etc.
- Quelques connaissances cloud et/ou usage SaaS.
- Paiement de masse pour grandes organisations, p. ex. ministères
- Agrégation de comptes
- Pour tolérer la panne d’un nœud matériel, 3 nœuds matériels ou plus sont requis (2n+1).- Indisponibilité limitée (minutes) acceptable en cas de panne matérielle.
- Certains schémas peuvent exclure les DFSP qui ne respectent pas un SLA d’indisponibilité donné.
- Matériel de rechange disponible ou services de remplacement très rapides en cas de panne.
- Jeu complet de fonctions de sécurité Mojaloop : mTLS, JWS, ILP
- SLA interface masse ?
- Comment le définir ? Taille de lot ? Temps d’envoi du lot via API ? Délai de réponse aux callbacks ?
- Taille max. de lot ~100-200k paiements
- L’envoi de 100-200k paiements via l’API masse doit prendre < 300 secondes.
- La réponse aux callbacks doit prendre < 120 secondes.
- Tenue des registres ?
- Sécurité ?
- Peut nécessiter une intégration avec les plateformes de sécurité d’entreprise existantes, p. ex. pare-feu, passerelles, etc.- Couche d’intégration basée sur Kubernetes
- Peut disposer déjà d’une technologie d’intégration.
Grand PISP/AISP en auto-hébergement- Organisation mature multi-agences avec forte capacité informatique interne
- Dispose de son propre centre de données et d’experts pour gérer les systèmes
- À l’aise avec le cloud et les applications hybrides
- Dispose d’une capacité d’ingénierie logicielle interne.
- Paiement de masse pour grandes organisations, p. ex. ministères- Haute disponibilité de l’infrastructure interne nécessaire
- Plusieurs instances actives de tous les services d’intégration critiques réparties sur plusieurs nœuds matériels.
- Stockage de données répliqué haute disponibilité.
- peut être multi-site / zone de disponibilité / région.
- Aucune indisponibilité acceptable
- Haute disponibilité de la connectivité.
- plusieurs connexions actives par des routes diversifiées.
- Stockage persistant facultatif.
- Le SLA de connexion au schéma et de la couche d’intégration doit s’aligner sur le SLA de l’infrastructure interne existante.
- SLA interface masse ?
- Comment le définir ? Taille de lot ? Temps d’envoi du lot via API ? Délai de réponse aux callbacks ?
- Taille max. de lot ~1M paiements
- L’envoi de 1M paiements via l’API masse doit prendre < 600 secondes.
- La réponse aux callbacks doit prendre < 300 secondes.
- Tenue des registres ?
- Sécurité ?
- Peut nécessiter une intégration avec les plateformes de sécurité d’entreprise existantes, p. ex. pare-feu, passerelles, etc.- Couche d’intégration basée sur Kubernetes
- Peut disposer déjà d’une technologie d’intégration.
+ +## Historique du document +|Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.0|9 juin 2025|Tony Williams|Version initiale| diff --git a/docs/fr/product/features/connectivity/participation_tools_mini_guides.md b/docs/fr/product/features/connectivity/participation_tools_mini_guides.md new file mode 100644 index 000000000..453f3b043 --- /dev/null +++ b/docs/fr/product/features/connectivity/participation_tools_mini_guides.md @@ -0,0 +1,133 @@ +--- +sidebarTitle: Guides des outils de participation +--- + +# Guide de sélection et d’utilisation des outils de participation + +# Contexte + +La communauté Mojaloop a développé une gamme d’outils à l’usage des DFSP participants, qui facilitent la connexion entre le système d’information du DFSP et un schéma basé sur Mojaloop (le Hub). Chacun joue le rôle d’une couche d’adaptation qui prend en charge la complexité des API Mojaloop et des exigences de sécurité, permettant au DFSP de connecter plus aisément son système d’information. Cela peut grandement faciliter l’intégration, en réduisant à la fois le coût direct (les outils de participation sont en open source et peuvent être téléchargés librement) et le coût indirect (le temps d’intégration est fortement réduit, car la complexité est gérée au sein de l’outil). Le coût de maintenance courant est également bien moindre, car les outils de participation sont maintenus par la communauté Mojaloop et ne nécessitent qu’une « personnalisation » par chaque DFSP. + +Contrairement au Hub Mojaloop lui-même, les outils de participation sont destinés à être déployés dans le périmètre du DFSP ; leur mise en œuvre et leur utilisation restent de la responsabilité de chaque DFSP, avec toutefois l’appui de la communauté Mojaloop. + +La communauté a pris acte du fait que les DFSP ont des exigences et contraintes différentes vis-à-vis des outils de participation, ce qui se reflète dans la diversité des offres. + +# Fonctionnalités + +L’un des objectifs centraux des outils de participation est de masquer la complexité de l’API Mojaloop. Outre toute la dimension sécurité, les outils prennent en charge des procédures Mojaloop complexes et multi-étapes — telles que la recherche de parties, l’accord sur les conditions et les transferts — et les présentent aux systèmes du DFSP de manière plus simple. + +Pour cela, tous les outils de participation offrent les services suivants : + +1. Gestion de la connexion entre le DFSP et le Hub Mojaloop, notamment la mise en place et l’exploitation de la sécurité, y compris l’échange de certificats de clés. +2. Intégration complète des API avec le Hub Mojaloop, couvrant : + 1. L’administration, par exemple la configuration du routage ou des alias pour les clients du DFSP ; + 2. La participation aux transactions en tant qu’institution débitrice ou créditrice ; + 3. La prise en charge de l’autorisation (y compris l’autorisation continue) pour les transactions initiées par des tiers (par exemple les fintechs). +3. Une série d’outils open source pour faciliter la connexion entre l’outil de participation et le système d’information du DFSP (directement au système bancaire cœur, au moteur de paiements ou à une plateforme de messagerie). + +# Éléments architecturaux communs + +L’architecture commune à tous les outils de participation repose sur plusieurs composants clés qui coopèrent pour faciliter la connexion et la gestion des transactions. + +## Connecteur cœur (*Core Connector*) + +C’est le composant d’intégration central qui agit comme « traducteur » entre le système d’information du DFSP et l’outil de participation. Des modèles sont fournis dans le cadre Apache Camel, qui offre un langage déclaratif orienté intégration, et en TypeScript, langage largement connu. Les intégrateurs système et/ou les participants peuvent utiliser ces modèles ou créer un connecteur sur mesure dans la pile technologique de leur choix. L’usage de modèles permet d’adapter le connecteur cœur à la technologie dorsale existante du DFSP sans l’obliger à modifier ses propres systèmes. + +## Connecteur Mojaloop (*Mojaloop Connector*) + +Ce composant communique directement avec le Hub Mojaloop et comprend deux sous-composants essentiels : +**Mojaloop-SDK :** fournit les éléments de sécurité nécessaires et traite les en-têtes HTTP de manière conforme à Mojaloop. + +**API simplifiée :** propose une version plus synchrone et orientée cas d’usage de l’API FSPIOP Mojaloop, plus facile à consommer pour les systèmes dorsaux du DFSP. + +## Client Mojaloop Connection Manager (MCM) + +Ce client automatise et simplifie la configuration des connexions vers différents environnements Mojaloop. Il gère la création, la signature et l’échange des certificats numériques, exigence de sécurité critique pour l’écosystème Mojaloop. + +# Flux de transaction de haut niveau + +Les outils de participation facilitent le processus de transaction en servant de passerelle du DFSP vers le Hub Mojaloop : + +* Une transaction est initiée par le système d’information du DFSP. +* Le système d’information envoie la demande au connecteur cœur au sein de l’outil de participation. +* Le connecteur cœur traduit la demande pour le connecteur Mojaloop et son API simplifiée. +* Le connecteur Mojaloop communique de manière sécurisée avec le switch Mojaloop (Hub) via le Mojaloop-SDK. +* Les paiements sont routés et orchestrés par le Hub Mojaloop vers le DFSP destinataire. +* L’outil de participation fournit des mises à jour de statut et des informations de rapprochement au DFSP via les portails de supervision, lorsque ceux-ci sont mis en œuvre. + +# Outils de participation disponibles + +On distingue deux grandes familles d’outils de participation : d’abord Payment Manager, qui offre toute la fonctionnalité et la flexibilité qu’une grande banque peut exiger ; ensuite un ensemble de solutions autour de l’Integration Toolkit Mojaloop, dimensionnables et hébergeables pour répondre aux besoins variés d’un large éventail d’autres DFSP. + +## Payment Manager + +Également connu sous le nom de Payment Manager for Mojaloop (PM4ML), Payment Manager est un outil de participation Mojaloop complet qui offre toutes les fonctionnalités qu’attendrait une grande banque. Il peut être déployé dans le cloud ou dans le centre de données de la banque et prend en charge toutes les options de reprise après sinistre habituelles dans ce contexte. Il dispose aussi de capacités étendues de gestion et de reporting. + +

+ Architecture PM4ML +

+**Figure 1 : architecture de Payment Manager** + +Le schéma ci-dessus représente une vue de haut niveau de l’architecture de Payment Manager et indique les éléments du Hub Mojaloop avec lesquels il interagit. + +### Portails de Payment Manager + +Les portails métier et techniques de PM4ML offrent des interfaces conviviales avec des tableaux de bord pour suivre les informations critiques : +- **Supervision des transactions :** affiche les statuts de transaction en temps réel et historiques. +- **État des services :** permet aux DFSP de suivre la santé et les performances de leurs connexions. +- **Gestion de la configuration :** point unique pour gérer les clés de sécurité, les certificats et la configuration des points de terminaison. + +## Integration Toolkit + +La famille d’outils de participation Integration Toolkit est conçue pour offrir une grande flexibilité dans la manière dont un DFSP se connecte à un Hub Mojaloop, et peut être déployée sur divers environnements pour couvrir des besoins allant de la plus petite IMF à la plus grande banque. + +### Vue d’ensemble + +

+ Architecture ITK +

+**Figure 2 : architecture ITK** + +Comme on peut s’y attendre, et comme l’illustre le schéma ci-dessus, il existe des points communs avec Payment Manager : + +* Le connecteur cœur et le connecteur Mojaloop fonctionnent comme décrit précédemment. +* Le client Mojaloop Connection Manager (MCM Client) reste chargé de la création, de la signature et de l’échange des certificats numériques, socle de la sécurité de la connexion au Hub Mojaloop. + +Il existe toutefois des différences notables. Le fonctionnement du MCM Client est désormais soumis au contrôle des MCM Agent Services, qui orchestrent la gestion de la sécurité via une machine à états. Le contrôle et la configuration des Agent Services s’effectuent via l’ITK Configuration Utility, qui propose une interface de type console au personnel opérationnel du DFSP. Elle remplit le même rôle que le portail de configuration de Payment Manager. + +La sécurité de l’ITK Configuration Utility / console relève de l’infrastructure de sécurité propre au DFSP. Le serveur (ou la machine virtuelle) sur lequel s’exécutent les composants ITK doit être sécurisé comme tout autre serveur du périmètre administratif du DFSP. + +Contrairement à Payment Manager, l’ITK n’inclut pas de portails de supervision des transactions (prévu pour être pris en charge par les systèmes dorsaux existants du DFSP) ni d’état de service, tandis que l’ITK Configuration Utility remplit le même rôle que le portail de gestion de configuration de Payment Manager. + +### Options de déploiement ITK + +Les options de déploiement de l’ITK sont cataloguées dans la [matrice des fonctionnalités par participant](./participant-matrix.md) et se résument comme suit : + +* **Un petit DFSP**, tel qu’une petite IMF ou banque, devrait en principe auto-héberger l’ITK. Cette approche couvre tous les cas d’usage sauf l’initiation des paiements de masse (la réception des paiements de masse reste possible). Des volumes de transaction modestes sont attendus (10 TPS au maximum), et une certaine indisponibilité (éventuellement de quelques heures) est acceptable. + * Il est recommandé de déployer une version à fonctionnalités minimales de l’ITK sur un petit serveur, jusqu’à un ordinateur monocarte tel qu’un Raspberry Pi pour les plus petits DFSP. + * La supervision des transactions doit passer par le système d’information existant du DFSP. + * Le déploiement s’effectue via Docker Compose. + +* **Un DFSP de taille faible à moyenne**, tel qu’une banque ou une IMF avec une ou deux agences et son propre centre de données « placard à balais », devrait en principe auto-héberger l’ITK. Cette approche couvre tous les cas d’usage, y compris l’initiation de paiements de masse à petite échelle. Des pics d’environ 50 TPS sont pris en charge, et une indisponibilité limitée (de l’ordre de quelques heures) est acceptable. + * Il est recommandé de déployer une version pleinement fonctionnelle de l’ITK sur un serveur de base, hébergé dans le centre de données du DFSP. + * Un déploiement Kafka est nécessaire pour les paiements de masse. + * Le déploiement s’effectue via Docker Compose ou Docker Swarm. + * Intégration minimale avec les plateformes de sécurité d’entreprise existantes. + * La supervision des transactions doit passer par le système d’information existant du DFSP. + +* **Un DFSP de taille moyenne à grande**, tel qu’une institution financière moyenne avec quelques agences, son propre centre de données et des compétences informatiques internes raisonnables, devrait héberger l’ITK. Cette approche couvre tous les cas d’usage, y compris l’initiation de paiements de masse à petite / moyenne échelle. Des pics d’environ 50 TPS sont pris en charge, et une indisponibilité limitée (de l’ordre de quelques minutes) est acceptable. + * Pour respecter les exigences d’indisponibilité les plus strictes, une configuration multi-serveurs est nécessaire, gérée avec Kubernetes. + * Il est recommandé de déployer une version pleinement fonctionnelle de l’ITK, la supervision des transactions passant par le système d’information existant du DFSP. + * Un déploiement Kafka est nécessaire pour les paiements de masse. + * Le déploiement s’effectue via Kubernetes. + * Intégration possible avec les plateformes de sécurité d’entreprise existantes. +* **Un grand DFSP**, tel qu’une institution financière mature multi-agences disposant d’un centre de données aux standards du secteur et de compétences informatiques internes avancées, est invité à utiliser Payment Manager. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.0|17 décembre 2025| Paul Makin |Version initiale| diff --git a/docs/fr/product/features/deployment.md b/docs/fr/product/features/deployment.md new file mode 100644 index 000000000..6103d0fa5 --- /dev/null +++ b/docs/fr/product/features/deployment.md @@ -0,0 +1,27 @@ +--- +sidebarTitle: Déploiement +--- + +# Déployer Mojaloop + +Les raisons de déployer Mojaloop sont multiples : apprendre à le connaître, évaluer son adéquation à un besoin, faire évoluer ou tester des fonctionnalités par des développeurs, permettre à un adoptant d’examiner fonctionnalités et connectivité, ou encore mettre en production un système national de paiements. + +## Guide de déploiement + +Pour chaque scénario, la communauté Mojaloop a développé des outils de déploiement adaptés. Le [guide de déploiement](./deployment/deploying.md) propose une matrice croisant types d’utilisateurs et objectifs du déploiement, avec des indications sur l’empreinte / le matériel attendu et les SLA associés. Pour chaque cas, un outil de déploiement est recommandé ; un second tableau présente brièvement chaque outil. + +## Outils de déploiement + +Une fois l’outil adapté à vos besoins identifié, le [guide des outils de déploiement](./deployment/tools.md) détaille chaque solution, y compris les aspects performance et sécurité. + +## Préparation à la production + +La communauté a élaboré une matrice d’auto-évaluation permettant aux adoptants d’évaluer la maturité de leur déploiement Mojaloop et de leur organisation pour passer en production. Ce document ne constitue pas la base d’une évaluation formelle de la préparation à la production ; il propose un ensemble de contrôles de base sur des aspects importants d’un système en production. L’évaluation complète de l’adéquation opérationnelle d’un déploiement Mojaloop reste de la responsabilité exclusive de l’opérateur de schéma. + +Vous pouvez [consulter la matrice ici](./Production_Readiness_Technical_Assessment.md) ; le formulaire est [téléchargeable ici](https://github.com/mojaloop/product-council/tree/main/Documentation/Deployment%20Readiness) lorsque vous souhaitez lancer une évaluation. + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|18 décembre 2025| Paul Makin, Julie Guetta|Ajout d’un lien vers le document de préparation à la production| +|1.0|3 juin 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/deployment/deploying.md b/docs/fr/product/features/deployment/deploying.md new file mode 100644 index 000000000..1e1a7abb0 --- /dev/null +++ b/docs/fr/product/features/deployment/deploying.md @@ -0,0 +1,237 @@ +--- +sidebarTitle: Déployer Mojaloop +--- + +# Déploiement de Mojaloop + +Cette section décrit les aspects de déploiement du Hub Mojaloop. + +## Déploiement du Hub Mojaloop (hors intégrations participants) + +Le tableau suivant indique quel scénario de déploiement Mojaloop convient le mieux selon le type d’utilisateur et le cas d’usage. + +Pour le détail de chaque outil de déploiement, voir la documentation [Outils de déploiement](./tools.md). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Scénario de déploiement / type d’utilisateurApprentissageÉvaluation (choix de Mojaloop)Tests de cas d’usageDéveloppement de fonctionnalités et tests de développementProduction
ÉtudiantEmpreinte : machine unique, p. ex. portable ou VM unique.
SLA : aucun
N/AEmpreinte : machine unique, p. ex. portable ou VM unique.
SLA : aucun
Empreinte : machine unique, p. ex. portable ou VM unique.
SLA : aucun
N/A
DéveloppeurEmpreinte : machine unique, p. ex. portable ou VM unique.
SLA : aucun
N/AEmpreinte :
- Machine unique, p. ex. portable ou VM unique.
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Machine unique, p. ex. portable ou VM unique.
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
N/A
Analyste métierEmpreinte : machine unique, p. ex. portable ou VM unique.
SLA : aucun
Empreinte :
- Machine unique, p. ex. portable ou VM unique.
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
N/A
Adoptant potentielEmpreinte : machine unique, p. ex. portable ou VM unique.
SLA : aucun
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
N/A
Auditeur / QA externe / analyste sécuritéEmpreinte : machine unique, p. ex. portable ou VM unique.
SLA : aucun
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
N/AN/A
Intégrateur systèmeEmpreinte : machine unique, p. ex. portable ou VM unique.
SLA : aucun
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Déploiement entièrement redondant, répliqué, haute disponibilité
- Sur site ou cloud
SLA : SLA élevé sur de nombreux axes.
Opérateur de hubEmpreinte : machine unique, p. ex. portable ou VM unique.
SLA : aucun
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Faible consommation de ressources, cluster unique
- Environnement proche de la production (bac à sable ? SLA inférieur à la prod)
SLA :
- Inférieur à la prod mais possibilité de tester les exigences non fonctionnelles.
Empreinte :
- Déploiement entièrement redondant, répliqué, haute disponibilité
- Sur site ou cloud
SLA : SLA élevé sur de nombreux axes.
+ +## Outils de déploiement + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OutilFonctionnalitésExigences minimales en ressourcesSécuritéDocumentationSLARéserves, hypothèses, limites, etc.
core test harness- nœud unique
- docker-compose
- « profils » disponibles
- Pas de HELM
- Pas de passerelle
- Pas de composants entrée/sortie
- Pas de pile IAM
- Déploie :
- services cœur et services sous-jacents
- portails (facultatif)
- pile de supervision (facultatif)

Utilisé dans les pipelines CI pour les tests d’intégration.
Portable ou poste de travail milieu de gammeAucune sécurité- Documentation orientée développeurs.
- Documentation pour utilisateurs non techniques à des fins pédagogiques.
- Documentation produit pour expliquer les fonctionnalités (rôle et pertinence)
- Aucun SLA- Ne jamais utiliser en production.
- Ne jamais utiliser pour traiter des transactions impliquant de l’argent réel.
déploiement HELM- Seuls les charts HELM sont nécessaires pour déployer les services Mojaloop et les services sous-jacents.- Portable ou poste haut de gamme
- Petit cluster Kubernetes cloud.
L’utilisateur doit durcir son propre cluster Kubernetes.- Documentation orientée développeurs
- Documentation semi-technique / orientée analyste métier pour l’expérimentation et les tests de cas d’usage.
- Documentation produit pour expliquer les fonctionnalités (rôle et pertinence).
- Doit permettre d’atteindre des SLA (pour une configuration matérielle de référence) :
- Disponibilité :
- ? 4 ou 5 neufs ?
- RTO/RPO : ? aussi proche de zéro que possible.
- Débit / performance
- TPS : 1000+ (soutenu pendant 1 heure)
- Latence (percentiles) (hors latences externes) :
- Compensation : 99 % < 1 seconde.
- Recherche : 99 % < 1 seconde.
- Accord sur les conditions : 99 % < 1 seconde.
- Gestion des données :
- Mesures contre la perte de données (réplication, reprise après sinistre).
- Conservation (audit, conformité)
- Archivage.

NB : la stratégie privilégie la haute disponibilité par rapport à la reprise après sinistre.
- Peut être utilisé en production.
- Adapté au traitement d’opérations en argent réel.
- L’utilisateur / adoptant doit déployer et configurer sa propre infrastructure, y compris cluster(s) Kubernetes, entrée/sortie, pare-feu, etc.
- La sécurité se limite à ce que fournissent les charts HELM ; une conception et une configuration de sécurité complémentaires sont nécessaires.
Infrastructure as Code- plusieurs cibles de plateforme de déploiement
- AWS, sur site, autres clouds (modulaire)
- plusieurs options de couche d’orchestration
- k8s managé, microk8s, EKS
- modèle GitOps (centre de contrôle)
- peut déployer et gérer plusieurs instances / environnements de hub
- Déploie :
- centre de contrôle
- services cœur et services sous-jacents (options pour services sous-jacents managés)
- portails
- pile IAM
- pile de supervision
- pm4ml
- modèle GitOps
- Infrastructure cloud haut de gamme ou sur site.Sécurité complète- Plusieurs niveaux de documentation pour tous types d’« utilisateurs ».
- Documentation développeur pour utilisation, maintenance, évolution, extension des capacités IaC (nouvelles cibles / services / fonctionnalités).
- Schémas d’architecture détaillés et explications pour une compréhension approfondie.
- Documentation orientée exploitation technique pour permettre aux profils « ingénieur infrastructure » d’utiliser l’IaC pour déployer et maintenir plusieurs instances Mojaloop en développement, test et production.
- Documentation produit pour présenter l’IaC (rôle et pertinence).
- Doit permettre d’atteindre des SLA (pour une configuration matérielle de référence) :
- Disponibilité :
- ? 4 ou 5 neufs ?
- RTO/RPO : ? aussi proche de zéro que possible.
- Débit / performance
- TPS : 1000+ (soutenu pendant 1 heure)
- Latence (percentiles) (hors latences externes) :
- Compensation : 99 % < 1 seconde.
- Recherche : 99 % < 1 seconde.
- Accord sur les conditions : 99 % < 1 seconde.
- Gestion des données :
- Mesures contre la perte de données (réplication, reprise après sinistre).
- Conservation (audit, conformité)
- Archivage.

NB : la stratégie privilégie la haute disponibilité par rapport à la reprise après sinistre.
- Peut être utilisé en production.
- Adapté au traitement d’opérations en argent réel.
+ +## Historique du document +|Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.2|20 août 2025|Sam Kummary|Mise à jour des sections pour utiliser Helm comme option de déploiement le cas échéant| +|1.1|3 juin 2025|Paul Makin|Suppression de la section performance, déplacée vers un nouveau document| +|1.0|7 mai 2025|Tony Williams|Version initiale| diff --git a/docs/fr/product/features/deployment/tools.md b/docs/fr/product/features/deployment/tools.md new file mode 100644 index 000000000..38eefa93e --- /dev/null +++ b/docs/fr/product/features/deployment/tools.md @@ -0,0 +1,138 @@ +--- +sidebarTitle: Outils de déploiement +--- + +# Outils de déploiement Mojaloop + +Ce document présente les trois options de déploiement de Mojaloop, classées par complexité et maturité production. Chaque outil correspond à des cas d’usage et des scénarios de déploiement précis. + +## Core Test Harness {#core-test-harness} + +
+
+ Environnement de développement et de test +
+ +Le Core Test Harness fournit un environnement de développement sur un seul nœud avec docker-compose. Il met en œuvre une pile Mojaloop minimale sans les composants production, ce qui le rend adapté au développement et aux tests. + +> **Documentation technique :** +> **LACUNE** — Pas de documentation technique dédiée identifiée pour le Core Test Harness. Références associées dans : +> - [Guide de déploiement — déploiement Helm des prérequis backend](../../../technical/technical/deployment-guide/README.md#_5-1-prerequisite-backend-helm-deployment) (mentionne des exemples docker-compose) +> - [Notes de version](../../../technical/technical/releases.md) (mentionne la validation du Core Test Harness) + +### Détails de mise en œuvre + +Le Core Test Harness s’exécute sur une machine unique en s’appuyant sur docker-compose pour l’orchestration. Il déploie les services cœur et les services sous-jacents sans composants de niveau production (passerelles, entrée/sortie, pile IAM, etc.). La mise en œuvre s’appuie sur des profils configurables pour gérer différents scénarios de déploiement. + +Les besoins en ressources correspondent à un portable ou poste de travail milieu de gamme avec une mémoire suffisante pour l’orchestration des conteneurs. L’outil s’intègre aux pipelines CI pour les tests et validations automatisés. + +### Flux de travail de développement + +Les développeurs interagissent avec le Core Test Harness via les commandes docker-compose. L’outil prend en charge le développement local avec rechargement à chaud. La configuration passe par des variables d’environnement et des fichiers d’override docker-compose. + +### Capacités de test + +Le Core Test Harness permet les tests unitaires, d’intégration et de bout en bout des composants Mojaloop. Il offre un environnement contrôlé pour tester les interactions entre services et valider la logique métier. + +## Déploiement HELM {#helm-deploy} + +
+
+ Solution de déploiement en production +
+ +Le déploiement HELM fournit des capacités prêtes pour la production via les charts HELM. Cette mise en œuvre exige un cluster Kubernetes préconfiguré et satisfait aux exigences de sécurité et de performances de production. + +> **Documentation technique :** +> - [Guide de déploiement Mojaloop](../../../technical/technical/deployment-guide/README.md) — Documentation complète du déploiement HELM +> - [Guide de stratégie de mise à niveau](../../../technical/technical/deployment-guide/upgrade-strategy-guide.md) — Procédures de mise à niveau HELM +> - [Dépannage du déploiement](../../../technical/technical/deployment-guide/deployment-troubleshooting.md) — Problèmes courants et solutions + +### Exigences d’infrastructure + +Le déploiement requiert : +- Un cluster Kubernetes durci +- Des politiques réseau et des paramètres de sécurité +- Des définitions de classes de stockage +- Des quotas et limites de ressources + +### Spécifications de performance + +La mise en œuvre doit respecter les critères suivants : +- Plus de 1000 TPS soutenus pendant une heure +- Latence au 99e percentile inférieure à 1 seconde pour : + - Les opérations de compensation (*clearing*) + - Les recherches (*lookup*) + - L’accord sur les conditions (*Agreement of Terms*) +- Disponibilité de 99,99 % +- RTO/RPO nuls pour les opérations critiques + +### Mise en œuvre de la sécurité + +La sécurité comprend notamment : +- Application des politiques réseau +- Politiques de sécurité des pods +- Intégration d’un service mesh +- Gestion des secrets +- Gestion des certificats + +## Infrastructure as Code {#infrastructure-as-code-iac} + +
+
+ Solution de déploiement d’entreprise +
+ +La mise en œuvre Infrastructure as Code (IaC) offre une solution de déploiement complète pour plusieurs plateformes et couches d’orchestration. Elle applique des modèles GitOps pour gérer plusieurs instances de hub. + +> **Documentation technique :** +> **LACUNE** — Documentation interne limitée pour l’installation et la configuration IaC +> - [Guide d’installation IaC](../../../getting-started/installation/installing-mojaloop.md) — Vue d’ensemble IaC de base (voir point 2) +> - [Article sur le déploiement IaC](https://infitx.com/deploying-mojaloop-using-iac) — Guide détaillé externe +> - [Dépôt plateforme AWS IaC](https://github.com/mojaloop/iac-aws-platform) — Mise en œuvre spécifique AWS + +### Prise en charge des plateformes + +La mise en œuvre prend en charge : +- Déploiement AWS via CloudFormation/Terraform +- Déploiement sur site via Terraform +- Déploiement multicloud via des modules fournisseurs-agnostes +- Plusieurs distributions Kubernetes : + - Services Kubernetes managés + - Microk8s + - EKS + +### Architecture du centre de contrôle + +Le centre de contrôle applique GitOps pour : +- La gestion multi-environnements +- Le versionnement de la configuration +- L’automatisation du déploiement +- La gestion d’état +- La détection de dérive (*drift*) + +### Déploiement des composants + +La mise en œuvre déploie : +- Les services du centre de contrôle +- Les services cœur Mojaloop +- Les services sous-jacents +- Les applications portail +- L’infrastructure IAM +- La pile de supervision +- Les composants PM4ML + +### Performance et sécurité + +La mise en œuvre IaC impose : +- Des contrôles de sécurité de niveau production +- Des exigences de performance alignées sur le déploiement HELM +- Des configurations haute disponibilité +- Des procédures de reprise après sinistre +- Des exigences de conformité + +## Historique du document +|Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|5 juin 2025| Tony Williams|Ajout de liens vers la documentation technique| +|1.0|14 mai 2025| Tony Williams|Version initiale| diff --git a/docs/fr/product/features/development.md b/docs/fr/product/features/development.md new file mode 100644 index 000000000..cee7bd186 --- /dev/null +++ b/docs/fr/product/features/development.md @@ -0,0 +1,49 @@ +--- +sidebarTitle: Développement en cours +--- + +# Développement en cours + +Aucun logiciel n’est jamais « terminé », et Mojaloop ne fait pas exception : nouvelles fonctionnalités, nouvelles API, nouveaux portails, maintenance continue, et une vigilance constante en matière de sécurité. + +La feuille de route Mojaloop priorise ces besoins dans le temps sous forme de *workstreams*. Chaque flux de travail a un responsable, chargé de le définir, le piloter et le livrer à la communauté Mojaloop, avec le soutien de contributeurs (ingénierie, documentation, cadrage des besoins, etc.). + +## Workstreams actifs + +Les workstreams actuellement actifs sont : + +- [Outils de participation](./workstreams/participation.md) +- [Outils de participation pour les fintechs](./workstreams/fintech_participation.md) +- [Outils de déploiement](./workstreams/deployment.md) +- [Cadre QA](./workstreams/qa.md) +- [Gestion des litiges](./workstreams/dispute.md) +- [Adressage LEI](./workstreams/lei.md) +- [Affinage ISO 20022](./workstreams/iso20022.md) +- [Évolution Mojaloop](./workstreams/evolution.md) +- [Performance](./workstreams/performance.md) +- [Qualité et sécurité de plateforme](./workstreams/pqs.md) +- [Cœur et versions](./workstreams/core.md) + +Cliquez sur chaque lien pour les objectifs et les contributeurs. + +## Workstreams candidats + +Outre les workstreams actifs, plusieurs sont identifiés comme « suiveurs rapprochés » : priorité élevée, mais capacité insuffisante dans la communauté pour l’instant. Il s’agit notamment de : + +- Mise en œuvre de PISP V2.0 +- Mise en œuvre de Settlement V3.0 +- Améliorations du portail opérateur (interface, fonctionnalités manquantes perçues) +- Renforcement de l’audit forensic +- Paiements commerçants : enrichir la solution actuelle d’enregistrement commerçant et de QR présenté par le commerçant avec des éléments plus complets pour un schéma en production + +Contactez le directeur produit pour échanger sur ces workstreams candidats et sur les moyens de les activer. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|25 novembre 2025| Paul Makin|Relecture / mise à jour de la liste des workstreams candidats| +|1.0|4 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/ecosystem.svg b/docs/fr/product/features/ecosystem.svg new file mode 100644 index 000000000..e18dc9867 --- /dev/null +++ b/docs/fr/product/features/ecosystem.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/fr/product/features/engineering.md b/docs/fr/product/features/engineering.md new file mode 100644 index 000000000..caeef32a9 --- /dev/null +++ b/docs/fr/product/features/engineering.md @@ -0,0 +1,71 @@ +--- +sidebarTitle: Principes d’ingénierie +--- + +# Principes d’ingénierie + +Cette section présente les principes qui sous-tendent les choix d’ingénierie du Hub Mojaloop. + +## Journalisation + +La journalisation standard des conteneurs (*stdout*, *stderr*) est utilisée par défaut. + +## Transferts + +1. Les identifiants de ressources sont uniques dans un schéma et imposés par le hub. + +2. Les méthodes d’API pouvant retourner de grands ensembles de résultats sont paginées par défaut. + +3. Les recherches de modèle de règlement utilisent les devises des DFSP payeur et bénéficiaire. + +4. Les ressources / entités sont typées pour être distinguées. + +5. Les noms (objets, méthodes, types, fonctions, etc.) sont clairs et non ambigus. + +## Comptes et soldes + +1. Le grand livre repose sur un magasin de données sous-jacent **fortement cohérent**. + +2. Les données financières critiques sont répliquées vers plusieurs nœuds géographiquement distribués de manière **fortement cohérente** et performante, de sorte que la défaillance de plusieurs nœuds physiques n’entraîne **aucune perte de données**. + +## Participants + +1. Les problématiques de connectivité des participants sont traitées au niveau passerelle pour faciliter l’usage d’outils standard du secteur. + +## Évolutivité et résilience + +1. Le débit global des transferts (les trois phases) est évolutif de manière quasi linéaire par ajout de nœuds matériels modestes et génériques. + +2. Les données critiques métier peuvent être répliquées sur plusieurs nœuds géographiquement distribués de façon fortement cohérente et performante ; la défaillance de plusieurs nœuds physiques n’entraîne aucune perte de données. + +## Spécification Mojaloop + +1. Prise en charge de JWS. + +2. TLS mutuellement authentifié (x.509) en version 1.2 recommandé entre participants et hub. + +## Généralités + +1. Les traitements dépendant du contexte sont effectués une fois et les résultats mis en cache en mémoire si nécessaire plus tard dans la même pile d’appels. + +2. Tous les messages de journal contiennent des informations contextuelles. + +3. Les défaillances sont anticipées et gérées le plus gracieusement possible. + +4. Les requêtes inter-processus / réseau ne demandent que les données nécessaires. + +5. Les couches d’abstraction sont réduites au minimum. + +6. La communication inter-processus utilise le même mécanisme de transport partout où c’est possible. + +7. Les agrégats sont sans état. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document +|Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|14 avril 2025| Paul Makin|Suppression des sections déploiement| +|1.0|5 février 2025| James Bush|Version initiale| diff --git a/docs/fr/product/features/fx.md b/docs/fr/product/features/fx.md new file mode 100644 index 000000000..f79c07057 --- /dev/null +++ b/docs/fr/product/features/fx.md @@ -0,0 +1,160 @@ +--- +sidebarTitle: Change de devises +--- + +# Change étranger – conversion de devises + +La fonctionnalité de conversion de devises de Mojaloop permet les opérations de change (FX) et prend en charge plusieurs approches de conversion au sein de l’écosystème. À ce jour, le système met en œuvre la **conversion de devises côté DFSP payeur**, où le DFSP payeur (*Digital Financial Services Provider*) coordonne son action avec un fournisseur de change (FXP) pour obtenir la liquidité dans une autre devise et faciliter le transfert. + +Les évolutions futures prévues pour la conception de la conversion de devises comprennent : +1. **Conversion côté DFSP bénéficiaire** — Le DFSP bénéficiaire organise la conversion de devises. +1. **Conversion via devise de référence** — Le DFSP payeur et le DFSP bénéficiaire s’adressent chacun à des FXP pour convertir les fonds via une devise de référence. +1. **Conversion de masse** — Les DFSP peuvent se procurer de la liquidité en devises auprès d’un FXP par opérations de masse. + +## Rôle du fournisseur de change (FXP) + +Un élément central de la capacité de conversion de Mojaloop est la prise en charge d’un marché du change concurrentiel, où plusieurs FXP peuvent fournir des cotations de taux en temps réel. Cette conception favorise un environnement ouvert et dynamique pour les opérations de change. + +Le processus de conversion de devises suit une chaîne en trois étapes : +1. **Demande de cotation** — Le DFSP payeur demande une cotation à un FXP. Par exemple, un DFSP zambien peut obtenir une cotation de conversion pour un transfert donné. +1. **Accord sur la cotation** — Le DFSP payeur examine le taux de change et les conditions proposés par le FXP. Une fois acceptés, le FXP bloque le taux. +1. **Finalisation du transfert** — Sur notification du schéma Mojaloop que le transfert dépendant est achevé, le processus de conversion est finalisé. + +Cette approche clarifiée favorise la transparence et la concurrence sur les opérations FX, au bénéfice des DFSP et des utilisateurs finaux. + +## Incidence du type de montant sur la conversion de devises + +La mise en œuvre de la conversion côté DFSP payeur couvre deux scénarios distincts selon le type de montant indiqué dans la transaction : +1. **Envoi de fonds dans la devise source (locale)** +1. **Paiement dans la devise cible (étrangère)** + +### Envoi de fonds vers un compte dans une autre devise + +Dans ce cas d’usage, le **DFSP payeur** initie un transfert avec le type de montant **SEND**, en indiquant le montant dans la devise locale du payeur (devise source). Cette méthode est courante pour les transferts de **rémittance P2P**, où l’émetteur envoie des fonds dans sa devise locale et le bénéficiaire reçoit l’équivalent dans sa devise après conversion. + +### Transfert avec conversion de devises (devise source) {#currency-conversion-transfer-source-currency} + +Ci-dessous, un diagramme de séquence simplifié des flux entre les organisations participantes, les fournisseurs de change et le switch Mojaloop pour un transfert avec conversion de devises exprimé en **devise source**. + +Le flux se décompose ainsi : +1. [Phase de découverte](#discovery-phase) +1. [Phase d’accord – conversion de devises](#agreement-phase---currency-conversion) +1. [Phase d’accord](#agreement-phase) +1. [Le DFSP payeur présente les conditions au payeur](#payer-dfsp-presents-terms-to-payer) +1. [Phase de transfert](#transfer-phase) + +#### Phase de découverte {#discovery-phase} + +Le DFSP payeur identifie l’organisation DFSP bénéficiaire et confirme la validité du compte et la devise. + +![Phase de découverte](./CurrencyConversion/Payer_SEND_Discovery.svg) + +#### Phase d’accord – conversion de devises {#agreement-phase---currency-conversion} + +Le DFSP payeur adresse une demande au FXP pour la couverture de liquidité du transfert. Les conditions de conversion de devises sont renvoyées. + +![Conversion de devises](./CurrencyConversion/PAYER_SEND_CurrencyConversion.svg) + +#### Phase d’accord {#agreement-phase} + +Le DFSP payeur demande au DFSP bénéficiaire les conditions du transfert. + +![Accord](./CurrencyConversion/PAYER_SEND_Agreement.svg) + +#### Le DFSP payeur présente les conditions au payeur {#payer-dfsp-presents-terms-to-payer} + +À ce stade, les informations sur la partie, les conditions de conversion et les conditions de transfert ont été fournies au DFSP payeur. Le DFSP payeur les présente au payeur et lui demande s’il souhaite poursuivre. + +![Confirmation d’envoi](./CurrencyConversion/PAYER_SEND_Confirmation.svg) + +#### Phase de transfert {#transfer-phase} + +Les conditions du transfert ayant été acceptées, le transfert peut avoir lieu. Les conditions de conversion et de transfert sont engagées conjointement. + +![Transfert](./CurrencyConversion/PAYER_SEND_Transfer.svg) + + +### Intégration du connecteur Mojaloop pour la conversion de devises + +Le diagramme de séquence détaillé ci-dessous présente le flux complet, avec le **connecteur Mojaloop** et les API d’intégration pour toutes les organisations participantes. (Vue utile si vous réalisez des intégrations en tant qu’organisation participante.) + +#### Phase de découverte – connecteur Mojaloop {#discovery-phase---mojaloop-connector} + +Mojaloop s’appuie sur un oracle pour identifier l’organisation DFSP associée à l’identifiant de partie. Le DFSP bénéficiaire doit répondre au GET /parties pour confirmer que le compte existe et est actif pour cet identifiant. Les devises prises en charge pour ce compte sont renvoyées. + +![Phase de découverte](./CurrencyConversion/FXAPI_Discovery.svg) + + +#### Phase d’accord – conversion de devises – connecteur Mojaloop {#agreement-phase-currency-conversion---mojaloop-connector} + +Le DFSP payeur n’effectue pas d’opérations dans les devises prises en charge par le DFSP bénéficiaire. Cela déclenche le besoin de conversion de devises au sein du connecteur Mojaloop. Le DFSP payeur utilise son cache local des FXP pour en sélectionner un et envoie une demande au fournisseur de change pour couverture de liquidité et taux de conversion. + +![Conversion de devises](./CurrencyConversion/FXAPI_Payer_CurrencyConversion.svg) + +#### Phase d’accord – connecteur Mojaloop {#agreement-phase---mojaloop-connector} + +La liquidité en devise cible est assurée. Le DFSP payeur peut demander l’accord sur les conditions au DFSP bénéficiaire. Ces conditions sont exprimées en devise cible. + +![Phase d’accord](./CurrencyConversion/FXAPI_Payer_Agreement.svg) + +#### Confirmation par l’émetteur {#sender-confirmation} + +Toutes les conditions de conversion et de transfert ont été obtenues par le DFSP payeur et le FXP. Il s’agit maintenant de les regrouper et de les présenter au payeur pour confirmation. + +![Confirmation](./CurrencyConversion/FXAPI_Payer_SenderConfirmation.svg) + +#### Phase de transfert {#transfer-phase-mojaloop-connector} + +Les conditions du transfert ont été acceptées. La phase de transfert peut commencer. + +![Transfert](./CurrencyConversion/FXAPI_Payer_Transfer.svg) + +## Transfert avec conversion de devises (devise cible) {#currency-conversion-transfer-target-currency} + +Pour ce cas d’usage, le DFSP payeur indique le transfert avec le type de montant **RECEIVE** et définit le montant dans la **devise locale du bénéficiaire** (devise cible). Un autre exemple est le paiement commerçant transfrontalier. + +Ci-dessous, un diagramme de séquence détaillé du flux complet, avec le connecteur Mojaloop et les API d’intégration pour toutes les organisations participantes. + +#### Découverte {#discovery-receive} + +Mojaloop s’appuie sur un oracle pour identifier l’organisation DFSP associée à l’identifiant de partie. Le DFSP bénéficiaire doit répondre au GET /parties pour confirmer que le compte existe et est actif pour cet identifiant. Les devises prises en charge pour ce compte sont renvoyées. + +![Découverte](./CurrencyConversion/FXAPI_Payer_Receive_Discovery.svg) + + +#### Accord {#agreement-receive} + +Le DFSP payeur ne prend en charge aucune des devises du DFSP bénéficiaire, ce qui impose une conversion de devises dans le connecteur Mojaloop. Comme la demande de paiement est en devise cible, un accord avec le DFSP bénéficiaire doit être établi avant d’initier la demande de liquidité auprès du fournisseur de change. Le DFSP payeur négocie d’abord les conditions de transfert avec le DFSP bénéficiaire, puis utilise son cache local de fournisseurs de change pour en choisir un et demander couverture de liquidité et taux de conversion. + +![Accord](./CurrencyConversion/FXAPI_Payer_Receive_Agreement.svg) + +#### Confirmation par l’émetteur {#sender-confirmation-receive} + +Toutes les conditions de conversion et de transfert ont été obtenues par le DFSP payeur et le FXP. Il s’agit maintenant de les regrouper et de les présenter au payeur pour confirmation. + +![Confirmation par l’émetteur](./CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.svg) + +#### Transfert {#transfer-receive} + +Les conditions du transfert ont été acceptées. La phase de transfert peut commencer. + +![Transfert](./CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.svg) + + +## Flux d’abandon {#abort-flows} + +Ce diagramme de séquence illustre la manière dont la conception prend en charge les messages d’abandon pendant la phase de transfert avec conversion de devises. + +![Transfert](./CurrencyConversion/Payer_SEND_ABORT_TransferPhase.svg) + +## Références OpenAPI {#open-api-references} + +Ces références OpenAPI sont rédigées pour être lisibles tant par les équipes logicielles que par les relecteurs. Elles décrivent les exigences détaillées et la mise en œuvre de la conception d’API. + +- [Spécification FSPIOP v2.0](https://mojaloop.github.io/api-snippets/?urls.primaryName=v2.0) — [définition OpenAPI](https://github.com/mojaloop/mojaloop-specification/blob/master/fspiop-api/documents/v2.0-document-set/fspiop-v2.0-openapi3-implementation-draft.yaml). +- [Spécification FSPIOP v2.0 ISO 20022](https://mojaloop.github.io/api-snippets/?urls.primaryName=v2.0_ISO20022) — [définition OpenAPI](https://github.com/mojaloop/api-snippets/blob/main/docs/fspiop-rest-v2.0-ISO20022-openapi3-snippets.yaml). +- [Définition OpenAPI API Snippets](https://github.com/mojaloop/api-snippets/blob/main/docs/fspiop-rest-v2.0-openapi3-snippets.yaml) +- [Backend connecteur Mojaloop](https://mojaloop.github.io/api-snippets/?urls.primaryName=SDK%20Backend%20v2.1.0) — [définition OpenAPI](https://github.com/mojaloop/api-snippets/blob/main/docs/sdk-scheme-adapter-backend-v2_1_0-openapi3-snippets.yaml) +- [Connecteur Mojaloop sortant](https://mojaloop.github.io/api-snippets/?urls.primaryName=SDK%20Outbound%20v2.1.0) — [définition OpenAPI](https://github.com/mojaloop/api-snippets/blob/main/docs/sdk-scheme-adapter-outbound-v2_1_0-openapi3-snippets.yaml) + + diff --git a/docs/fr/product/features/htlc.md b/docs/fr/product/features/htlc.md new file mode 100644 index 000000000..f00ca89ba --- /dev/null +++ b/docs/fr/product/features/htlc.md @@ -0,0 +1,41 @@ +--- +sidebarTitle: Contrats HTLC +--- + +# Contrats à secret et délai (*Hashed Timelock Contracts*) + +Mojaloop utilise les verrous cryptographiques d’ILP pour garantir des transferts atomiques et conditionnels entre DFSP. Le mécanisme repose sur les contrats à secret et délai (HTLC), qui permettent des transferts conditionnels : un transfert se termine entièrement pour toutes les parties ou pas du tout. + +Un contrat est conclu entre les DFSP payeur et bénéficiaire pendant la phase d’accord sur les conditions d’une transaction Mojaloop, ouverte lorsque le DFSP payeur propose une transaction via une demande de cotation. + +Lorsque le DFSP bénéficiaire estime que la transaction peut avoir lieu (après ses contrôles internes), il : +- modifie les conditions proposées pour préciser celles auxquelles il accepte d’exécuter la transaction (par exemple frais et conditions de conformité) ; +- crée l’objet *Transaction*, qui définit les conditions auxquelles il est prêt à honorer la demande de paiement ; +- crée et conserve le *Fulfilment*, haché de l’objet Transaction, signé avec la clé privée du DFSP bénéficiaire (clé dédiée et limitée à cet usage) ; +- crée la *Condition*, haché du *Fulfilment* ; +- ajoute la *Condition* à l’objet Transaction ; +- et le renvoie au DFSP payeur dans la réponse de cotation. + +Si le DFSP payeur accepte les conditions, il envoie une demande de transfert comprenant l’objet Transaction, la *Condition* reçue et une heure d’expiration, au Hub Mojaloop. + +Le Hub Mojaloop enregistre la *Condition*, transmet la demande de transfert au DFSP bénéficiaire et démarre un temporisateur aligné sur l’expiration indiquée. + +À réception de la demande de transfert, le DFSP bénéficiaire : +- vérifie que la *Condition* reçue correspond à celle convenue (y compris que le montant demandé est celui convenu) et que les conditions de conformité sont remplies ; +- renvoie le *Fulfilment* au Hub Mojaloop dans la réponse de transfert. + +Le Hub Mojaloop hache le *Fulfilment* retourné pour vérifier qu’il correspond à la *Condition* reçue du DFSP payeur ; en cas de succès, il notifie le DFSP payeur (et le DFSP bénéficiaire si demandé) qu’une obligation a été créée entre eux — autrement dit que le paiement a été compensé. + +La notification au DFSP payeur inclut le *fulfilment*, preuve cryptographique d’achèvement irrévocable. Si le DFSP payeur recalcule la *Condition* et constate un écart avec celle convenue, il doit ouvrir un litige avec le DFSP bénéficiaire. + +Si le temporisateur du Hub expire avant réception du *Fulfilment* du DFSP bénéficiaire, le Hub notifie chaque DFSP que la transaction est annulée. + +## Applicabilité + +Ce document concerne Mojaloop version 17.0.0. + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|2 juillet 2025| Paul Makin|Mise à jour après relecture par Michael Richards| +|1.0|30 juin 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/interscheme.md b/docs/fr/product/features/interscheme.md new file mode 100644 index 000000000..ad260dfa8 --- /dev/null +++ b/docs/fr/product/features/interscheme.md @@ -0,0 +1,86 @@ +--- +sidebarTitle: Inter-schéma +--- + +# Inter-schéma (*Interscheme*) + +L’inter-schéma est l’approche de la communauté Mojaloop pour relier des schémas tout en préservant les trois phases d’un transfert Mojaloop et la non-répudiation de bout en bout. L’accord conclu lors d’un transfert reste ainsi entre les organisations DFSP/FXP d’origine et de réception, quel que soit le chemin de routage ou le nombre de schémas traversés. + + +:::tip Non-répudiation +Garantir la non-répudiation entre schémas implique que le proxy ne participe pas à l’accord sur les conditions, ce qui contribue à réduire les coûts. +::: + +La première mise en œuvre de cette fonctionnalité permet de connecter plusieurs schémas Mojaloop. L’écosystème devrait s’élargir avec l’adoption du protocole par de nouveaux schémas nationaux et le développement de connecteurs pour renforcer l’interopérabilité. + +À cette fin, Mojaloop a introduit une organisation participante de type proxy. L’adaptateur proxy matérialise la composante de connexion Mojaloop-à-Mojaloop. + +## Rôle du proxy + +Les schémas sont reliés par un participant proxy, enregistré comme intermédiaire dans le schéma pour les DFSP/FXP adjacents des autres schémas. + +## Routage dynamique des parties + +Cette implémentation utilise un routage dynamique : aucune maintenance initiale ni continue des identifiants de parties entre schémas n’est requise. Le système s’appuie sur une diffusion vers la découverte de schéma pour cet identifiant et met en cache l’organisation associée à un identifiant de partie. + +## Hypothèses + +L’approche repose sur les hypothèses suivantes : +1. Deux participants connectés ne partagent pas le même identifiant. +1. Chaque schéma connecté est responsable du routage des identifiants de parties dans son propre système. (Sous Mojaloop, chaque schéma maintient les oracles nécessaires pour router les paiements des parties participantes sur son réseau.) + +## Schémas généraux +Certains schémas récurrents apparaissent. +### Cas nominaux +![Cas nominaux](./Interscheme/Interscheme-Happypath.svg) + +### Cas d’erreur +![Cas d’erreur](./Interscheme/Interscheme-ErrorCases.svg) + +## Conception de la découverte inter-schéma à la demande +Les flux de découverte se résument ainsi : +1. Chargement à la demande des identifiants inter-réseaux — oracles pour les recherches d’identifiants dans le schéma local. +2. Chargement à la demande pour tous les identifiants. + +### Utilisation des oracles pour mettre en cache les identifiants +- Le schéma utilise des oracles pour associer les identifiants locaux aux participants du schéma. +- Les identifiants d’autres schémas sont découverts par parcours en profondeur en interrogeant tous les participants. Le participant proxy transmet ensuite la requête au schéma connecté. +- Le schéma montre deux schémas connectés ; la conception s’étend à un nombre quelconque de schémas connectés. + +![Diagramme de séquence — découverte à la demande inter-schéma](./Interscheme/Interscheme-OnDemandDiscovery.svg) + + +### Découverte à la demande avec résultats incorrectement mis en cache +- Lorsqu’un identifiant est déplacé vers un autre fournisseur DFSP, le cache de ce participant peut router vers un appel GET /parties infructueux. +- Auto-guérison en cas d’erreur de routage du paiement ou de perte de référence du cache proxy. + +Diagramme de séquence illustrant la mise à jour. +#### Diagramme de séquence +![Inter-schéma — gestion d’un cache de parties obsolète](./Interscheme/Interscheme-StalePartyIdentifierCache.svg) + +## Inter-schéma — phase d’accord +La phase d’accord utilise le cache du proxy pour router les messages. +Détails d’implémentation ci-dessous. + +![Inter-schéma — accord](./Interscheme/Interscheme-Agreement.svg) + +## Inter-schéma — phase de transfert +La phase de transfert utilise le cache du proxy pour router les messages. +Détails d’implémentation ci-dessous. + +![Inter-schéma — transferts](./Interscheme/Interscheme-Transfer.svg) + +## Inter-schéma — GET Transfer +Le GET Transfer est résolu localement pour renvoyer l’état du transfert dans le schéma local. +Détails d’implémentation ci-dessous. +![Inter-schéma — GET Transfers](./Interscheme/Interscheme-GETTransfer.svg) + +## API d’administration — définition des participants proxy +Définition des proxys. +![API d’administration](./Interscheme/SettingUpProxys.svg) + +## Comptes de compensation pour les transferts FX inter-schémas +Ce schéma illustre la mise à jour des obligations pendant la compensation de la transaction. + +![Comptes de compensation](./Interscheme/InterschemeAccounts-Clearing.png) + diff --git a/docs/fr/product/features/invariants.md b/docs/fr/product/features/invariants.md new file mode 100644 index 000000000..1f547116d --- /dev/null +++ b/docs/fr/product/features/invariants.md @@ -0,0 +1,181 @@ +--- +sidebarTitle: Invariants +--- + +# Invariants + +## Principes généraux + +**La fonction première de la plateforme est de compenser les paiements en temps réel et de faciliter un règlement régulier, au plus tard à la fin du jour de valeur.** + +1. La plateforme permet aux participants de compenser immédiatement des fonds au profit de leurs clients tout en limitant les risques et coûts associés. + +2. La plateforme prend en charge des contrôles par transfert sur la liquidité disponible lorsque cela est nécessaire au premier objectif. + +3. Le hub est optimisé pour le chemin critique. + +4. Règlement automatisé intrajournalier ; configuré par schéma et implémentation à partir des modèles de règlement recommandés pour l’infrastructure des marchés financiers. + +**Le hub prend en charge un traitement *straight-through* entièrement automatique.** + +1. Le traitement *straight-through* limite les erreurs humaines dans le transfert et réduit les coûts. + +2. Son caractère automatisé accélère les transferts de valeur entre clients finaux. + +**Aucun rapprochement manuel n’est requis : le protocole d’interaction avec le hub garantit des résultats déterministes.** + +1. Lorsqu’un transfert est finalisé, son statut est sans ambiguïté ; sinon il ne l’est pas et une notification active est envoyée aux participants. +2. Le hub garantit des résultats déterministes pour les transferts et est accepté par tous les participants comme autorité finale (« système d’enregistrement ») du statut des transferts. +3. Le déterminisme signifie que chaque transfert est traçable et auditable (selon limites et contraintes), avec un résultat final dans un délai garanti. +4. Les transferts par lot sont traités ligne par ligne, avec des résultats déterministes potentiellement distincts pour chaque ligne. + +**La logique de mise en place de transaction, propre aux cas d’usage, est séparée du transfert d’argent sans logique métier.** + +1. Les détails de transaction et règles métier sont capturés et convenus comme règles de schéma et guides d’exploitation technique ; ils peuvent être appliqués pendant la cotation par les contreparties et sont portés entre elles par le Hub. +2. La phase d’accord établit un objet de transaction signé, spécifique au cas d’usage, intégrant tous les détails propres à la transaction. +3. La phase de transfert orchestre la compensation de la valeur de détail entre institutions au profit des contreparties (seuls des contrôles de limites système s’appliquent), sans référence aux détails métier de la transaction. +4. Aucun traitement supplémentaire propre à la transaction pendant la phase de transfert. + +**Le hub n’analyse ni n’agit sur les détails de bout en bout de la transaction ; les messages de transfert ne contiennent que les valeurs nécessaires à la compensation et au règlement.** + +1. Les contrôles pendant l’étape de transfert portent uniquement sur la conformité aux règles du schéma, les limites, l’authentification des signatures et la validation de la condition de paiement et de son accomplissement. +2. Les transferts engagés pour le règlement sont définitifs et garantis de se régler selon les règles du schéma. + +**La sémantique de transfert *credit-push* est réduite à sa forme la plus simple et normalisée pour tous les types de transaction.** + +1. Cela simplifie l’implémentation et l’intégration des participants : de nombreux types de transaction et cas d’usage réutilisent le même flux sous-jacent de transfert de valeur. +2. La complexité des cas d’usage est écartée du chemin critique. + +**Le hub de services API sur Internet n’est pas un « commutateur de messages ».** + +1. Le hub fournit des services API en temps réel aux participants pour les transferts instantanés *credit-push* de détail. +2. Services tels que résolution identifiant → participant, accord de transaction entre participants, soumission de transferts préparés et d’avis d’accomplissement. +3. Des services API auxiliaires couvrent l’intégration, la gestion des positions, le reporting pour rapprochement et d’autres fonctions non temps réel hors traitement de transfert. +4. Tous les messages sont validés par rapport à la spécification API ; les messages non conformes sont rejetés avec un code de motif normalisé interprétable par machine. + +**Le hub expose des interfaces asynchrones** + +1. Pour maximiser le débit et l’efficacité globale. +2. Pour isoler les problèmes de connectivité en extrémité afin qu’ils n’affectent pas les autres utilisateurs finaux. +3. Pour permettre au hub de traiter les demandes selon ses propres priorités sans conserver une connexion active par transfert. +4. Pour gérer de nombreux processus longs concurrents via batching interne et répartition de charge. +5. Pour disposer d’un mécanisme unique (ex. masse, saisie utilisateur finale, plusieurs sauts). +6. Pour mieux refléter le réseau réel : les problèmes de vitesse ou de fiabilité pour un participant ont un impact minimal sur les autres et sur la disponibilité globale. + +**L’API de transfert est idempotente** + +1. Les demandes dupliquées peuvent être émises sans risque par l’émetteur en cas de réseau dégradé. +2. Les doublons sont reconnus et conduisent au même résultat (doublons valides) ou sont rejetés comme doublons (si interdits par la spécification) avec référence à l’original. + +**Les enregistrements de transferts finalisés sont conservés pendant une période configurable par schéma pour le rapprochement, la facturation et l’analyse forensic** + +1. On ne peut pas interroger un « sous-statut » d’un transfert en cours ; l’API fournit un résultat déterministe avec notification active dans le délai de service garanti. + +**Les enregistrements des transferts finalisés sont conservés sans limite de durée dans un stockage long pour l’analyse métier par l’opérateur de schéma et les participants (via des interfaces appropriées)** + +1. La disponibilité des enregistrements peut être retardée par rapport à la finalité en ligne pour séparer tenue des registres et traitement temps réel des demandes de transfert. + +**Le hub peut servir de relais pour certains messages inter-participants (p.ex. pendant la phase d’accord) pour simplifier l’interconnexion, sans analyser ni stocker (au-delà du relais) ni traiter davantage les messages.** + +1. Dans certains flux (p.ex. recherche de partie), un point de contact unique pour router les messages liés au schéma peut être souhaitable même si le message n’est pas destiné au hub et ne nécessite pas d’inspection. + +**Pour garantir la cohérence arithmétique du système, seule l’arithmétique en virgule fixe est utilisée.** + +1. Les calculs en virgule flottante peuvent perdre en précision et ne doivent servir à aucun calcul financier. +2. Voir la représentation et les formes du type décimal Level One. +3. Cette spécification permet l’échange sans perte de précision avec les systèmes financiers basés sur XML. + +## Sécurité et sûreté + +**Les messages API sont confidentiels, à intégrité vérifiable et non répudiables.** + +1. La confidentialité protège la vie privée des participants et de leurs clients. +2. De nombreuses juridictions imposent des exigences légales ; le hub doit appliquer les bonnes pratiques pour protéger cette confidentialité. +3. Des mécanismes d’intégrité à détection d’altération garantissent que les messages ne sont pas modifiés en transit. +4. Chaque destinataire doit pouvoir vérifier de façon fiable que le message n’a pas été altéré en transit. +5. La cryptographie à clé publique (signature numérique) est aujourd’hui le meilleur mécanisme connu pour des messages à intégrité vérifiable. +6. La sécurité de la clé privée (de signature) de l’émetteur est critique. +7. Les règles de schéma doivent préciser les responsabilités en matière de gestion des clés et l’exposition financière en cas de compromission. +8. La non-répudiation garantit que le message a bien été envoyé par l’émetteur déclaré et que ce dernier ne peut nier cette provenance. +9. Ceci est essentiel pour identifier la partie responsable lors d’audits et de résolution de litiges. + +**Les messages API sont authentifiés à réception avant acceptation ou traitement ultérieur** + +1. L’authentification renforce la confiance dans l’identité de l’émetteur déclaré. +2. Elle renforce aussi la confiance que le message n’a pas été envoyé par une partie non autorisée. + +**Les messages authentifiés ne sont pas acquittés comme acceptés tant qu’ils ne sont pas enregistrés de façon sûre sur un stockage permanent** + +1. L’API Mojaloop confère une signification métier importante à certains codes de réponse HTTP à différentes étapes des flux. +2. Certaines réponses, p.ex. « 202 Accepted », portent des garanties financières pour les participants et ne doivent être envoyées que lorsque l’entité réceptrice est assurée d’avoir effectué des enregistrements permanents sûrs permettant : + - la reprise système vers un état cohérent après défaillance(s) de composants distribués ; + - des processus de règlement exacts ; + - l’audit et la résolution de litiges. +3. Par exemple, un « 202 Accepted » du hub vers le participant bénéficiaire à réception d’un message d’accomplissement de transfert indique une garantie de règlement de la transaction pour le bénéficiaire. +4. L’API Mojaloop est conçue pour fonctionner en conditions réseau imparfaites, avec nouvelles tentatives et synchronisation d’état intégrées. + +**Trois niveaux de sécurité des communications pour l’intégrité, la confidentialité et la non-répudiation entre serveur et client API.** + +1. Connexions sécurisées : mTLS obligatoire entre le hub et les participants autorisés — confidentialité, correspondants connus, protection contre l’altération. +2. Messages sécurisés : contenu JSON signé cryptographiquement selon JWS — origine vérifiable et non répudiable par l’émetteur. +3. Conditions de transfert sécurisées : protocole Interledger (ILP) entre payeur et bénéficiaire — intégrité de la condition de paiement et de son accomplissement ; durée de validité limitée de l’instruction de transfert. + +## Caractéristiques opérationnelles + +**Sur matériel minimal, la base démontrée supporte la compensation de 1 000 transferts par seconde pendant une heure, avec au plus 1 % (étape de transfert) dépassant 1 seconde dans le hub.** + +1. La mesure inclut matériel et logiciel nécessaires, sécurité de production et persistance des données. +2. Elle couvre les trois étapes : découverte, accord et transfert. +3. Elle exclut la latence introduite par les participants. +4. Une heure est une approximation raisonnable d’un pic de demande pour un système national de paiement. +5. Le coût unitaire de montée en charge est inférieur au coût de provisionnement initial. +6. 1 000 transferts (compensation) par seconde est un point de départ raisonnable pour un système national. +7. 1 % des transferts (compensation) au-delà de 1 seconde est un point de départ raisonnable. +8. Les schémas Mojaloop doivent pouvoir démarrer à un coût raisonnable pour une infrastructure financière nationale et évoluer économiquement avec la demande. + +**Correctement déployé, le hub est hautement disponible et résilient aux défaillances.** + +1. Ici « hautement disponible » signifie « capacité à fournir et maintenir un niveau de service acceptable face aux pannes et perturbations ». +2. Chaque schéma peut définir ce qu’est un « niveau acceptable » ; Mojaloop fait des arbitrages contributeurs : + - lorsque les modes de défaillance le permettent, le service se dégrade pour l’ensemble des participants plutôt que des coupures totales pour certains pendant que d’autres restent servis ; + - pas de point de défaillance unique : dégradation minimale si un composant unique tombe en panne ; + - plusieurs instances actives par composant, réparties derrière des répartiteurs de charge ; + - chaque instance peut traiter les demandes de tout client / participant : aucun participant ne perd toute capacité de transaction à la suite de la panne d’un seul composant. +3. Avec une infrastructure adaptée, des configurations atteignant 99,999 % de disponibilité (« cinq neufs ») sont possibles. +4. Cela inclut des configurations multi-datacenters géographiquement distribuées actif:actif et actif:passif, services et données répliqués sur des nœuds physiques censés échouer indépendamment. +5. Les nœuds des groupes de réplication (et/ou grappes) doivent être dans des emplacements physiques distincts (baies et/ou datacenters), alimentations et interconnexions réseau indépendantes. +6. En cas de défaillances multiples non couvertes par le logiciel Mojaloop, la configuration ou l’infrastructure, l’API Mojaloop permet à chaque entité du schéma de retrouver un état cohérent, le hub étant la source de vérité ultime après restauration complète. +7. Voir aussi les points sur la résistance à la perte de données. +8. Les schémas Mojaloop, en tant qu’éléments d’infrastructures nationales, doivent viser une indisponibilité quasi nulle dans des limites de coût raisonnables. +9. Les pannes matérielles et logicielles sont attendues ; elles doivent être anticipées dans la conception du hub pour limiter perte ou dégradation de service et/ou de données. +10. Les arbitrages privilégient la disponibilité globale et la cohérence d’état par rapport à la performance brute : + + - tous les participants peuvent continuer à moins grande cadence plutôt que certains être totalement bloqués ; + - les incohérences d’état entre entités du schéma sont récupérables après restauration via l’API Mojaloop, avec un rapprochement manuel minimal ; le hub reste la source de vérité. + +**Le hub résiste à la perte de données en cas de défaillances.** + +1. Avec une infrastructure adaptée, le logiciel Mojaloop peut répliquer de façon fiable les données sur plusieurs nœuds de stockage physiques redondants avant traitement. +2. Les moteurs de base fournis par les mécanismes de déploiement Mojaloop supportent notamment : + + - réplication primaire:secondaire asynchrone ; + - réplication primaire:primaire synchrone ; + - réplication par algorithme de consensus synchrone à quorum. + +3. Les mécanismes disponibles dépendent de la couche de stockage et des technologies de base employées. +4. En cas de défaillances multiples non couvertes, l’API Mojaloop permet de retrouver un état cohérent avec une exposition financière minimale. +5. Les transferts deviennent juridiquement contraignants lorsque le hub a répondu avec succès à un message d’accomplissement de transfert du participant bénéficiaire — réponse émise seulement après persistance du message d’accomplissement et de son issue dans la base du grand livre. +6. Les horodatages d’expiration sur les messages API financièrement significatifs permettent des chemins d’échec déterministes et opportuns pour tous les participants, avec mécanismes de nouvelle tentative automatisés. +7. Les schémas Mojaloop, en infrastructures nationales, doivent autant que possible, dans des limites de coût raisonnables, éviter toute perte de données. +8. Les pannes sont attendues ; la conception du hub doit les anticiper pour éviter la perte de données. +9. Les participants ont besoin d’une confiance rapide dans le statut des opérations financières sur le schéma pour limiter l’exposition et offrir une bonne expérience client. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|14 avril 2025| Paul Makin|Ajout du contrôle de version| +|1.0|5 février 2025| James Bush|Version initiale| diff --git a/docs/fr/product/features/iso20022.md b/docs/fr/product/features/iso20022.md new file mode 100644 index 000000000..c490328b3 --- /dev/null +++ b/docs/fr/product/features/iso20022.md @@ -0,0 +1,34 @@ +--- +sidebarTitle: ISO 20022 +footerCopyright: Apache 2.0 Licensed | Copyright © 2020 - 2024 Mojaloop Foundation +--- + +# Pratiques de marché ISO 20022 + +Les pratiques de marché ISO 20022 pour Mojaloop définissent un cadre de messagerie normalisé permettant aux institutions financières de participer à l’écosystème Mojaloop avec les normes ISO 20022 reconnues mondialement. Cette spécification décrit comment les messages ISO 20022 sont mis en œuvre dans Mojaloop en alternative à l’API FSPIOP. + +## Documents de pratique de marché + +* Document de pratique de marché + * [ISO 20022 v1.0 (actuel)](./Iso20022/v1.0/MarketPracticeDocument.md) + +## Principales caractéristiques + +L’implémentation ISO 20022 de Mojaloop offre notamment : + +- **Format JSON** : variante JSON des messages ISO 20022 pour une meilleure adéquation aux API +- **Flux transactionnel en trois phases** : conservation des phases Découverte, Accord et Transfert Mojaloop +- **Prise en charge de la conversion de devises** : transactions multi-devises avec intégration des fournisseurs de change +- **Sécurité cryptographique** : ILP v4 pour la signature des messages et la non-répudiation +- **Intégration API REST** : intégration avec les architectures API REST modernes + +## Souplesse de schéma + +Les documents de pratique de marché apportent : + +- **Pratiques génériques** : lignes directrices universelles pour tous les schémas Mojaloop +- **Cadre extensible** : personnalisations et exigences propres à chaque schéma +- **Soutien à la conformité** : alignement sur exigences réglementaires et standards du secteur +- **Gestion des versions** : approche structurée pour l’évolution des normes et des exigences + +Pour toute question ou assistance, adressez-vous à la communauté Mojaloop par les canaux officiels. diff --git a/docs/fr/product/features/merchant-payments.md b/docs/fr/product/features/merchant-payments.md new file mode 100644 index 000000000..cae55cee2 --- /dev/null +++ b/docs/fr/product/features/merchant-payments.md @@ -0,0 +1,37 @@ +--- +sidebarTitle: Paiements commerçants +--- + +# Paiements commerçants + +!!!! **TRAVAUX EN COURS — SERA COMPLÉTÉ SOUS PEU** !!!! + +## Place des paiements commerçants + +Dans l’univers Mojaloop, les paiements commerçants ne sont pas intégrés au Hub lui-même : il s’agit d’un **service superposé** qui s’appuie sur les services du Hub et fait partie du progiciel open source Mojaloop complet. + +Côté exploitation de schéma, un schéma de paiements commerçants peut être proposé dans le cadre d’un service de paiements global par l’opérateur du Hub Mojaloop. Un schéma distinct peut aussi être opéré par un autre acteur, en collaboration avec l’opérateur du Hub. + +## Concepts + +Les commerçants doivent être enregistrés comme tels dans le modèle Mojaloop (ce qui diffère d’un simple enregistrement « entreprise » ; le modèle auto-entrepreneur est pris en charge). Les données KYB sont saisies dans le registre commerçant et un identifiant commerçant indépendant du DFSP est généré. Cet identifiant peut être affiché sur place pour des paiements USSD par des clients avec téléphones basiques ; il est aussi prévu pour être intégré dans des QR statiques, scannés par les clients dont l’application du DFSP le permet. + +Le modèle repose sur un paiement poussé P2B. La résolution d’alias du Hub Mojaloop associe les identifiants commerçants (extraits d’un QR ou saisis en USSD) aux comptes commerçants chez les DFSP participants, sans exposer le DFSP ni le numéro de compte. Avec un QR, les bonnes pratiques recommandent d’afficher le nom commercial du commerçant pour vérification par le client, de lui demander de saisir le montant et de s’authentifier (ex. PIN) pour autoriser la transaction. Une fois le paiement effectué, le client et le commerçant reçoivent une notification ; le commerçant peut remettre le bien ou le service. + +## Enregistrement + +L’enregistrement commerçant est prévu pour être réalisé par les DFSP, dans le cadre de leur relation avec le commerçant en tant qu’« émetteur ». Les données sont conservées dans un registre commerçant partagé, tout en conservant la relation DFSP–commerçant. + +Les données saisies lors de l’enregistrement + +![Schéma entité-relation des paiements commerçants](./ecosystem.svg) + +À l’enregistrement, une quantité substantielle d’informations est collectée dans le registre commerçant. + +Adressage : +USSD vs QR +Registre commerçant — lien avec les LEI +Création d’un QR (référence EMVCo) +Personnalisation du QR — conformité aux standards du schéma ou du pays. + +À venir : lien vers GLEIF diff --git a/docs/fr/product/features/metadata.md b/docs/fr/product/features/metadata.md new file mode 100644 index 000000000..af325a738 --- /dev/null +++ b/docs/fr/product/features/metadata.md @@ -0,0 +1,22 @@ +--- +sidebarTitle: Métadonnées +--- + +# Métadonnées + +La nature même de Mojaloop, en tant que switch reliant des DFSP, fait que le Hub ne peut pas attribuer de sens métier à la transaction. En revanche, les transactions peuvent transporter des **métadonnées** en complément des données de paiement ; le schéma peut s’en servir pour rattacher le paiement à des opérations extérieures à Mojaloop, favorisant l’interopérabilité en conservant le contexte entre DFSP. Cela vaut pour un paiement poussé ou une demande de paiement (*RTP*). + +Les métadonnées décrivent, contextualisent ou gèrent le paiement au-delà du montant, de l’émetteur et du bénéficiaire. Elles ne sont pas strictement nécessaires au mouvement de fonds, mais elles sont essentielles au rapprochement, à l’automatisation, à la conformité et à l’expérience client. + +Au plus simple, elles permettent par exemple d’associer un paiement à une facture (ex. facture d’électricité), de transporter un numéro de facture avec un règlement B2B, ou de préciser l’objet du paiement (« Scolarité T3 2025 », « Salaire juin 2025 », « Remboursement de prêt », etc.). + +Lorsque ces métadonnées servent à l’automatisation des paiements, leur « signification » est définie par l’opérateur du schéma et les DFSP participants, pas par le Hub Mojaloop. L’automatisation est en principe mise en œuvre dans le cadre de la [personnalisation du Core Connector dans les outils de participation](./connectivity.md). + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.0|16 juillet 2025| Paul Makin|Première version.| diff --git a/docs/fr/product/features/ml-feature-list.md b/docs/fr/product/features/ml-feature-list.md new file mode 100644 index 000000000..5c4dd9430 --- /dev/null +++ b/docs/fr/product/features/ml-feature-list.md @@ -0,0 +1,116 @@ +--- +sidebarTitle: Introduction Mojaloop +--- + +# Introduction à Mojaloop + +Mojaloop est un logiciel open source de paiements instantanés qui interconnecte des institutions financières hétérogènes pour favoriser l’inclusion financière et une gestion robuste des risques pour tous les participants. Il est disponible pour quiconque souhaite mettre en œuvre et exploiter un schéma de paiements instantanés inclusif (SIIP). + +## Point de vue des régulateurs et des opérateurs +Mojaloop fournit les fondations pour qu’un opérateur mette en place un système de paiements instantanés inclusif (SIIP), en s’intégrant à un partenaire de règlement — souvent le RTGS national, d’autres mécanismes étant possibles. Ainsi, Mojaloop permet d’offrir un service complet d’interopérabilité de paiements aux institutions financières (IF) participantes. + +Une fois déployé, Mojaloop permet à l’opérateur de schéma de : +- intégrer, suspendre ou réactiver les IF participantes selon les besoins ; +- fixer des plafonds de débit net par participant pour piloter risque et liquidité ; +- choisir et exploiter le modèle de règlement le plus adapté aux exigences du schéma et nationales ; +- définir plusieurs périodes de règlement dans la journée opérationnelle, la clôture de chaque période générant un fichier de règlement (selon le modèle retenu) pour action du partenaire de règlement. + +Le Hub Mojaloop soutient ces fonctions en : +- traitant en continu 24h/24 et 7j/7 les paiements entre IF débitrices et créditrices ; +- mettant à jour en temps réel la position de chaque participant à chaque débit et crédit ; +- validant chaque paiement (liquidité suffisante, respect du plafond de débit net du participant), en rejetant les transactions non conformes ; +- mettant à jour les positions en fin de chaque fenêtre de règlement pour refléter les fonds réglés. + +Mojaloop prend aussi en charge un **modèle de participation indirecte**, pour élargir l’accès aux petites institutions — notamment des acteurs non bancaires comme les IMF — non éligibles à une participation directe au RTGS national, tout en préservant la stabilité financière. + + +## Perspective technique + +Pour délivrer le SIIP décrit ci-dessus, Mojaloop met en œuvre un ensemble de fonctions cœur : + + |Résolution d’alias|Compensation|Règlement| +|:--------------:|:--------------:|:--------------:| +|Résolution d’adresse ou **d’alias** du bénéficiaire, pour identifier de façon fiable l’institution détentrice du compte — et donc le bon compte bénéficiaire|**Compensation** des paiements de bout en bout, avec des garanties qui lèvent tout doute sur la réussite d’une transaction|Orchestration du **règlement** des transactions compensées entre institutions selon un modèle convenu entre elles et un calendrier prédéfini.| + +  + +Ces fonctions s’appuient sur des [caractéristiques distinctives](./transaction.md#unique-transaction-characteristics), qui font de Mojaloop un système de paiements instantanés inclusif à coût maîtrisé : + +1. **Un flux transactionnel en trois phases** : + + **Découverte**, lorsque le DFSP du payeur collabore avec le Hub Mojaloop pour déterminer où envoyer le paiement et éviter les erreurs de routage. L’alias est résolu vers un DFSP bénéficiaire précis et, avec ce DFSP, un compte individuel. + + + **Accord sur les conditions (cotation)**, lorsque les deux DFSP conviennent que la transaction peut avoir lieu (avec par exemple des restrictions liées à un KYC par paliers) et à quelles conditions (dont frais), **avant** tout engagement de l’un ou l’autre. + + + **Transfert**, lorsque la transaction entre les deux DFSP (et, par procuration, les comptes clients) est compensée, avec la garantie que les deux parties partagent la même vision en temps réel du succès ou de l’échec. +  + +2. **La non-répudiation de bout en bout** garantit à chaque partie qu’un message n’a pas été modifié et provient bien de l’émetteur déclaré. Mojaloop s’en sert pour n’engager une transaction que si *les deux* DFSP payeur et bénéficiaire l’acceptent, sans qu’aucun puisse la nier. Aucun tiers ne peut non plus altérer la transaction. +3. **L’API PISP est exposée par le Hub Mojaloop**, et non par chaque DFSP. Une fintech se connecte au Hub et accède **immédiatement** à **tous** les DFSP raccordés.  + +**Note** Dans le vocabulaire Mojaloop, un DFSP (*Digital Financial Service Provider*) désigne toute institution financière, quelle que soit sa taille ou son statut, capable d’opérer par voie numérique — de la plus grande banque internationale à la plus petite IMF ou opérateur de portefeuille mobile. Le terme « DFSP » est utilisé dans tout ce document. +  + +# L’écosystème Mojaloop +## Le cœur +Pour lire ce document, il est utile de connaître la terminologie des acteurs et leurs interactions. Le schéma suivant donne une vue d’ensemble de l’écosystème Mojaloop. + +![Écosystème Mojaloop](./ecosystem.svg) + +## Services superposés +Autour du cœur illustré ci-dessus s’ajoutent des services superposés, eux aussi dans le progiciel open source Mojaloop complet : +- le **Account Lookup Service** (ALS) et des oracles utilisés par l’ALS pour la résolution d’alias ; +- des **portails**, construits sur le Business Operations Framework, pour que l’opérateur du hub gère le Hub Mojaloop ; +- un module **Paiements commerçants**, pour l’enregistrement des commerçants et l’émission d’identifiants commerçants, y compris la génération de QR scannables pour initier une transaction commerçant ; +- le **Testing Toolkit** (TTK), pour simuler tout aspect de l’écosystème cœur Mojaloop et faciliter développement, intégration et tests ; +- l’**Integration Toolkit** (ITK), dans la bibliothèque [support de connectivité](./connectivity.md), pour le lien entre un DFSP et un Hub Mojaloop ; +- l’**intégration ISO 8583**, pour raccorder des DAB (ou un commutateur DAB) au Hub Mojaloop pour les retraits d’espèces ; +- l’[**intégration MOSIP**](https://www.mosip.io), pour router les paiements vers une identité numérique basée sur MOSIP plutôt que vers (par exemple) un numéro de téléphone mobile. + +## Liste des fonctionnalités + +Ce document présente une liste de fonctionnalités couvrant les aspects suivants de Mojaloop : + +- [**Cas d’usage**](./use-cases.md), pour les cas pris en charge par tout déploiement Mojaloop. +- [**Transactions**](./transaction.md), pour les API Mojaloop, le déroulement d’une transaction et les particularités adaptées à un service de paiements instantanés inclusif. + +- [**Gestion des risques**](./risk.md), pour les mesures évitant tout risque de contrepartie entre DFSP d’un schéma Mojaloop et protégeant l’intégrité du schéma. + +- [**Support de connectivité**](./connectivity.md), pour les outils et options d’intégration simple des DFSP participants. + +- [**Portails et fonctions opérationnelles**](./product.md) : portails de gestion des utilisateurs et des services, configuration et exploitation d’un Hub Mojaloop. +- [**Frais et tarifs**](./tariffs.md) : mécanismes pour différents modèles tarifaires et possibilités de facturation pour participants et opérateurs de hub. + +- [**Performance**](./performance.md), pour les ordres de grandeur de performance transactionnelle attendus. +- [**Déploiement**](./deployment.md), pour les modes de déploiement selon l’objectif et les outils associés. +- [**Sécurité**](./security.md), pour la sécurité des transactions entre DFSP et Hub, celle du Hub (y compris portails opérateur), et le cadre QA en cours pour valider sécurité et qualité d’un déploiement. +- [**Principes d’ingénierie**](./engineering.md) : respect de la spécification Mojaloop, qualité du code, pratiques de sécurité, schémas d’évolutivité et de performance, etc. + +- [**Invariants**](./invariants.md), pour les principes de développement et d’exploitation auxquels toute implémentation Mojaloop doit se conformer, y compris pour la sécurité et l’intégrité du déploiement. + +  +## Développement continu +Aucun logiciel n’est jamais terminé, et Mojaloop ne fait pas exception : nouvelles fonctionnalités, API, portails, maintenance, vigilance sécurité. + +La feuille de route Mojaloop priorise ces besoins dans le temps sous forme de workstreams, chacun avec un responsable et des contributeurs. + +Vous pouvez consulter l’état actuel des workstreams et leurs derniers comptes rendus dans la section [**Développement en cours**](./development.md). + +# À propos de ce document + +## Objectif + +Ce document recense les fonctionnalités de Mojaloop, indépendamment de l’implémentation. Il vise à informer les adoptants potentiels des capacités attendues et, le cas échéant, du fonctionnement prévu, ainsi qu’à informer les développeurs des exigences pour qu’une implémentation soit reconnue comme instance officielle Mojaloop. + +La Mojaloop Foundation (MLF) définit comme instance officielle Mojaloop une implémentation qui met en œuvre **toutes** les fonctionnalités, sans exception, et réussit la batterie de tests standard Mojaloop. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.5|4 décembre 2025| Paul Makin|Ajout de la sous-section « Développement continu »| +|1.4|28 août 2025| Paul Makin|Ajout du point de vue « Régulateurs et opérateurs »| +|1.3|23 juin 2025| Paul Makin|Ajout du texte et du schéma sur l’écosystème| +|1.2|14 avril 2025| Paul Makin|Mises à jour liées à la sortie de la V17| diff --git a/docs/fr/product/features/mojaloop_security_layers.jpg b/docs/fr/product/features/mojaloop_security_layers.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d70949b685a0a584fd39afa20a1a3262e7dfab3b GIT binary patch literal 167614 zcmbrl1z227wl2JZV8Mes!9BQZaJS$Z+})iJB*EP!1b24{K^k{&B)CJMamyw7X70?r zGiUDk|5N=u-L==d*1J|!SM6Q4e=Yp_0ierD%18oGP*8yM^9T3^2E=|}{g2XblK&CG zZ{uIz0SpAFR+upuC=37^0}2KM>Q^s70zd)K&@j(9@b?6d01F5G0ucu4 znP?oiXFPUZA9G#f&U-?$+xfm0GjUn#`nBZ+0|W z{gX2|V175lp`_-tAPK^eSK)IT+sRCt z?m+V($?Df@*u)wJlZ=V!DQ#knf=Nbt^whSuvS#^4S2gzcl|wS-@_syfU?}XPoI}Z0 zYg-b>r8aSM{LfBdeHJKnn(Afe58v*Nwoaq|lQtCO{vgT$6SR4}JDF?X5cp5fzh-YA zFGa3TKE|`QjyBJH`9J$bL~VvT{wht3h%2hsN_n->zgqu8!WofSl%+}|y%vR(V=C|8 z{14=J&h7CXWJ+{z7`w86j>aJR{{)}wn`YVdWdZBA3C1X_Jwob|sMear8s0%&#nmHI zLsp$)Z_ja)^KXB%BG0S@%QRUHPu^^%vtb?oUHmr`mUG#>(jkRZF(mLW2{hm0#ZnHN zNbHLQOetNVoUo4mBcA1vtP=Y)??Tp`Nx4#hvLE0W|7b(}?em!ydmtKcmWtw0t(7EZ$A^qYn|JK@BK4X>H zn@ceqkn8>e76699!p|cYHM2`^eGZ>r_XhyHT&L|Z(6~ZFG-A_=eYT?6Th+YuiMn4i z?c4dwDZ^Yh#asN*gF8##r@v_b>06X{^se2Ojq`D$<>-$Xz3?9YmUmGPsc_eA0)86Q zl~aY53#8Pi!OumrogN<=EQtUwA=Kg|GFJhBtG%5FVSh)xf;Uz|%|>mOcYPby2|eZf zxS#CBx3mjhiUlExNAzLstv}QVn1W;?Ew^xYdwLK56vAIwD7anjR!Ft<{HECMkKZEn zr(BhB%C0cJDTSw0p6V1t;PDvYPWQt9-u<=;jCKrx!37{PT+ z&@1TzmykW@e#G3JTsMH0(&}_ISp2NEIlP+-KzG=(aVRB$D^C(&1D}mpaZ^um?t35x zd`p}F&=9+ItYc=r|XH*GU*@|dCmK$#fths~2PJ;H56_FzW*Yc}W|cpvpOq2I1&oTfC8`!!3!{y<1&|)2@)j&pS~G zxaok~fyy+yPJc`M_si0WQ{~phGq2+=lp4tG5kTMD^+J0f-JwD?pJB4O;Z%3|#FMGu zdW)vBpI455B&*=)kx0&`5XlTc;l{1eRG>ErI;%AwG>KlRO&@t|?w#5hB=vu;4ajwV z3whv03Jm}}bAYuB0_JL)wQ`&%+#)+Mq2l`h;L;}AXKY%Wy_g`|!tf{f0`vU7#2^q5 zVwz!?5PoB4L-#>osMY^brfAIc_uq=7hNjqAcDC#FOfJqh6C!Vd8n-{)0w9jtM%ZH| zjXgYi0q+JAav(U`!qdv5M&6fp=gA)FbDD@9hu|312E;0{_)ej{!Pde(IIf+3dN9RP zl8-VlqHS8Bpek~tRt}W1W5FiX4V>Q|J~yi9206PjjB2af4iC3)M_Pwv4A^)hI_4gF zX|7geP)OEO3cQhb>=hf$fD-tloIRz#|Mv9{05znqC^R5T5R|4nWmzvd8;ZbOP|>^U?l({+&-k z{(d)p@MDI8{zCqpK}9B9^e|{{IXYR605n*7`O&C}HWq-jPyA9v$u9@_3AG2$<<{lC zny=lomr9h(Tr0;?s5*7EA-aN5V%~69#M(^;@Os^!2=DG5pq>UUhNX6x^}gG2-W35b z%e`p!GEi$8-`BMzBbm?FdisH(>eTn0k$(TdP)9k)Pf-f3$e943j(6@|>HV(f##zWA zM{1P}zb(__tC|DRV}}~>JHgc?e(TqjjJQGTiR-=1F_P!AO-g9!{DT3-PF-(B_>-t~KtQo(D+gBEDI`47Y;@OPiNy=q z&^*ez=}mWs&dfK!J8B>cWN9oj003XBiwtfTU7|;(nx{_~`8wPElsx~i+`s!;&ZjKEE2`ysp<@@e z;YjOf;*UNoM({mJpuu{Z0lifd4)J*Q+3Mc#&BKM6S6H`3;{~BwV%5cAUmL2_3xLGt zQVMqlu`N3gmjrnqS$~zePywANsKTy}If4p_3VS5B^A>+UZN`-o%6eHR_L@JZn( zIdi#Ijv>1@fpm5Z#_<4%Wuo!Me&cWNJxf^kric(J`T_v}HzoVd-6MKi8GwGd^$VEv z#%lr}*J9v^!SWklDSVEaC0hKNRzz4McZCl|`m|)xS@Q66l4LbVU;14lYqfa<5ybcUIXSHK$(k6WP+v7a6ltvyscd1O?@ zk5^YoWJ7oM*J{+3Xz+3U0DRtZ_xyEPc5A+u)qEzCYGF74ytpQkRm%3}#;N71YS9?f zcs+masSE(#zkuGHFUfFRDbEjQ2fPbAzd6e6sx^E=?58!M%g!5+PeH<&ZVhD3WCcx{ z`iXNuqyA6ya9L?{Uq@r)4}9-0e0MJ^Jxgltiwe}rTJ8(3?vgI)koeyx|5eNaRtGsz zzOA6M`%S8irnTM9qEbK7cjpH5S3*9gv-KAr95xk4Wyzp+m6V)Tu=nhB0qMKO&B9&I zm3f$2rL+2)3y9V|=$O{RC;D~80WSauN^U7`Hz_xXex{gssM>W4)-bu9YTSc}04T#W6|1){ zNwwEpf0@H*4;g(G%#ql<{sH*y&;G7FCabu=Fz5o1+Of|x)lYzMPFJI&c8$^0W-$<$ zb-p1*5f<%w!y|9y1k3uu=d(PS|&QoOy%1X8#`oIbO3-~hdp3RvY0gQP$SJD)^R%$+DBWm zf_^!)tQ80l`TOObd1zhi>nXLFDjB;syJO6m9;}zh&$~CrezzCCSPt7pB#RYi5pDXl&X^n6cvzxKw1wa*5CG1>l{W_Y z3Ib2?=24^5L9LQ}OB@Sr_LG;9ooKMJ{pRIt{9Fv&znjHZjEu=EVpFKS9F{BC0{Pn)Trk+`+S=(&`c%sytbGHGF%bg zESwNO;@{mAKSu|@JKlPkty?0yA=r0(2S;Py0N#QFV8*lpYTa}NuB;o`)(3s}2@ZA3 zr6ObfP!exp#t;Kz`hD7CtQn}0d<(x|b(9oCGfd#8&+Z>8Y-fwJh&hDc zf%jKMK#As6*0ic}a~!4I5VRz29V$c|iabNGV(Bfr!(%P$YvWZ7d{fL-O;Uu48RmIj zmCqGK2u~n4Yi|%t)$t}^!d+0!?)&cHNEQZiRK;4gfYjYkzbCNg{OOrQm>O7dOqwrR87{PifnjL9*U>81@=cH9yM&OBuyy9{?uTb`d63 z7pNj%8qw6ZZg8W&kKJX^{Crr&_x=ggd0s_hi|ZNtr`S;MIAkCe?cEDeouolkwao>5Yv}slN>sE2r_-^?RSLKu~|Bj~CnSf87H5mY4ng>yP`waSZFzkbWJ}cnKJ(vk( z+|Ct@{6v1!(ceXo4J@#x=@R40&r>7swPE1P3s>d-A%bo&ZE^Rg-Xpq>3PZF>$aPZE zUgky1GLt_E{f*<5`P|`SUz%mDd_k--kGu=8Eqzi;v@>U@{3i5nq={6QNXf{pWJOuJ zti0TP9Yu*y{?9@UaR9bux!DYa+Ml}y9LdGNtdvXxMhzRAUijk_DyF5b7$PM!V^x-u z+wzj>Kr7M?R9V-s!OE@#^2IF!*jJUv2psxeh>&Wcbfha1&$95Q}ZLHWY!^8vs3W1LsC!H%mvuDkOi_zTSd1&A9zo+hhDLj8ev$cG_ z}<4pb^<)!X#`kuVk&093+tAU4dbD ziMsVF$=~GiG}Mp(Dj;+S0+k82iB9$Vh{70_RBB|VFoX4!jQu=F$J{w=IlJRbDsl@*^2|U|Jz@b5t3Chvm_^LXA10DAAeI zo2R#79}Ro^Tl2q6=ph#<=c?0(R$ipMyv%bd%XIdBF)2JTo|fnBE(MyCLc*2`$!diV zv4FoQ2&j7fQ1rk1uHHVBBtnuNeEYro9PgDPwm?>#cJJIzn!vUxnK>5Q6aS^hX8?+H zSxUD8Ww+t{u;8Gdw)jQlvM=O^oYl<@-O22a0 zo~cqY{ak9(IuAznSQ0eMW(;B4Jh%X05D&(=cYdOQvWvhf;9HNoJ6MN77vgY`Yl_K# zjst+J(p39Yxqc55v-b_aI@n>}yS;balf@FcA{e@D%_u&;4BZe|e%LyuDo+u!U+*N@ z8&7P!5v`K8&393QUAxr{D9Q?Auu|g`EYrP=-ltoQ(DrdSOL|_j;ZJSaKKS_6iZSp% zRmAhKUd#j8yxqc7&WjdGtCHdfZ8#vTl-JEi#g4+oyG#>fCPqon&}QFLqVW_$!#4>& zgw=l~b(?zhP?inx%k}9o^4s*d^BPlXe$$u?m%QEXIT8qu8$Px3W@YbG+W|lJKYIsY z3J$(gw}w;6Y1>fk(*8ra``!G{&Yyl&+&*?pz5fvZ`y34EAz}D+*dzn!yf43N>DK-4 zYRDGlnrg?H+HRPNTx$QZMf_!9L~qlDjWBe;lvF{ryc_xRFDZ;dMZQ`4_Ig>f>bC_~ zt-q81hhKQL;~dS|d=)qJW7o!&q3E+!NWh;?2oS6&7}K_gZMX5Jylsx&2J@!=2bzC^ zB2SFh;-l5ZbY-jZhPbBM%?y|`7c`M z$yFo1JISzXd{(u^LOvfUvEwe6ZTqGrznCPxHLI&9^{QFd!% zNE}4|mG^%xu~{u=7qY+0v2yL49QA7N^{$^4T5wyXtioTGDwD6uXg4g=+s*iIbdkS8 zDO2Cv+|t+7eY{o0uPD`~CtT4l%T=hq%8YN6a0=Evhp54x67MNwE-w1~cVm~h*>HJ}6c=ojwM* zIi5V)q{O=Oy(ajPfvPTaNNp-@OLaX(_M~6KRdYyN){X{_5S2)A6(p_LaOP?i|1=^B zV^lx^YRX~26_O+|#p8ZMRX{VgH7Zz1eQvmZDcPi5-e@GG6W|N9a@}DN@^ClcD78o@ z5Ruc_?LjZPudhby;eWyT1+WxU17|lGixVF@5*HmmcDZnEpadJ83yp=mF&4B>ni=dm zU}r|9=8pD&-=wCLNgcBihta01x=IgezJ7h#TE$n!se5%#_<1QA>B?lYV}c`Dbqc2H zqhZwY) zY0D=g(rK8{(r}7(br-C#W>;Mwq#mZZ5>iuJu`dF%W!x75CoFn>`wK9Aqmspdx#~cX zn>%&PgniPucdP@mUvGYFo`0z3{i2xBTjEDTAeuy-PH~I2qhC#Vb6O*ICiA_4eDOpz z0a!u{f!Qh&SH3R-2iZRYljKsLy9zy1f%jZ8UC@1U>yg7zAKBr$d|kw`V-}+|BS~X!yuk9O}m}mx=6Tw$P?V5UFTespk4fI_m+FQ<%H2WiHOlLRTj+{L|{6Zq3~a2PFFe*t~M)+aS|Fcz0-1~XveyUUj+%UmnM*1QUB{K4|s zes6tJiFHjJ-Iwh{R0#9+K7Zz++(AbZ+@GJIQvC&yEI4h8Wk1uI<+^uA6hHPFr z#H>&B(;PxjLb@Ez+TeAgJR(2U4EE9;MP}ka6G|>KE4Hwi4hQ)1PQy#9FKgSD^TtU_ zUKljKkkAt!QetJFmJgsVNtLmL`*BYkQXQIyB0B%EDE=2fa`TbyNQYtF2(}|Qp?VuH z3=PXTW6>^U&0w3GZOAz#RkAkvbOCiC@rO(TxoLD?hFwQEcrlz>JjI6_c@PxHgPHj$ z&GdPfysM9?-#8ABJug1&@CbK3T=a4SO6GYvcA%3S$p@oq^)np9A#Y=!DvosG6vPKp zlYYuEdLR;pb|a|KotO2zCt<02L_#Z8j3p-OSiqeA<}1|>G1XGV(BG_q0H$ zAU|HO0Ce0E(iwN_6v7bn%gkj7%8>c}f^?+o>V`1wKKn7;2x_7Q({)R0f})p{Vl8&c^lY~;tVcv23-60mT7qA;&x~5iP zV`3MoI^LoAoO+6Wd6Iz%#UrEk^T-FjGWjs~UN(z}Wbm}tMZ?eg3z7nEZS_jDPh&->oDsS8-^=s1g>qwvz#7|Zn z$4x;`O;AnLXc%=yOopN7r?W~fIeJy-%+}aCSTClVMg-r@qw99?DS5>>C$fY~0+cN& zgL~DR7SFU$yO=)qUE`Ik`FK6dS~xOYsZHtK)xOEgs^v(#P<;)OnCj&r3nSBF$hi1s zO;Kj!Vanxk%BK90m1S;*i}^4GjdhQ^bjnnH1%H7w=oM?c*GS@7^o!+o-p$>pggz~E z3dT1llA9#aY7BYs?rq!?OYI(_e3DShaX7+ZosAa@R<#3bB%ftb=u?mSp2xGgmgvd^7)! z2w`pi#uPUTY*G2SY~$IkzY?};kQ|rG6%}0(ny@s7P#{%OxC?q<1 z6E9qRGSBu4&`MdWwwSx+te_jxm%Z`#5ukHx*tRd=m7QuQWxm05TC>*`4ASdj7LMu9 zCMEG5@n?bf-aPf)`MIE1SShO3R|(ty-Ka6Mz{&tIL#4MwM_+MelfEmXX6@!q>E|y1 zsKwPuaZ_uQ=u|b|d@EySpZa!!s+#G-0pc4II}`|!dc=0eBn=S7!L;&w=+_Z;+Rc=&$9f@8}BKS&A(zo z^J;uT;d|%bHJxT;%kbr6GfDgWO5`M zgy@ss39=EI%gZlqr#v}#(%MkFThVKC-3}0X}s{huD3NBXFO z|6aqm8nPU6=U$*}B_5YOwbaWsQ7Nf)l-N0Ijrqo;2yi~TucW6P19Qz<3xUB)%rsm| ze9r-e9u(_DWTeS??;A`!Qd-R0ZRh}jT&3Ma#E0`B;cR6Z$k2-?EW(fCkKObF_!3tK zuF}(*)D>13-rH!jbLJe|N4Cu>6tOmXf#dZ(2bVxE55HCgPVm2D@e;`y|1TW;4Z^o| z?q?PbM(=5LkFJ_G;ha2!9kg^1x^$3`Kz(PBHh&VLsP zdT^xaN{$eEBfGAXF0x64_UwhLoqe#@G2{OGQ>G9ScEqIj75t_o^=g1v?4@xx-rwrs zAKtj$4qUnjhRqM>yv=3VjK||F`Eg}3oG$n%9m5w#;zll@Ey^}La%_Xh6CR&wU}zsx zdm#FAx#met)0s1to zQcKo0XW-!{b`rmOgTX+woT|J7#&g_r8;roQ;msC8lQB?pnnHuh_r4F@ zPVqqF{?@^ql)!ZVqf3yzP?MW>!@a(@V)m}g^m2ZbEcA{?g8a3|erm(_s`a*zC(n*S zufA#csm~90Du#jIOT$?Vxp-mQj%trmLP$m5@-KaSSKTFwCupW{#alDYC6Id37vL*> znUHaHr3g*0Y>^vI(vp8|&sv{cb2KTrOr_Mlz-^#?rSpSZ$L2zJ_O$Wo#}_lgBseUm zNxwJ*!{Wy0dmK21_}1YQ&O-BJhI7Z{xd${X<#KAA_VqzR;Tm-`r@5D^ z$B zOhWRK3U6R+QQ1jmD=jt;=Vt+f0Vi>dbuy*6AO&{B$xXkenIix z(3RXs6Qil2JS$zh%J!wMfrlkcbHfEFcW(+BI$2%CX^C|x+|oV;KG_E?`;CrU)EX96 zQLXj&8_Owfbo-8#SGA@_pNL7}{6Y^CdCD)nBH+=;zJC*<$)AAcr`4V?LrGgFyi2*+ zTf~c~4vL27IsahiLN|prs2uagm@%&R`@&0kD6>Qp)LvSmSQ9$KFi^L)w;XG#@@C8@ zaDxg1c{a6HYqh}&mdG;RIplangp{Hw5+;ul->#q=y4wwJBT zFI2~3i1J^M4eLi^blh{ zjIv-d$Zz1~ifhy-4nxvN(@;)NiNId(HZ<)^hN{{JkE?Mu@l5{(bZX4xk3smF@Oiss zpz3!6uf9=v)2ASTn=D?=)HR;|4;Hf+)C$3MsWXsp0lWtXDP~(O*6ii?UoFC_ zbh0T?2?2RwIIET=x$j{_zKT8FKZ)_;ttC=Cd8{Xqy{bFfa<`!8+D9WMTMzBNQm<$u zxpQ)_#3bTDA;tOV`*EPmU z2O3(NtfI%sJYGl$2feQ{yCf)meLrb#w^9kmx{kF6yTUe{`Hk9XiL9$=4)Apb(^>@< z1@pdmAQ@yOm#>blm!OkRr+d|KPGy)lNv{`HzOZ^Mm+gvv_KuZG`P$=-Zx}q}Y7Rkh88k1-5NWw8c>hl)Kr0F_7(GxgHgudd$ z!)UW+ABi4B%twGn2PR)HKL%+`mbXE)S7;;gc=?5uf^#Tf`7M}IP5C2m1n@d1S*TfS z4q3Io$DXW^{`9eUGRa^WVL>b4`e|%(xqxVccwdh@(lPU{zQZF}NH?WCizQ|K&joNZFiRFsj9!klkwS|#b0kM`4(pw)lA;Z-?Y?4)@1%owL$ECVLd8BOY zO?Gl68O{(lYsw-Qc2y?dDEgpp_5nm%XBA3qt2p<{+0DPxcYU2|NI(^AwO;=nn;Y>g zfcOJV8k^a>=KiIn;saO0uC?t0mEwMELcv<80wS^9_70!%!4s zmFWb)N>*^xwi-it_Jz2gM_KqApBur)1+qBbpYI1puR3WbH)q;H(IxWaBZT4GN929I zY@v!hJp+S9`|r)=rKcS~VZ5N!w*M}b*7N*GG}z=Ah^xiy;T8Z8eunJay9U;5J0fBt zFp@_vyiFvLMbvtl<_EN<2949QfsZ_ATaP^%&uazi-QmJeM<-6yl_{yl%rYv~TbG}c zKjPqlG8A6XL4W*#APtaox#YaV>QmpYDmpb9^Lb%piyS|YM1v=Q;DcyxZau%QRHo4q zLzU(i9QieODO)*#Bn3^v&KD1)TU>knD zb)RArKq?UM;@eZ0zeZz`SLm)=>!MNo14^-8IR?)~sU*+Q&sr`azS5|_1chVmMVRXisi#-BkaK2%|kz&A=daqRDH)JTylk5){RDd(R@#ZaE{96*!q*k=e#x$y+Tr!sQkxN5@SnV(4ea+pv)Jk!k?Li~P3I6Vl8#r*(X15+dUB zn*Q_4P#CY^Ujvv}{ zR(q#m?CSm@K4FqmT+=PDrmnuBdx}QF@oRqL_nui=Q?tO}kI8-OfA#~O-^>z*`UUI_ zlEZNfW|{Cvr;yUM|GXvwA7x(FYRa({b}lKC60mRm!!sawP5DFe zX92;ij)`pwnqL4DdO*zDhJDB-*Bf&v^IrgL9EkM%s3_u*eg0-*)IrAlJKe${EFDw7 zU{{Q?e48!enqT9Yanw>&|17_Hszd8S6(dbkQ+;^R?PA1tb9R@{3%>dfnMdvzQ)Qf? z*V#|1EGpGB?hCevS7>+v!A~6nX9=%ygrW5AO$S$^@?mNoV3lMX-35bxo^bK|_|hoy z$rWvZHQcBihH^fZ1WGT!Eh>(3u$t*7+KVC)Df-vj&GW&-hb%Wd_FFnLuv1 z_vocQ>zf`ZkPMdEEAqmTAGuYYHa@m!e~?02Yu3=ecQ_)U_a%1=6vHvWE`-!@J&d;d z#*PdHw4A~Q=?30KNeb(dzH$>QxIIo$b8RfJ5X|0rKF@683|I(>dk#_x$5Lf0lI*PY z?4JZ4yx5MI^{RMduW?B>C^@AO5zyzvY4O4*7`e!PyT$#?A{ReG+1or}Cf(zeimfo&~BDp2OHMTJ<2VQ0{kHud$B zdiO@GbF^#SDQxuI*PK6ym!aOH!{Z3a+AHCeTyM#4M(21C>nNdikWHpiYGZh+WZ{^r`^F-96hWO z&}3(cInv&@Tgu`IE9PQz+lcP@{=QFujd4mddp@s+d`yc$_7@O_5k8bE=)mqM6$L*@ zEK^}wXrPO3^b_JyX1?q!Cpd#VG&NhE>2Ibj4KYuqa#?*%{z2r1d%o6y(Z3y}T_1QJ z{!ZrQk-NYg;VC(){wIco`=;YfUCX2Bkg>s_!Ex1*eFG$wh5RXwSKUV3F!eQk^nA5^ ze0(TrGOA~Z?)RLPx&>s(S!LK%hF__ywmyj7kx*-p&TqoZqvrnDkUdU}VOK}E&76VW zbUbbMPb6Rnk>&>=%_3N2FS%%n{b=Xjkb)~iZ6&Uu%!aM55h5S2livlEDta*b3^kd) z#KI?{52BH%zbe!&zgW}TsLh3sW98))*TzyVnB!)ZtYaVFK9VQBnKbQVPi1Jr z;d#?x<{(WgM)>F)hNfl0XH!stB zT~6$xmdv5m!3B4wq2*KZ!d-usp61YYlQZKFJR72m=ul0=`@45*oE|sCYQKOI(B_Zb zUwbW0zp9(rElKB>A1JQ-777shPg}LcSvO6Y20OXrymHy_ zOcP|E#IYAzV?3dHf~>8-F|sx-y=Wj`;+mY2BRLB5Mz1xFvcgsot>HkS`T(YNB8t?U zBi!N`9U^F*i+^AmV2=tF!=qGOP1&0m#v|iKOw2E7h7U&hCM1NuNL#%SMVh%@^;iXB?W7Ls93iDQaI9@2A}wO<9~$3xsZoWu;j5~Sa9L@oinuvsYOOWDo(-!< z|8^vLX1!82%^A^Xt6TjIE_-H5i5-@ZmQ8kKi}oltyQlirah%gi)fyuAVlsAe7&!*3 z_}d9S<=gUnk{=%sggAEfE~Ck5&u&92N`KyaxlE1r*J&lA^~X#P)lZQYujqc}f(cS- ziebphl7JB4Q|))=Cf=3MY4j>E_{*Nl>N@jdOZL|ssT0M+RqgFmPlaE@nvK2x;5D4m zb6$fGY;P=wj&dZ@E@++*ne^>S>wS&zXa{crCtP_etr2T78>W4yi6pdUWyO(?hA9KA z>ygjUVJDdRxcX;@@cy`hv7Elth_6o$6it}i22#Bb`pbf-X4&qh-5qfHN95ocnI^&m z`{o1WB#+*G?<7}uWbZi9PZFW~5ewKA;x&wfQB7DIfmaJ{Xs9>!n|qqGB?~4^ ze(N&r7gxuW(w^0q@~v=a5Vv5Jmt&ThNEW6{paJ~moQ(zsuv0CbeNfALOODKDJG=q6 z7tu|`+E@=Yvyh2Rn92uTcyxJ%P>I({W3!M7TBD-T07H|m2p#wo{hFmHqgToaC|vHw zdldwx2V{LTQ%?sZ-pL#ME;6_y3X#4ErFUV+DFzm&`PpV#Ohj%JU1fXq!oejSDzdqzGqoawB| zsaY~fCoRpo>dsO?!rxA9o=7ofYui&jl;j)1TP_C*xQ)Lx;jsTwAoNODs&D6D*vu+) zE6J{hRTrbXg^__x2B|mfr)ewQ4=l9yeUc&@6r6+R@{D0|cVG1&+>f}8%wNBNpBES}l+quv&%t|z9%VDd zr1=$h+5l_hJ-%=6$i}S#w50S8yI$_(Dk@X6xL^%`BdPZbY*i403SI7U3DqpG3Z1N8 z$N4J4QI1N#2qLFYcbWs3ezbh8EdFSHxmn-R_r*WiG^Z!zp1fC#xTW*YZ>5PJvt!lh3n*IOZO@ z*3lZa(lcx7yO-GI@8W)<;x29$uZT=~Dqwj#P2b|Ic!`8=56CHK@Er>mXe}Kc?>8Qg zHl;C&{?JOBG$mxT*=W*nM4I|yET1o>E)jZ@u`vaj-Wqz@pYOrrM_ulxTdNH}yq2gp zXN=qbczu2EaTar^2v;S$QN1Xgq5iI?^0iaj&(=lpO6&PX@&!m~E>lyrkVDO19q;AIwkB*-QHQY?>*LjUW?ht8$aHG_|=mjt%9m`PfW5T4r&> zP%9lOn)1G+7m%6;?(hC`M)u#QMge5&8 zsl_=O$cWo}2907OP!|cQg z`;5+k16$_XXabxk;*3@vwGW)9ZxUM6>`fKMlQ1?q+V@|pjrVm}eBo0tu$5BU?=EhT z!VNtsYsS&C8FEKuV1czjT4uy1;LANStFaA}9J59q%kQ9;nLn{~F3# z@7UWFK_pu&RCR?&{MF3WTuKr-I=_s8Zbe(m;|0l&=pQ#z9p)Crtq#Q(m>TJ?r-S@{r(Hj?eUYH0*F3#q&e5;si+Hkfx-gIJ?fJQ*WHCZK7$?W5WS zjMpTlsuCzSe(@sr?4cTx^xw+pUMB@1=ev^yFJqj--{ys%^MMHJ+N$4)tB#F;j7q;c zk0==d%Q*yw1w0jkkqTzBHip<6i4vT|LWnmY^5esNjXc9_MG>?g$}zl25!%Ul{Rd0C zWi9%0@V%b2xbpja2eXG8HTRl6oNchWqi9$^MAjx>BLQ3D**?Cz_bB<7g?W=6AxGG^ zHs_v8vs{c94vap>#I4|uu}&813A5>BN5*l8Ydtd)kB;S6tWQz-t&y?q32IcTq1GaP zUm6W%ERN(SOIO3|@HZNejSUIH6n0!2Wov`{-9!z0~9ahA7IG0K3_&xu)1sG)T!~3Fe9dGp#L~v~m)8|dV|HXB)E9JsY zWyb2uD^*bML+N{>qE{np%bN4ci^;-rHQOJHh&@N@vQ*00TS1h!@|W{XyeqF`_B4tR zjlXwD!o4XPOn{?WWpI^!!h2Y3BJ1&Vf`!FEYLk+DPLAzeFPrcVyePKK__!Q3b-SB zjhBchxrJu$POfL%e0}&6nEPi&VjZZce&fZ9j}6JSa@E(|dFqR5U4Bt1$Hxm-X9}$A^iidD)Svr%swCJS+X9`xKKbj%7(nCkG)kJT>^LML1p~uR{2b=0_3!1w? zSj9>gHw10!!Ob&wVNSn*v+|TvA%;t-VmJ45H+LH|gV$zt`!C_IlX2A7o^Y1Kns0i1 zUtjJBoDDqaW=8lupO1K_(}?9Hfl#M%ju}%r+8!(S+6$4*>1D9u10_elNV!fhsS7OK z)i~+xrre#pbaKKWcybG7aU=)N_k>hgE&2(U;<=%SAS9QU(L7Hzao#;pvZ0ws(C3GH zXedjr^$FKV9DkQ&InP`?J@)k2;vEYbvT_$d4>4}Z(k%2AjLwm> zd_zN1W-bQj@lK9FW^d|E05hrfWMNe5$I^`1auuEKI+GMa_hZ94!Qn>g2K$j1&Im3_ zEAw z5ktxCa`-YSxQX<=fjf4`msrnXx3%J1ZfeGQp41NgFa4@jctmp7?Ap3qh(_OdARjG0 zBt@a#gAb@%+uIormLZi}M=cC2$6Yh;J^vSTZy6L<6m^M`Kmr7}1a|^KgF6HW?$%h) z#;pSccL>%%H;ucy1R8fj&_;v1TkzoC8NPWnKjz09d*4*OpSSDOslI35d-gtSueI(V zO{$}$AhdBs4|#WmcijFQXx1xU(?+F4iEy7g1+NvxWwci zrwcc~%>O&64H5qIY0Dk1Jn^M1S(`zHnK=lv$AekjkLhdjg88(UuYR&9o>Cz)M{i|i ziw!4o;HKhP+m1XX#nCRgQq^=rO)7&$oPFo2KO+etCj@xpB^Mg}~r8R3!!%q@~7r=(wyHfqbtw<<~PPNm}; zY)XTazLU1k2$Go1SwRvN#cC%X&9CIXM{7PcF|BzWiFHN@ zBbMoXOWS}Aa8RWJU*r#C|7}GO!<)CEl#xoUHMHSqA(CKQ+-z%ir22$ybpfz~#4+1Y zS0Yx83q&IReKr%c^Qpw`a=Fkv(?KF{qaH$cA2{`rwt|M`!Z7*m>a29PHdRuUnWH|U z#(l<;zb{R? zBvTo`8kQn3=RB*kDf+O+ZLaQY;uBx*N%I+ScPUC>6Y$Hf7|t+iVZfX&$H7=9s>lErP4;v(NX_1k zSCsVX-{BGRbusBPX@It1y@vEDW@G9=JsBC|bASxa&-t@VOFkC!FBneL2bsf<+F;Uj zOUz%i?O3kXQ3vSWq}i7bN-m%K`T=WocrGipU6S+Kl%^fn-_m|P8;nKrn;%)4QIV3k zV`Dtb>D)KSNX^}LMnaH94FtBV=dUS!gy=X{m%5tT`NPKrmf~UeNM7%eANhmxL%Yt( zK3B;*jFYf=6cS)8F~(*T@hgQbU0KwHo3V^5pkQw0fWe{)Br9HP_Dt<({g)sd2@!dQ ziCs#a)My{E)f#s_kT4%Ix6j^B*Kv$|(y++R6F`+M{H{JuEqlHss>6W6dHsf>3?SL- z<33fH-HE7offs}o^s97Q$lj&b+<;i=`v69+tl0$Ti~Os0;QqqwJa-B*XuqJ^y=#TM z$_$<jfUt{b)l=-I@)7Xu{L($(5b+NUYJk4bk zyIgwcoy(!@08Pbn8?5HF(1@rs+>YO*u~L!Za{JA1U5H#01iuHX7g{(5?=HgFVn4yx5g$moXcNVap9@kLCM*kXZ0EOFpeI@qS3j7^@ ziSjY~$IP@Z$NdfFK?=Wpk`6z&orTw99mtZOsP)WRv!9F{Dc%wEv5ye4tm=s#!3spF zf|;!}6z5;6@1i|+yqfky2DdW}j5u2C!i?x5)4DqnQIp;CtW{h(2|MV#&1{mJ0n zyi68XE!_m$(d!QCS1=?&Y*Uk@I~%*BuwUm*uc%DUlrN92f3vcmV~%g|&h6d*64HJ~ z8?W#WW$dnsm^FrC?v3b!-?!6JZ-2$gzg}O8d6he`t}P+IWQ)(f4h}UG$GO1Fw>xXO zTsA>H%1DBLC_|DA#ZR(`KiI!iDG)#``_C$kyf8L)(HpqIGurA(w<;{^4aVm2scPM< zO?2}*@OHF3w2r+c9JNa%7!!WI; z0#9y{NMGX?c^ymoa>p#ji~H>WZn>l9M@S4HNh;zpRaI`6PM3$UJRIy-nI6NRm*SO+ zZnROF}0uxPPkny4O1Rb_O1=I;6=}}!au8!$ z5v1MOn_c~55^Uy8W|M*4z9Iy**bAFVOh7ohso#?g;n8o9Z_$}dsc0e%@lHygPA<+e z%|3hiuAf1;#AgNj-c4hZ`&QMFbzFi-G&ZateEIh;#c;3g3ow1PV1>oV1maDd3?pxU z+j50CmPhG=3`sh`rp%i6vH)(V7jC5AfGKpkt%fdSI!jT_=)_ybonD8fEE<(EQsyf0h2n3+u6DouRQ2X4S}<&2Lex!q zq85H9QmyrSQV1L3OS{IaL^#pcIc`1d(@_45@#A`fb0xu;ZU<#&rS7klb*wq}c&5CY zKuVSYV!a56(kJ=y)}(~t zy-vEm{gLfPE;a5cOUq=@JBOqhdI%=TbGju_PhmZ!Wq(;F!5?1KZ^^p(Z8xLJqB!+u zWtIL4fgdnwaFOnZRjq{jXyv41P0yRUNQeG%nkfCe$@EY(?su2rm5|BxTEV;_UBniQ zvE%!2p>$p|UBIlps$PsI9s20`hAEw)w3r|b^&nY|lz+Q+I{9bW=8ALM)M zf|5>PJ4#@@zscbmuP?YCuA?T>jNLLraiUFVACH%QR66`F?NajwL+$SI2j+*_SYHaV zi$qnqkn7?40H@~8|9qn6kWY{8`flk&2pH8A2{Q7abXJLo=A6!3YzOW7b(mLQu11D1 zj~cq!kKbdFsYxmfE{py08=;It!}j1&W^_3{VB^c6Q){;SV^f({`MP?l!EuQ8OR@td zll=!aPhD>`$lg~hB1%^hjW0n#H5K*^i+`6&!~pgSvDP8IxV5r;YQl`L*7(Xw(Ga{? zmmf8)=w!I+y!$*@0)QgJ`U%E5u}qbC5(CC4w6DEI+n(;I)9NMksE{tB57OC68Fxus zv*9bAOBTP!$pV0#9|B1dGrMkTEesbvSSBaVBwyyeJvzbFZUg}i(II5hd{+RlQka%)U-qW6p zO33kWv?D!4p4J&3g8X1y2CH~=AVA-wHtoRg`%x(VLxD?ctH=q4}E*NQH% zHuP~_CEDHxYGD*AKt&z@p$Ls_1nFZ%wDS6~gYclwg=7YOTNn(X|^)${~*$#?~#hwBD(}--l zH^d)~4a0xNnqHK&RC{-nik!tG1Pyy6@Al}L>Sg6DxuRD!C&TvTOMO!v8yEJ8 zZX3bE^X7X%)0TzsND>qGuhsPld8PG<8LKRq*WBX; z=3&j0u<$YH(KjoXc_`9h{sYVjy`o9@8#cSgoefo- zNbBVMDJZ((aelPRsD>Ox5Yq-S`t;cC)K|9k$DUtu-MdY8-Tp%%`G@jDcGL7y@E0CZ z68aD2lz)xf;j<0@XMnR7@&4w%$N-2dxdm6046O=|f3LEQ$-M5@LoBtR9Th;iwNqB_ z?54yIK**xigG$n%Lt96EzVEz0E#Hd|VoD$0PBdW(T!kbqKxm%CFC~$3z^+R&E+Qm3 z=x=Rca)1(Ci%b!qMP{JZr*MM7&`f)S<}3CMYWUPGT=17}?L)DWhSGuu4-T8cWr3v*s&s#hrN!=y{LzKGLgZ4q{&R7IYr9ACi zc;J_*EWZ5S=GYf+7ZMPxRygNy9>nuFU0Y=7xil-E?9%l^u}!I1uJ9712cA*ZtmmD} zLW3z&#HJY-!Ji8(JeRcrxzDNaD!w4tZb30Wf2vE&V-zH7Ogj=w;1MijV}VzBF7_Qa zfaw{o@6blbINn>Q|JGlCugX&$>W}RJ3~z)9-*gpx|3>SB5GPf8#A3U2zP$az`y`2Y zF5t*)A2ZKp4O(0?Fr5MMF=xC1g!tYrTZ=43Kf*K(xwk0F-QJ3Hl-3tE;%~6nwF*`M z&Vks;IlrlPFPiTvO{W+ET026OzAUVYbA}bX-)FP4u9`!tez=JI2&k|<)6)aXGrYFlNcy_Z@5lJo?cEAvds(K)jXUQJRLZ@(!~pC?r6O(4|7h+{-GS2BG>SDYd`)& z@#MinB%-6=2c%pHg3}?)bQ}XaL{Agq&xidzyuz+K(}@i#MvXs1e^z=vEYtj!ADT!s zpYBkZyN7@NAsJzNh1R>&oI*Y*%l0_>FB2(z~3(tm2@4W8LoIm{H7xnfk# zz$s+Ki0JyorYlfb|1TL z|1iCzxaIY0e?eFZT~wgOLihIe1<>nv8^O*nZL;nOgKxfsD+#-{hLutIlwEz`DW8(OFhSQ^BVAtVzfd zW;DE z>C_5}Z1Xy#`ZCK~LOSmzY&C5l)Bq4sS5@)TuNL=c{VVgQW?0Nt$B8DD^5Xt8XzPPs zCCt3aes6{}Q>Xc$c3WFPuV2-Mtwlwae<1t z8&d1%oe1|hAFDw;8>-ilT+B~idbM~~ZmMb2^BNH&-qOM?Y54hzMdbt#l|Hh@a{dBz zOArw_+7zRw`1fjthRxdV`|2Eo-hKxCT%Kz0t0c={W*4nj|3p>ffO_PB{GaAwrr30) zv6-WHpCHx{ITvQW7e>jCLG!l>D*OBL?|yA5JkHRWo|T7gF-&oAe zO47l&$^wIW&-hen0jW&Iu!yk&j^9}Q!`wGo!v8c&)w|p+0VZ8Uf;~p9_w5Ygt z2e?x4m$;E37Ia;vt+Rw5r~||tWbZ~A$%ST~PYo~D`Z5GK^|M#XO!_jk6)k$tskYPY zG7;<$U+1xB*F==%YZSi@)MB`ZBwcaseJ7Db!RWT_`}8SxB}KUpM};z?DKDZTS-aAt z3roo|(XDpz3J|MZzc6sOw_VE7+w1IogHXh`vw!+39&hRD4zBH=1Pgh+&mf2iWl-k@ z6!N$gl#y>C*tXZzjhX5UCJqqnfuUS=!8~j_A=iS1d>rMQ=Hvn9cE1yiPWmr`AlVH;g$+RrP3OwmXQ8O$DAv ztYKpmg=(mS$5ENXqV7|Cj_#8MrHGjG#9$>PMsp$<0MM>uLtV!A#rKcc-qvHAT(QfT zPO7=Cy%*FQYJW6DwvTh zy+ANgGQ=lQ$a!|Rs#X8>JY#5&oJ}C|&uxbK)X+}D>x%x}x^g!%1#SawX#(+0N4eUb zZ6#y^B@extiJXLO!0@Gb#PETPbVRXgqX6n@>)5?@2@r7TklQfjZKbrn* zf)s8uOx^F5q-W5*>IoZ=FJ)V80aVWR*>URqi1UX1tbRY*2eo9jatdYuQAv$z&-j2o zTh$<3?LpH{lJMl%^2xAjj=@4$UN&Qr`A*|x(z++r&GD9Lg+%x)3wZ3bn72GKw~kjp zU{F_=YM5yL#d3}fB(q>3xBig4$}u7I4RFngU)z-E zxy#KKKVsP4Wf=W7ZnVR1g{`{03!UlIX$`^tW?|IqnB>md#1O2W z#!h&iY{TRQVjrCPd}#2#Z4O85st~FUgiE>lV!thq7cFmJ-B8)i3RwD-5ewg7B& zkuWb5!CO>c6}SU_OcRKY>ZV?<$Rt+bo)ehK)8)lLhj~z7yhnZB>=JId9F(knwk9y2 z09-2B^fCKPfUnlO;T?uP%M|Jur&0cNq@PL5r1z>05?C4A?y9ukr@+vkKUq-Jnxb?V zpMQW3Si7uyf2Quq-O~Q?I;^)PlP{Q`};fp%V5QHbbFjx%T-=8d8mzY!b*s z>{mzbbSSkqrYALXi09;hnXEC^O9%zovChzkMGvyf?x(ab_iN@=niij^jFn`vTD0t8 z3(W)2g1Kr|_Ei;)iuPpvuY2`2!?fO621#)8u42RT8DFljUnZln32*==djrttjr40< z3miIW+O()QzVC;~hRP0#?Tc&ok)ljN;H%aGz~-Fiz*05m1b^hBDZOpHDPwzN1s5(; zD(7RH*9^;PAwQaJ%(*}|B0s;(##-nuNTZ;|!WZTB!|gt?R?k!{8|6g176+L(BY1Et zX-TE60!8jX24~=_)SU>0j6|*rY%n64fas`PT(65h$B<7nB#x_AQQkGcS>iE`4N$E{ zdZ-&NL>uKbK&(VSAm97~$$Km@b>1+bp4Ua$@`aHNSL)diTIi?#kKh)Y7!OQ`ix>SM z^F_5IDJ|V#fR@Zl0a{2ezW;X`+dIz_8Ay@qQ!=JWlHIY&-aK52LTL{P&LNNBchI!q zX=#I)_$4hIQ;i`F74{IpzFec-co;xRxxwfzf26E9M_Db&1VENX){NV3-1^)Lxrf!v0`x_o( zxED@)>oMD>?g zrf!Mjk4!g^&{N>H=JQG3xdS$iCckfxmQ z%tuwX!*YbJ?G3~SG$=_WJ2J8;(Tvx!lbc(_QHe3x* zp6+A;a0Px5R_PAV$bS4nqN@p;M& z2BC8ufQ~^bwS&J4QP#1+$IYzkp-qA9cFXJwj~yzGMqx>J`f-6SRWwy%Ie-n(_fP3^ zvNyLyYK)c@FZ?9nY=(m;X&_!ilJHn)gewlC=TW=Cb!b1W_bx(Yc=*c&q=Wu2ekHp?O%^7u=K7pz-Qn z<9EcMeC*u=fh^;$^^iIFYrg~E?O;qOvPKp@C}?0lG2;G1p)ED9L;3k2MFBmK5I}uq z_WHhF9iO=JqW!oKMEelA9H@EL`=aLAoSVXfX5zfQ@wKsRY8BMP0_X9twxp392HX9} zT;s7UPyG*Nh052d3p|roVnW_fpr2d)ydL%fx}PbYS^v)|qD6dsRV1&NFt%`9JBGty z(p!%~cEO^hwh#^6m~$Es^W=lP5C`?Iv$k`iwgfDGkAGzmBNnMLI=dw5?Wny<`E z6^}x8e^e$_|JL?F2e9?s?*8 zTvZ~HH?<;O(J%|hP8pK%nH5l3v9D<8rfdX4Dq(emetprCD0}rk_?HTh`1SUY^Lf%3Q=BxY|CV^RY3yN(^6nr&wJ-9EXcVtp0B;JMn)tCmd6Ip!B} z@zbe;0(=+q|Lj>(XpT};k?;9{?(?G6iK$7o>j8Ron%3X!5e5kF8^n42F` z${y$k+$f3^unRBu+wVqAhqr%7j>_fLZarh=N+S-VerJ|DKoLco6~~oj01k0CshyY? zrxOU?Un?}Og5``%lZRZs{&0GyRT)JoR`BDbeF7-=kx_G2jXNscvnD{Rj)AR=b+9`r zqMj$Kn;3EPo4a8H|_+q<)Fwl+o&s6p`bS0qKwH(h)yVX*m|Tsf2(AC(Ewph zO>mKaMP_>=D$i8mVaW`6czIT66emdci80K$6ApG5wu z!pcl!IJG%kmvePX<-OTv8o0MW3~Zb~Yd^2r+0h*k0~)e$ge&-t-W{12mEW2+95l4w z))yT)e)XO|fKOGC-&6i=7sySE8>R(iTD=qkPTf*kXLqm8l8+NuFGSE$GruT4!93ef z7$ip~S*#rQdZoz-fv1nt@qBCishBlY&_@FZ3{*3Ka^r&X`#o%P5o?4 z%W$cFg+i}of3+Chh)aS;c@6!KlLTc8m6E7WoA=MAKpW^6G#x-kA6=IBj~1Dx50_UI z_k%n4cxRjmo5`K@vj!34mdqdX?kjXfJ&^an_y15#U)}$Y|DHac9qMHcO6UL_cf&BP{bu@Be8(z;{ps^a}UmnM0O?p&F)-vPUy$P(1kJw zD1-`(jLkUwI?4EJ5h6S*KwEo}_~FG;AZ&)~igBO$QHka$$+TbQ2_(dI2b8=s2!t28 zXXj6(^c~?!8y2NYDwPMgCjHs^x~khc-tPKRm^Seh{LSEQ`vkA+8N;`W%F@ZY+283m zHg@DPNIXhnWu+8Yje!V@&2a$;y@V=Bfaco84~Yi zo#AKZ4K%u9 zW!Y1_E8J<#dHs6HBH+J&1!;hVNwLu)-A-zWe`{?=o@wz*vI#VX${fbr$9BJ(Tx{l| zG!3=8N9>mbW9g!&6A2v!pa)}FAp)0`h12^TwGtMs4Q(nmeT~0F{(cBFa^}9KxE=3_ zo57z8)o>40-rlHSP&N_8^TH@}Ump>x)Uk2xXgl4KHs{+-o=J7Q8q3`mJ_J^Z)%KaF zKr@GaE59on1OIqv7N7Sx`+&p#-Sf3P?UNaNY3Gr~E%oZRM3nWF$fV|oCEfWR92>8` zQ?>Jx!k|8l;=PPZ=V9l;r`toE$Euj8fa>c`36Y*aHlUMLI=5zm1 z@SZu~uyf0$H6ty}%~%{^ob_2?wko{|sIJ3QetxI@V$B`rviZaVr*W^(m@7BC!6R<^ zf*K?3W>^7FK$fHV^2b1+XIp>SM<67vmp_B_nBzk-MWe$g3nehhAGfkGB{K^9*|o!$ z80~}vlXQixXj18>X6&q9l`_PTOc^(U6~CJqOSBL!&=dc0vu9Dv`b@{oa43vD#!1|& zdm&YhDfuJQTbPXB(uXx*)81LB3;(z8Bs}RpM*N(9=71M5@0jDUYe$*iRhlI&yRo%l zk|=7FG}S=KXHVE@$}eV^27iYuoDePGFXM6ZI4LTyHu*%K)wE`fzADkD!v*dn!RpG`*w>NIdl~d4=g%@eC2a(yx`0>oI#_CP3Z2)b!`!oetLRvyp0# zyi3!cGv{3cXLVxMW74E#zDu)>6#t-m>Ke(Cu9()|#*|^**hP%=Ub`BFBYeL;6b}lI zWxRlYC_wc10zgHd^Rd$C9xwfT9X9)rt|u#_J0t2TRnytoEXAD>+5MC0v7euNI1vG~Y?oxdJ7VK!(-u1k7;50d;o(_1j*s5AUGkL-p;4BZ9k91qvL(d8LKjk` zEHIY{>lv`{RwzF($UKXw1%7Kx54YvoNLPqai+3$ZsQEkgu37mF^S5+{u5Tb6=%k-% z5AY&=anvzW-GcNZe-T(x#P*kh(@0T7;{Gx9T6NR3m^F7peOL@fCEB$E0>lMKoX=58 zw!gz*=QfbA)^p~Oui0W*vXI+bxaJo>0!V7^eNc=a=)F2`D&SUhZ3of(ji4hV|1|W8 z*71|X|M>>_-9xS6$v7&!Dw4hE3$bN8A!8{{bmKS?qg6`EsI#8`Pue(P9HhKX*K|T* z&KXPKwQe98-c|d0*G|kolpQN%KV-t7!!17JU8rGypAXc-x=E<|jdZ*$-sI-V$fOFm zJaYBiLqi?fGFK{@6!KKWbrK-4XOfEqU|lD6wcLtxPVZ0R)q5mRdGc~4#^gw zQ8Kud68(8H5=`+-n-^Y40h!xL%(Plf;c6XHhB%0;L{f7ILur0GC||;yvp;)YdHVoa zY!PhI8uIK-1`XFmU22fDy`UhG9!SsrZObU#@lO83Kd}2|TMtPW1LHpnwqxbD+wgTO6Cn?kSi#;Wx z{8hHgB!Q0c+vg2Q)dm)1e$Ay@1{sHGy9-LGPl4^1p@kwqgMB+*gMTP7su76Akgj~A zOWQtMhTuIkqTa(&96lUQEjez5=6OaA1?LA3*yp{HE z!!+6ixqQW}5ov$CmOm5IUVKsHO3`U&W&B!B7J(DBDR@@>9$ddD*L%*cAyu}o%=g2q z&}HCRVdI;mL#RG2W-_NwYEB;pPwJrE&`K6J?5$H-t+ZEq87b^EScf{$T0s?@Lj)w4 zYA<{jI5A6G=X2vOYS6?2n{vNWf6<3WqvtM4)vi71V|SqI(Y=Mm?`05GhRGCTugF;K zs_wSMo&3`xxdFQyOn$v(2^KDIuOD&ws?IV0`L7%?&rz)lrSB8I$M8ULenV`+=W)_; zL_iG~TkPn{vU>dXQwyb4#Q=J;u+S>+yz47rf{Z@Eh=T}8RYPLzR{+y$Rg{AyQ++Nf zqpW^))urb%-Cka9z0?qL&|@*0s?K87<=oeU6`-TcTg!&$=CY0VRet`UOZHN(;^2Mx zG#Np%peq@P12r^`KxVAN@Jd|aF?>_thae@?|IvSJMf5Rq?^x=g3HqNMvHzQM>r8n0 zN!e<_8CF2bIg^Z+5t!H+k{H+OoTMJcZB%1V$i5Gj5$^&NvI<=IHOO!WTFiW* zqgym_ZA^=0Ol4{0me^Hvw6RYS7c>OJouMP*oY5|)e<+gBsB>yi z(zamJ-;VaIrh5~ciKVs1$1cHW*Maw1wY|%ec(S3X*W8go3Xed}8J@6Rhu53!F0T!j z07QnUt|?P78i6&-r}JL30uEEdwugXX1-72V#>r7O7YP5QYLm4@cMEF2%$JRVu>3xK zGQZ58Fp+O0M|=sL8^Wzz$&n?q0jkZKovS>gQ6E=ClEV_l#wJEV^FPP!?^Rh(MDfEO zJDxT?PdkxxlZKXk1VZcv@A;U0zCL(CL1kO~sZ*Eal+I2Y3dg+$gfn`{8T3s!+3FwG zrAwA~yr4!kr<<2Pu9U@8^~S+x?JXj!-$VbxB z+=C#i=_=8cqH$nW5?H!I_`5a3_+a^JBSqjmZ8@ysHFgk$i@(GQ#32^G*;#Eqh|Kwa z+aCYtaS|EG=Qez&r9H6W&!W)~6+Sz=d$Dr~Rj8xvRqhs7!@@-j%+NvhQb4eZ%jCS7 z4%U4qe@RFJ1BZ%}T_rn+(AxzO8%z+D{F%D$r6_3Y*i>!P$FAhtJI%W2;`21@q>&^p zdYzPsN-Uz(4vt=JJ;O~l2g+lHK74Plq9n^*evlkLAQSurBF-?~%oL;6q9Qj{^BpNR zJyDn@jc1~0ehEIL8RPqjzJ(Lbx6PxM?NfWC(as~r=xQUaH5uVk^;(6w4w2z&%-&+hg%|C0M!zb;Hd8Zy*TpL~Ad6>hoB;>|Z?sW@v+$FBe0?sBY!3$I8nj9C+ zhpxDyH|Ok+mo}h^k&B3^+>l@2;n>=xVj-jCO1Te$FS;p?{5$DOv|4sv8UAkCkww$Y zIg~~3$yX?1)cs~&$5v`(enlc0BB?$fFSKJq*dI@KT?zhCa!*RIN$$=T?=VySLShP= zyH|amrJ@UhIX<%9X{MET3o%z*uI2&}eqsbQ{zI`CIh&~#PlJ+H^e|3x-!Li|L$6Rb zpNcy?RtD|?m8!yztBx@bfpQOl1k*Li)o4FKI|{m8JcHsT7p@wTiVqZ7k;_LO%b@w= zqvZgQXOMzuD4hD2c)^i(?b*hz;=s9g6V1UI2);LtT;X~G{zF;XT3Wu51Y*4irNM9> zeSbl7xA*L*Jh;`hhh&<<4q2Mwp51A0J|xn!T5E>L@&59-kAx)#diklEbi}>w#UCR+ z$+wNyC|PL6t%5&p_42doiFO0p(H>Mj4v-=1H8&<0wc_bpbL?BgwNFoQ*KZyOWr>G> z*={A_Z4QDDpLyuP)O2NlMkLg*owB1-g}bk7fBnBLkGTocEyPM{nTrdA?|a<2^b~zV zKQP(k1FY9&8#Vuj(h-Gqe6O~ISDDqWpH``#-ShNeH{Kd~ug4kKAE5WkqwLF%q_(w~ z`G+h2>}u9)x|F4>V@qf8pLo^VTdkp0E_}HIKzB~9BGw_T4%@v|Aq}`Q!3BUd2)>zn zrn&G51&@rqSf1PN)Cy!cXq2!&-z1hWB)1)gL&v1)DW>W1nJVeiS&>h01)oDg=+H2Z zhuNe?CKewP!+C{rYo7T+HW6{5)8VyohT&z3aZSdT{X;_#|4xn|cQEdZQ}bq*IF-Bi z<17b4?B3&Lp(FLdN$E4f(}kXMvy}D^<(LMUwsq{eet~>&lYA=phcYGRWBRE+Ga5F~ zmp)6zdd{X(V5U_6IZp*PYF;U&Rrd=5t`u4}n?(H+k7B^zqvao0i)_?g#+T?^sLh?RU|r~? zlTFl^4VxML*#7O=RkcBgFF{neTvdoz`GIkVLdI&r#Y4M)o~`;L$A+Z&PT=i-e_@x! zpIeX2>)Bl@Pc>qT9@J}{nZrqpE!O|S9sA|{jlKuAPLTiVGux2!Kvl}MGQ@uN!rOs= z$N1MU+Ra`v8HyPxdTdezE$%=w`YC}dUK&f z?5EukCy9sTTi}N&>o-K1aX+KkGi8Ld8QZtb$ik02m`};^G_YTLFlRLuc)dwRh_ai{ zdjs&=Y%S-X`H%KIPV4xeXiuKY)*5J~|5iD9q((pI+x842grnoDd(8>$L(mlkE*kJK z){6SS2z4HQplu zr2|b}vumFNvYu8^P*6ls1W+&VHjTxm*+NGv0i+z1sY;Dh8Q>mfj>9qaIxAP8t1rfm z_1etCxGq28Y!UU#`p`+vv*bV2^ZR+LLgUl3OejwQUsNy_rOuHAsr-X~((iOX+5Ftz zNEzA0suJy)V3!}PJ(EwJg55^2|CSRvZo}L3=lCU&^IOD$isw8050=N!QEuhkJKssU zWy>Uk{7dMEtS^;e!a;e>Q26wy5WiZ~*k(vF{7>;QM-V%wrbGhDGsdu_V*Pr_LJMHr z|7`ksFI?PTG}r9KNHNpjGO|SR68jq&HKQn!JvqHq5ZD?o3Tl2BSLYuAQ3_%Ab~8a^ z^p{+zl6BXt%6M}uE1L0zj}9*^!*%!08w8%Ub+!!|?2I+*;BVcF$~?Z3yPq>o*-L7x zt+sb`c6b2iHjjbV@S!DBt6;~eX9aG&9S;nI5tUva^%7z% zd+B17gHd!f%F)eU#s<-(;=yK($rt4fzMRt$Y`R&Ur`G0#N)6>X5-DxV_OeTdSgyp?MQ(dK@w{k3<@cz!%f$5qP#D zeDKA>fa&h!f_@F4{-zEX9*z5r+Ft{vcMCECVwb zv7P%Wq7YEQpts_&-RX^mN7ps6H@wn_TeBk#@80O` zg-Vteb4o$Y)T1vsH&4`|gEQ$#i`6^x6&Ae2zq{~%iU_*2*4EsR(1ou<-*UISX((N( zQyTS2qvHi0sbUS_%v2sy9vjTR;ORXnJ<15PM)iM`pIQO&6U0N6tyf{{A5~aJ59K`Q zW;rF?=+Fe2Vydae9#FSvVg{|8-%C;`^({?$XR^*k6=t;;+A%KjQ+9lov%U|>dQ>cS zM-vK!?)I!jzp+#ZS28@M0(et|yz)d%wYeghCgwOeUu#0#O4!bI+od(U`Xg2eDX@&k zmG@@omFdcN7Kh#I#Bx+cc!pKHTSy7jkm?r>rp_>yuW_|_^_@oN zy8?QxG>STDm1f9DegkE!=QA_7W7`EMNm4UhjjQV>FJd}i)MwUda6+eAyiALiP2Pk# zT{bEpF^mCV7JA;e98@S)d#`@zYNmm*w5QZ=r zHjF=!?pc7-ot*fxEXTo0uYj?hSDGlgH+bzV+ufe1uCMoMD6*QEmnFK0k#D@Q;%2<= zqYBfNHKq57>AewlFas@~T2!vd1*P1*W2`k0;UnSsS7C5K-o8GQaTCP0vUkg+dBsGd z$7R{$+Vd>p&#EbJ)PbDg4;%c6Z<}`JjSP0hP_AvJ{h|aa3%>JS6Io2lsGX%z4)UY6 zWNHzI$yoIntVXk6;42o5H?G1l!7!F-PD}_*Iz-XBjT2okT`&;f0( z_lj4+(p6^WlE#>{Yda9V&f}}+F*2MPiPzR2h~=redp?g1P1wJ63~RRX-laH{epbSgXR1H&U-tuPTY!mgrT*S@~~VF0&29k|5L+=M5Y0c8=<%!6!; zT^br#zxk0)zdj=0idr{^mX@_M8XCeU;S_R``8XG55s|rF+xu({)=%g_Z1OsM#jdEz zQAr@pCV1o-0C*tzKp&@V_JVr!9||}`3XLlA1mj4G`fN+ZU1C)jSd=N>rHP_&{C+j# z4b&{)Ge;t7;}JkZlIj|33n#H8r-)OYh{34LxIkH}Q0s-3q70wQ!is$S3BeHhQmPzV zGy2i;pyohc{MFD5egJ<|JlDat6!QfR;>K%QT&Kj?r1Pbu3jESvz@1G?@>a9oBi`-G z^?YjW5VFc;+LF+~G(3f{9x3sRmuYz%DwvP#0)tmMBl=Th-$wBa*~j66dn&rXlr7YdVn3AQu3%E0@;s@ewG<$%-?gVI4p#o0`7 zeE-iHFO^`i9a;}=x3$LAiA{ED3&)&ZIFL)?3tyy5etl;;HOrzM@f<7TD|$ItlgXg4 zuNaAyMNFX(lTw__Yjlf3Unz7r^~$3`k5$=9G=&3&2ln?v-CLzyA+I~= z9>WLK#Dvb(-|{h#&{_R-W~TTl1D|iYXi#f=SBy>R7dsL^Q_(90FG3uBsh_>-Y>g2M z;AD}a=-FLHS;Imeb+PX+)iDYH9`i5NdTJRgD zYY!G1TtW{Y*P8S?ybH(|i27-%npWerC7|Vf>g^VYS%)i1tuufb7f$54YpnKDA?&Il zwfbAiE10nyzwxqMWqhphC%csb4`Taq%Ne(C_u68Pv@Tp$wtfChwvYXDsZk<9e6MSJ zbG@(ZXQsTrhx1^Q9k|vLDzhxb?GX-n55BzTS187wP@w3`iK_Frm}sSElq#v`GkrT7 zqPpO;nx|T=e!HC7(R#I&GQzdTZ}6;}EW8~ajL=;f75w4=Je5k!nxgqb1~;Xqt7FEt zs~9!2W#js*7rQB8&*t4e%q=9^>dWvqr~)=6VBR9VW0d?p8N-Bp_pW>K?PDQ~!J?Y} z?#Gg&C9HoBM4q8%&mrqPKV-!*s!{#reGdz=h`AXrZ>XV6zq4Ze5 zxY8y2;+_tmf>Hg9|78j}r_;<=7TaUb|N682 zdE!j6UCnoJAQN$5ho20mCMl_W9n z+9T37k$S1q#4O#lrkzqb9lK>~0zJEU_)I&Fuxbz)fb={MV8nm(B_ACI{{T^*yZ->< z!T$i={Qm&h=t@@A{Ug@hHpJ(m!0P;lTE;@V7ctLngw*jUv9AJ?Nm-hOnwLC-B#=dC z%rP=KR@B`N>ZXelU$cR=X03iw9G(ioWMhpJb~8Ap=H+w%7B4&zaRYYa;hCA4oU=PI zXJ#a`F*~thdzL4;C%Hb~m8P`zPgUn}ntKlcpCOdAm7q`wR0r0Uc}V&YSBYME-1bPL zc0SJ?dCy}swii$IPfFO1OlF&g8+w+^OU3VJSTpdlM*GMbN4;V&?y<>Yy<&HwsT|N% za9(&}V4$-zq8)(lNhEu`bf*37f7Gpesy#l_=-e%nhQQ*MR$Nrm5F!@+84r^yiqJK! z-vMCw{(03f3XLT4-ODd$srDW}N$M%Co{`tzst&Bz&1!RoAz|14?7^ zQQ^A9r8b*SYiMGZD;zQQ#^(%U&1(gFE8KOOJ3NAw$WpFS=B0E*M6Ya?#83Q$RA z<;mi$TD(ijNvD~_aYl>pXLbO1>V>MkAnB$bq&SJk+dg$;&1-wLoNf|R%u{I-a?3lU zFhHuoeFB%9LHNUS2BFVY0c++mQ7HB*+@Fa50GrQm@p$+`^-o?ZX*~g^bw;79sI`V( zy7~D0mAdvI#>Xe4zbR|TvLsVaFli3qeIBin?ZFrvbyJVWP{(>ryGf6yUZPKS%=axy zAc`xwvrrH}sr zk5vBv)5qhg^?G40u(0}{E2-+`%?xjw4l<=#Y6yi@@=83YT(OU0;GKheJZddlr77uI z^hSfFlQgooYuwG{^Bzy8t#&UDH+o(jJs1cJUJ?}DrJ%p0v{(UJ87U@lOmegt-itpqeN-ffwrl`SXu~%u`#LZJS?$XN`F~|ZT zj@xcM$8FBr{ac;Bv-Wg8k-e>T9Sj{cVH~mvau$CQo<1TP%t%SuVO=KPvQ_5}sJQ0fksyQc8i4Qr%i&NiHmTKId^a&zNmT9UH4uV>11=A(+I zE>1YAm5n6b&ZX)-Z1$0_r0MCpI4YF$BOy^JO6?R?Ri)VAr(L?jA*?HrXBM^;u??Cm9KZ>1-9&7N44e|UP*~N%jYp~JTcl;cURmo@pGu1I?m2>8jq%;eEh5>xi&j9 za+M2~L-J|mtsJqbGap(}EOWE&R!Jo8?Sj{pFuL(IjeS2>ok+!$iwBL6!(J4dA0-tD zEQRlKV3uJ1IYZ5jekjR&If`WH{u!_o^R#?-!NDHnM-r&^ z@+a@U&i*i6ebgE&U+UjVl3d=D$m-1Pi7}GS^F0Wr%iNSng_c=3LB%B7(a-RCkx+cu z3gb#@>;|>N!JE^!Z5qjB62=vp>bJs!_udWod3bVFE8 z9CA#u+R%AfgUKxnkn?BsNZ7Y;Dnlf-;Tw7N>|d$BCaeag)0tf*oylqJ)pJ`TjI#CS zUjAIFr{?U}atE7Q#C&FgQQAn|Pv-euN&f&_e@FiS9ptCUm4g7zZ*1!J%d0MOX22=N67`~qM z4t#X_mk*~i&sP_ed~DXJ!7#l~CsZVo#wx-_N;j%rF)Yak2qh~U$g+CAIw7t);bU3h z@VQU6EY_a0X=2SjqorzJi|CH?+)TB|MX0PmfS4hBOqOKh0g3qzJ#?pxq1An5R}mBy z>Lx`Qpsa};5Zsofd2$h?afL{@-Ff-Mpa|cR05;p@XuN%Hf^_!BQM1uRb@r^M=$bPX zF9{xvOEILLlVT(IHfUs9cR}Q1h*rl+sV%9|F5S11xoaVQ#J29;u{Eo9r*kCMEY9sL z(@O2#o=F**iT0D@ue#N=j)J*bi;s^rLmfSeg?DN8yBj6zF(RIPpr~CUkakOx)E?GQ zdP$=`(R3aU2{cI-NY@v$90+almjIT^7agSZebS=1>{12Ww%$G$*)@|pqwvAOYM7hZ zIV0P;u0r6e3-bD$<0oCc-d_Iy03QeGy0u>;H2M~zWOVShk!I=TEv0NDN>Lb}F^f%F z_<@m@YH-UTUo1@&=oUX61=l$FD`a|4u3LR4tx!P;dDqLsX69Am(9a_AiaS$BUyRIw zBD-3pf~cl`T}05CUY%--+H)wpgh$WETpxnS<0fV`EyTms-H>px5G2>KlUILUGyGSh zx@#HJtuK46+SKw%8#z!e-?9SwptG>$=5e6ir72#BZ2>04JV?-T?i6ls)d1YmeIFY20*zBl?3o|kI z1yD&o;p3&oPN?;BRdq&ZXTfQ{T6;?)r(y~^tgGCGD^^Lay6(&+%BkIW55D!orT+kI z)L&EJ>w})gz|C?9qh^~gMiec<7CqWa)s;`9fQ=;S{1|RTAP_+yf(Sbhdk{yo5%v9w z^BVKPVL)brXy#CTgv8;%J9pTT-)|cGRxY*FmNUyp&{?ZetShv_b{>gcAue1Z4_$#E zZP;z!e+caxtcXgwGP*GKt0~<`{NRoJWjc?dbp)e3pXu`6)n+(-Cd^rjb#XVWRz!*k z?bLkVhVl z)wvxPnU67#Sf}18D%_=H7OQ@g`+3!81HTsHtgJhus5>(9Mw46gwIpnfUY4)MoB4|k zoYlE7>n^~5phSiSh;7J3D9WO=w_e3@V=bAxdaW~JIS|iYqfaUsqA$D~dOw%2 zWnsh*vqFu$o!YqiFiB?R+2gNT2$ZwSEUm><0sUnA6+vUL1o-K9Pitrl3c%tibC<+( zW^N~}8ek6!kU0SQEly0a_Fpy3la*5^75QG?$Jyhn-4T)rEoyxiQHzP)xH zw3ab&qWbVRtn$)NS{C2Yl*B|a5JA}XBe4hC56bxe04wni+R(MO7vm<&wLu(1o$~@# z6Fl5J_6Z6Ak$Ij_C7XvL2>Cj9P3ARLQVd2CoR;m*d+ZoPUO&dMYG9>n*H6Zg`){%@ zDH&0^Y12GsPqCX1F79^X4~+7>HYez}q0|k#MM@@6cI@^f9(3Nwql@p^7nUr2=^%~e zo;r437^7ZqB&!RwaiV@RJAkUb@^#>UmA z=9|M!CP(v8q$73lR@Is|Yu%?jwQba%D>ZDu?G*LwK;lSdhD0Hwk~tM!9Y`v`5O?t; zc;AG!j9H=dN*!R*G$V=P-CPP4Qq>DqDP6BM zOLb*r<`H?)tXu7}x#h@!Ml+~7mlLCNni8Fg>!cu6GG9z4{BFheNtlo=X z%>#YJLy2Bb%R}`OQ*`piR?eEUUI{Z8=f+(0nz346C7YT{63RYq#1FegAlwd28C_1^ zF!`JK9L_gAjg&=`#bhgF=}gh2s+Q_bwjp+j!HvL`0Vu$$4#aKaSL)2hx6~K4E_zsH z$zSq(<6Z=>0ws83uLMy-os}boBvH9$J8sNL@zegS>n@qDN`Obl63om=W+aop z$>{G*@mTC^y^r&Hcq;hE@76xLOOtrk)`{tP z@~B9qja!+J{GyYRkR>mXf$jX;7}~Zjn$E2pp9%D6650A*&^Qquz`UWlm6j3F3Hw5qHB6+em6jqi_QZPm2#O_bY#bUBKyY;b{ zs*_&5Zb2Ls;6m=i`&jMSBSE{%E0vBU4DvFnljEfwC#Rt5430!Yb5vT4toB!ShaC(1 zX;LS#-?yY$;;%9F7mOo|ednni55;QNn=gWRu-WJ3B*TaK-;$G$Z%IV&T5>@C6AG|C zv6dMa^Ib=!v)WGa$LI0W(4W>ZGl13XqMf|jwh**4$J`y!%O>DRsNS#Mv=>HoKD04h zo;Jc@pJw>V?eorJu0h=;kb=H6j*Gx(oN&ir>Ik`UYgXjh?p>8s zFPmmAW*&GmjWU%^g;U$EVP-(GG1=WmI zMLC=!I>lc-3?XA#(n&Zj&-7rrS&eov)X0$$hS134ui`IS#^mZxM*S(C3so$}(N6@Z zc4TyIh(A&G5wTK12l$Um`azFeS?W(!CHRj+P*t-|m9A0S)KV+_+-qB5VAGtVEJ+X+ zFQ35itR%2HvDJ)^QZg{X3_lcUJVwyqFc9%rYegJu0@Vam&O}XGy^ou}6)2$be z!n($C)9;YZ*o^WMWb6Q5HGPLTX~ZL?18h0R0F;2zH`(jHgMDeD=Ch8DL#VXNK5Gc@ zvn=fJD0_7y*_U^*3_!#07GZ;l9rx(|yN_S!oNiJ_PmQUl#%CZ5ImMEwijOO&(v5D% z!rWnpVJSdQ1LB4In7g%dIO{W0y-IlO)VE#Cb62qo2aZ^sd#j@WLH_{V;+5Sq@RPvD zi_A$&PxW^VO@$1X6^6E^h6HXgNwDr2y=xVaJhYvj-4uGJYO(4)H=5FUdw4AU39;EK zQW)lfQQ3#$O$4jFb}LM~JT@U`ic}$yh(E-7OVOz{baLwLU1#lgrZ>p5vSk!jnUi|x(|N2 zTt=bdHps;vD6Q~ak}QM(sE}>26UWBFY`e6GzERb>8&YViev6&Qyb-&Vt$Ht=p>PiS z*RrFJExlt5f;rT8c$e>57o}RGT}d3(D;gMXUptw&td+Qfvn@pJCD})Q(R|X8w6jJ? z-$Hcj0idY)7|6W)^CAn`Y1Mr$+b-u}w&DumiQxoii0#bC{<-_!TMdfN(|Q?E3WA^?N z(%2on!*3bhkM#=xB$CFTv3k60!_sjCWYLrmJkb?yR@OG(m(Ev>l|wX&oLgs#So=vE z#&_G-Mqd8_SF8trk&VITvo;o{Cl!&%*kYr~r%rnXL$E;dd1%5YgD~ebr6P=a&g!6_ z8gtGBHOybwmU~stFo&o+&8380an-re_M`_=#Gohtre+jHhU)? z%r0ewa>W~t{Hsw4D@U>Jts>1b`=#&z00003umi9I>I3+n!UIm^aF*~rVbbv^&FMQe z`+|VupTRt23|xsLtsiXWtiRVrj0s>AtJ! z)=1;^7Cobh*}V%VUzFI)jB0igRkg$o$k?GkU%=6H3lUA#O#6 zwK|Zz^UWh2f~0YR$Mc_H9mxa652ji-qnO&-$E-8Kk<=1KY+y7UR*u)3JbM-N@x`LD z@v|?QWGjoRK@ThDpq-CWHf z_=5pu@j5#lGVT%KUQy1-cTn|VoLiNFV)+}JqbgNJ`8hN_2I}m2sJOw?zM{&}WS7=3 z;&NQfuHYyhQq{3BwFlBqK(%%SPvFSNjf{IOLb*Q>shZO!#op4!K0QbP^+V(09BNN4~!2|G+$Wp6?A7;#5k=*S}#YyYseKK zcAfTAT$HW4MI*3JI7`PJYiDNkD@-guQhGtFI%{uym48pc%;aPB1r=#1Swr46oQ=&Z zMRqM-bKlzxlSj0N@32>%)X~?i47Myx>l`pa8%r#*G1*c$&@;O+>=i*L#*^r_pV3&j zbFiFN#fJ1eO-Sm-@5jxZm%P?y zD5|D=Gc(UARaNHaiiOw@;urDsa+PJJk*8YqNtCR$twNK+>U(<8$Qge@+i~p&e;TLY z<)<=oNo!7Cv4EZTZ$x$U+;1-Ad1%a*Yl2U3Czdq>WQlxdx+l~u5uN@fIeM^@wVX79 z@0x%XGs;@Tn|~ z`>0)p(Z?J}vBZfSXrWR#)FL8|!BtcRRRgd9Y(I!v#$&GyuF$1yckO1ZGy6uz@QB{- z-=oF8n`kS)=#3+SW888~d=R&Dx%Ht~+uQm4FG+fEq!FZXJ-;eB7=KE%g-`T@;+~7r z82&zorf^mGuK;7k(+7`!+n9;>pAp3zOTsA9B_E3#DlgUSPzSU4wYrtB)w4$A5!tD3 z32RxeGKY$2CPN&tNR7B;bYiRzxcJa_Ec8#QSGsALu_@8ouFt1v>+^Pky}K?FIj`I}Ec&u=IPC_8u~w5YfFrt7kvaEm2O%Sk`&;USiLald4a7B7#ZS z*oSTQjc=>gVy>x{l<*Cxw5FueS57}tVRATYTW+a(w2-XH?vlKuc{U0o&yKIZ$? zdiE{N9eS`$X2h%#C?JjInn!NIV~#M+>`$;LB>2*w2Q5i*teMSyexFXXauZjRc3&p7j^T1WU(j7Jr)vSxJS=uHQlNtFxy(oD6Hl=9jY#KI zl7C;g^J1%y3^!UcjuH&UYb&TSHgegk_HtPpax|0Lw<}94vl4a%j>wC?$r=TX2dat( zZ?n}bCl>X#UbznxD^f*gtIOyxryx};y9shqK?xgIlg0}Pj?;L2 zb_){#ua3pliltb+r-Wl}ayG-9vbQN_koS^TcRkzW^#?^z*ZNl{rtffxtwqj-#*fWx zenu_YrNmxHTg#KQsIH!D4J2HEef)GUU1V#^ccl8*%U4!uQt)G1;Z-?IL<*u9p<}V0 zT9EOUCk4%%bdb)CAcl4yW2aqp)LJsP#2K3K>fIYKFxtT7c9o;ACd(qwvog!&C|>JU zbeg9A$fIM=#h#V)!>cg1Q>0psuAa`cFFlP9pOvC-IYA~mzP$D!3`f(da#R(aIY~`9 zELyKYYYh=#SJe0nhAYf0AhR?jsM_LoW~+KGbu0jVzEsRq_FxZhy&^P>5fz=-fU1DA zF+RW)Zb?4iJZQgz&bQR4GI`XCL}|o`S+SVZf56|-dpDV0gv|`h84om?+f%4iZfyM! z(`){ebY=-Cbi*8)!&r!XiyG4>w6rVD?2+khx0*hXNO9|4zYaca`=BtBRBFvbtg@44 zbskQ}O7zF+N_L6}_as49x^afI3BRcnD2P6-`~9A+^(L21bhP;M+06Hu zKMyQ?(3*7j6ImdRUZg5~$&<%GbQO$7CdRwes`KkDWYXWUX3qYRR~u$QJTR3z2&K5e zZdeMdvbA_N9!B5AY|*84cwDDe+IBo_*NS!Adk)g84aWVxuXl@mJJ7ek(OORfAtatd z9bPuwy{DXLjlbvL!09JV!3XU}72Cgbl#l5KU61HJyi?G+Gatjy^tJ{9oAG7FROC1I z`ppq;`+LubYr$Crb>M~s005B2kst%u0-#U;_YJ#$vE5ziy>6swX{aZc4tE{S_MN=! z(Te#1zk!xW!EsjNsD^EW2;a%F5#G8lj)e6(#;M0y(fXX2HMWy4M*MU3n;}-5o{Q;k z?Nf5Ji|Dx!uH~jxwb^WNkL=LMU&Y#r?l$eLeaKieHmO*awTRev1to=%*ZL2QIq;Ov zEp^0o7X^vxCJe@6bjd+l461hGBo^AOn${oQ?Pil&ko_C5x3A;kPlI1jVR^Ax?59g} zQaAbsDvfIw&Aaayo@px>`5k~<)gC`ZYbxw~WWEd9#MSu6N9Q!wx5qcomlu62P5%G{ zI@x1LI}YJu$W7bYM~t6F`lW~r*K|IA%TJ{>N@pVg{{Z^f_O&0o^0)D45tXLJE#op3 zTzgiFOR*lqm zLHu~JH$1JqyO~}kiALSa7XS}w@q_p>^;a&y+{Mw;)qv$CtjCfS6yjBmf?DeMU1s7rKI#w6Y$oc-P#0j!psdl7gt%M3(}6J zV|taRqq`ppxymaYeEutcoT+nSzI1ARV@lg2$yv_jM<^sdbWT3Z6VF;$=dCog=ZS;G zG!i^g#_D$rk|9?{2e>Lh9yFK2Ls;SAhZUsZK7ud=>uuFdi4CVT- zkOKXZNxdNq;O6MNiGpCz!jC=3I2FQlx*r*-+Wcnl3d`}~1L*}JK?$YDpk0}@* zS$u4^xc+W@d|Sb0=sAw|A16)0Ag!7fp{{YET;}@WHzG#KS=`BT& zdY3(J)o^!<8v*o8TtDFGSK(a0*DQ-9&G^zW`5LcO;q-0}?x4?g z-FOH~HQG-rAyp)c%Qjqjy({WwGpSevyB7+XxOjy7hK(5$k%)pjgY z27*TOqJNc-%w_Qs39(sBjy7TJmWA6idp&~q3cYX>YqkDs@BZM z{V9}!*eCOy&xpPi9Z&;niKa4NTU)_|<@#2YnvoCrk*|-sr(FB=-h?OX_?sc$^Zx+d zj}P#v>L>l}i_x^3+|}^bxexl>oP+E4d(Vug!bhwbNc^Lz*B=*smlKP{Sz#J~Fz`S7&z_jZL1(s~$!>nOn2Nx%#1bj7$9p2g>U2S1EMzjCkyFE>l_M zfQJo-i|3vvuuM>0xe6aJ!e-ekz`r|oZ<>$Q5;}Bqr4#A4v#s@uoQ}WL9&MX*%-(3l zMQp5%RxQULOm53+W$hAyPO(@K+JC%tLqul!f2domJvfhxL&|Msr_k`HdWx!>R|G4t z5jr7~@}Mmg+hkz^MW3F6*VrDSV4=<6=lq!O(3F958FP;BR?-jYF-p6|JbOtQAolqb z@)z;atoZxaC{Cw!nw^=d%A|YNNL?Hs(0pO~+0{%LUqaT|sTEG*ER5@xgzfoJWYW?w z{LBda-XQo?byY^!B-6P+XCrR~1YEZI*BvDozp63dd@6O<<7v$Z$MTLFA-Vpn$A|b- z^#}gh1Zg z{+;|~wf?ux^BH|xsBfg5-Wl@OO?LkP`*ARX{{XA-Nn^PrlkFt#PxSnqMX0d)Qx9`H zp1U0kWf=L*Je#p3_Kp~0K+;cQXW1cwC21sb6;$}vaCJwo*D2@mI7<-dq{|#mpN2^z zjwMOvQM?%HZaeO}cNmR+=%`*`n@8m1;HP>#TDK zrrt64{;GAJu8(o1bhUrBJ$rqHYM7dc*4G^@p-gh$iVfZ6D#4(lpF1bvB{4(mH%j_H zV-J1x?!L0w&3%*eCuXrAvs(--d2AzqGV%22m3)snBjnYDwOU|B$>jUV0f7Vp2q1zt z1RrQ4-VeNZ*4;SNeKXHk>SswKEd!UEQ)vYaC3{ub`Oeg;sNJgq(oSnceCjW}ls;$p zI&|Zy`gf@~&q~G1=-E2KS1W|Fz+Is)ZT(%B&#YT<6{y#PeFqWB8a4a&xYycmr`U(f zY8$HvA;l^&aeMhG(Mx(gI5!;F_6;kPf*rw{R0MCUbuG8uwN`8`JE3 zjTTQmw6QIVWDyjCr;y~>$~OkHBg2o!G)p&{FygA>v7(J8#?$l~rnWtx6<(AL3N&?I zu{SlGJ_Sm-r~sL|B-CXsm6i5RR)cF77XM=F{Y$E|b7CG8%Z zbe zT31fXZYAXN_|Uz1j%<(Ghg0$Y0BL%@83l1ArFd~!7C(c3F~N?6l90_HvD9^bxo1Fu-zCC{~e4NU7zXFC`osgGGK(5E)UpFUc_ zjk%%VeI3%1D@#vgCG1VZvGU*z%oNcqfotTbBrIQp%as_4cQ4!Rv(8D5NI!~AC z29~#k>aHl`^%j}3xUD^{sm&YZvNWr2!KZfxuhWHsBvV@o_F|KiMhgif&lafa_e6ZU zn#Pms?GGHH7^j!VRw{O3H3=Kd*dOk(d9XOyqm`6{_m^~yS>$CzKv~_`Dyo6GW@E4b4&;-t9yPzh z3rK01pAmr)>pe)z#yjkHwj6iqnele%`{bl-flX% zo;=0c$8|B!3mC1;Bwg2yvqr0{dA^A_2s~i)hfca7rtW3dIH|=-sW~k{e}wsK-T4R> zMMY+5<>Hm`^rJXHNK>b_RurKZV${T3_^J76$_4 z#_YKXH=3ZIjXK{sR>Ysp4Kvn?`5kSZ&>G7R_NSDJ^sr##y(%;rN?dry6!SA0=G~P;n3H?6{ zB~5RowKk8)Z?pNdn%y<-o9<*3vLS$ed`31w!Aa-IksA}%UYBO0St@IM3>^2`Jf+3M zP546|-d0=C-;*%)Q*KP8I)a2Zh;=TUutL|*;b&sJz=tbFLQ~tw1e}t)5#QP3OvWN5 z=Pp+r8gb{!OVyEheqQY;9D98)XN$V;L}QRie^_aXXxs5NGuXJfkO?9%_JNVM2h~8# zeZ$6U;T6)1F6uP{<>d+-MTMne=O9CD1&3HE2Hkcj)|Hg9mH|&M2d>)tS6K8unsmD> zVmWyTvl@jYhNOFQJnVT*4mJbFiz>;QV$Zxtvaw!6qkUEC4>Q$$eD!g1JaUaar@Xd8 zLkSfo30}4~Hm=}#WueNF%CdQ(kx9{=G0|EIFf`^C3iix?T-iCxTFK5o8=bk!IxBnP zgUN^LjDHi>9WBth>yzp%1zQ(PVl>KE=SwJxyo_VhYP3?yk(XvzY#E^4j`1D*NziR| zqvLkzUsEzz_`{ha!sgEOcV`aYISe+cawNMRc#oZJgpb{y#G23H8>3)fkMtflTGoY? z9`2v#E%||d0GimdH2waWm2irYDd#@{?5psbj;{pO9X8gOd3>_YwQ8-eToM=}WLFHv zFnbp)4*Tw%yg~4&>2#~Sqf%3G?TXGKBO;JUD&C8F%5FCA>-+w_z@On!()icr6H?xg z{TOQEAriUV4lC(b>nASz{V+Rwci0mnp>uN(=i}KC@og>W6jRMJb38yB~`x> z!?9!AhlSPu00|9cSey=r#%PMuv#MRr@{c13S9po^OrcrRi5$brgxXaLECJ(jy7UuT z>losGs&z9bksO4NhQe&L6@&8pB+*x>Tya7faSP?1OB;3$bcahcCWhlCp40Vf-Bc)Y zmU-RDuwo1U01dR#%M!T&v{lS7`m6JPsM|4`#OeAHs#2!}RjSs31aQFwC=w{6Mc67L0H6=%hfq3UraFxUCC$S$7je_YEiA1T zSaL8%lO(fMS(zLf_5$&Bb#EKyUu@y>nV~q^<>;#T99Ai&5#fSEj z#d%2OosV)@_*M)9DGaOwD=FMCJ;4NaAdcXVZ;Xa38JDj0GPvqFIMyl=G_55?vMgk(WBjguNR21u$=79W=o4jKfbZPwJZeoy_#0Y!y3|`=9%d`z*_v|? zqpa^5dCCM*`GtJWTnRwjc=8;%FO5^HZ(%Z+j6N?4a~JZ_T9zpNGCF`QZX2k16scku zx2#ZXy@@Ap6YGsrj9*I4=v#GhvHI4n)yUVn)u9L1nWBXl5QDi7BtvfH$BcGDu2zj) zjVV0pw&6*keTtHfH`$c;M^oy$H+5iC_Z~H-q?b(MQr&9FYVEs~@${jU_(kW~<+IA$ zf)Q04+3j+Gl~Pz~)2jTr#;9B`Fd;Q$#5J#2v6#-5BCxz;@`t0WZ4|P3jAkvw1m)vZ z<|e>t{FYk0amzhOm7_^{d1andh!^5R5WM+p2;XhD9y0o;;+-A#&n0zfPCliCt;qR) zlW;__p>L(-EV6?8dfr-{wmrro&bj!${j9}2B-R>}TE$bLEb+>06lRKz$C->DkgYsZ zaNM6@@8dbBvlwk925QX;^|HnB@!F#A=R*vZY{v|$9w`p{D{i|;;ZJT)w&hPHR{W(0 z`o{kNF4jVwIVweJ#Bj@cz^hU=KD_g?vjjx|pJJWZ?4z(O3oicvWU9Aj0E6uW1OEV@ z$HnwN+%*3HR)_xpgU7}6J-&laaqRvL5B~rMfB@_O1M>~OMt`O{*Qxsc%j?@w(CO}+ zy&K^17}@zQaW)Pmm)7%QmPnh?@7a}BSht$4JVvFgnpEmzsny5OuN6vEtHV;ISP^4_ zy=w8SP{9;yvZQfFs)(R$6aoCw*1A6xuJrBgH<&h3rO>PgpDU{W0QVCU{{Selzy5EIqJP~z0sjCisDJ6J{f&8+sf5=WGbek@6>C$76P#+AgHT?cd1#SqBat%MuBOZ}I#re!;AmDw zW6zJQe<*F@w2t_gC1xf@$HyUk{bJ_0V%z7q_@$jtA?G*tzdoq+MLaei-4F`0jiGBNrdBM%S7vDgcYv*w!P&9z(0EhNdy)Ne6B z;=Q{a6XydF&P9E;`geNU$I8fO^#wyvwq+RM?FrHgS~vR@fxWtAYB80sKS5b~KyLnF%=jX0{K z@R2pv3L5$gsDT!s$On%W17` zdo=M+UM!9t{zucsLaR3kWQ9sbBCvsr^Y?pqP^31cpErA4>FjnFF)lV6xGOTd?(YzW zMx4tsRzEcM{J7)vca?r=)HdT{8#9Q%psisuR5c!RBOT1mY;I1TUe~5aVjFyC7 zuD(l!XA(@NP{}d{b(3D{?>|~;DNbK88|JQ9t-LlNh~na?wTgUJQn)ZPHHjWal+Mh@ z+qZ8RY+uCmBBAkyMz%A!V8Sshud!Ox(nIsJFlRe5K@`&Zo;pR6>NaN!kjwQBom_O8JL2vJ zgmC&jx|q8a;*ddNzU?G2Bexpy-D8th7CkRz^nd2JR&za0(}xe9(D>T9ye>4)E~LXO zO*TsGBn~DeRB613V^=(=^0JdMyTLRH$~tY;9Y55}Y}T<$W}ZTal(~FO#3ForvYA#f z=P2?gic5KTRY}rS{XJE)rS_V~-qlBb@4qoRm@GKR$ZV6qyeY$Gj{2k?gT#xsE z8GL3={IxIevF-D4AeWraxd29+j!o{|c-A;sbq1WtV&Ez)PZG6$XNno%ktU5?_t{yK zi9YT3@k>3fEznF9I!4Ai{8ZzoE@vSq_`WudFD^?d8p4ZUuu@`&YPwltvM`YlAazDRxO%O zG6$?C1HTjH@nXk)xT!wR8iJjRdRs3-yk<*QFqbPu5Zia2N^crQJ=>Qdd}OeBX*y$z z#79PV$wM9+&8DCklgYOXl7hSKylJ^{zpJs|+2d5=ayNAjgtJzxlR=Hh%Pr|wZWW^m zT=JCf*dHx|{cJdn%-aP}JCaVodwgJe!J~CPv6n{a`%>j>MM8V6mZu+`hi8IB zSF0VhW9Byp^A^IXsQYTx{`&$ zsqO4!M;kh;59YlrUNaij-ye^qMeo=)?=?EG);8@jsv9;;D4ulX5md`3Cm}}X#%r*ywGpMJ*Bmp?5U#NkBo&pRSsoc)!pdacuau%ghs|Pj4n7R7 z6Cqb8jrsdPEnZJV)+o?O-pwGOJMJV*DmLOT6 zOEB50(?qE|JW*IM+GwWoJeSd$4@_t*V&e4PHad}>_ANipU%e;3Tb9^)lQ-n2s|-Wb zhB(j#{%vJ(7`){vvDu7$Je?WWjJ0mpj>IlLz7i_{!|_~f%6q8?#*fjM4GW1lT{%^% zP-~WMvPmn?D@|$nHz}mvM_7;~5c4d{3{k0OAhFB!*GOs2ZF5FyIC7XnU(vlEIdY>6 zO}3sGYNE_d3v)^CdrD6(DxpjmM2uPdkv) z*=l-cB_1O^Jx5GtMp)8VtJ&NYGAqM42*5OD#4q_&p_dEk~$s+12{T zke#x*H+k#Sv+Xj{hI1sZI=9iga!ITM>%=RPNAr79X+1lu@$zFe9ww$%q>9QG#D6;p zVYiu9%5kw)VeMIK%N&Y(hVi5HeiK6A;M3ZE2ZJ93)@L4chH2%R)Xg-KPcs10u;d~_ z-$oeYjCMieR`u4Nh1HgDdY4LS3b-|DvD4KM*D_PI^1`xC$rOtaniw6K39US{pDJCe zH>=A|YJ3*0#-?9R63Q4V|8xi;KxL zQOuRCjhZteOAUqck8Z$hr0bmHIgVp|VU&qkO)s~J*om=#$Qj=A=1a>RRr?$@&s>t8c zJYet`Z8eWfRtFtd6^@Qs=SpxLUUCQn3S zu$qHRtym-YqE=6ggz6crS=r^IDdbop#a?>{iX#X~EC)?BrgK{2Zrji4E4oJhKKaMV zPUB2{C53ow8xSpuwI*1$omXPAFCaq9`yH(1v2?80rE?`ht;=fdR;`Wpq9Oz53MX9Yc(E9CVhgyRl0`XsYO&b?TzLIjq zbRVaBG2pibE8~o`w7q3h8*cQi9h~Cs?(XjH6bbGSpt!pi*8su2xVuXW6o&xCDNtMr z#jQYr-^n@u7w7o^=b6dtd*+r&viDx=T38uOhC<)ZZ|2FpRqKbx99PrH`&0=%S!lI# zjoe>6Q(LaNWQ~9(sd!_wAmQZoHc`LwaxB4LT zIHWtHjz4fi6t!-`Alt;iXZ%GXn@S#lPa<40Cv%>)@1Fmdwux1?eMTfr{Bh#rjmXxV zB4@uXn{9>4LJg;JmyzgJg~r9FseK~(pDHv6gDEJ>A8YI$1WeqGeHP6ym`G0wBr$T3 z#c&BI4iZR4yo&OwGwVE4SsEf*Z>Qw2npcdz;#Yf-mGGaUkf+>hsSwf|H-uw+HHo$` zb7zo!%wM*f;8CznjHO}y{z~6xUf6F*iKWb{`)h_rubOax^Wap7W3pAA!amtwE+>7( zzhGMD+u`S(5gtW*P+JYh#2LU%>mHl>cz6+3(fq9%bcE@%-4j=>dM(iZk3ce3obV+1 z7VKarbEA@SrL2Tey^WosxGI%@YMSl&{1vF%dFB=G3XJ^v8dG;$GMbGMYN|^Q_p94d zkI;UdFQf9o0>yYAH0RjALt=B3?SMC5Zd#+!xfxw!)sGa6KHML)00^y9xjLu`wI93x z#}9<#Dqa@d%If2>)!`-FgV36c{$-~*UcBQE%&gp|C0<||2A{a)`qB$GA3_VO;$|G# zGGh$KHYS5iC$hngt`pM4C6r1m$BlL&Iv&nZB)9LIpYzhVYN%5J6)2R%Py;RUCZZ7LHN(7$s41v zNTD&o-pBz(Wh~q;1JW>xvYb5ENH4Q+v@BUb|nN^avMmeFfH9 z#K6Y}jo8Q>Pe&uPMD6tBo7w z6pQn$0OHJVd+QM>o|iWXBQ_p-Yt%903!@9ljzm>b4T9_m)NXFHpK(RMjTE>}bzN%x z2hiAP<^-Wsx8<4C5@fTk@hP;&IwaldQ>>7Ze4Yu7YJw>%lUHl|mE{!coQ93e^1*aF z>3ma+zM>!4IBMIb2;w5=-i=RwMz$jZY7>$s$V;5*csGCcvoOO_8drpUvZ*RxLxZ|p zOs0py=-#tDWitjB8O$WMF+T?*5fPx;qS@j%`?gaeA=cCO( zbYMvLS6RQ)_ae>8bn&UGOa+3DT4C;_BX+MJlZ)PytKG<3%R(dhROSWNtr&5u@{dS$ z606!*HJQ?ie0Q}aQ zDS0H0(s%~0gLH%qna4C?@;B2bb;2Wmu;?B{1=jZ@Q%OF3d#Pm%ufRr(L2N}s@lsuf zdw_&Eb1bjF@upANa4B#MIme&G4_na&^Nt_b<4p__S^r_(ynh;aJ_$hpF-=qkGN-gt zp(67+1oOE8uCQclBt``WUyB}`IngC?2TICsLIexv{bC$C; z?Pxyg?|l2&H9H_ct+hT*D~c+~d&N%x`OLv&GE3s|>1ZOcs26j{W5k|;g)tuRzxVmZ z@J~X~{%gu>!d^kb&w*OqkIZKhBRur5 zbhNEprDTVOG3Q13uArvmlw0~g0IZ2}2fC>ZU-m0`XIheeF>{ZXhQoehfni~(#Mb?m zL?V$7ot&bvn_vGx{oYFuOwRU84XXoXMv;`9lSX;ZD+eQK&<7V8GvRi^$VaV03gW;eysCy3Q>~yQ1!4myv|p2dn@^GT@jImGAD5RQ~zkJ*%0TOKLg;ob-YN z!G#mMZ3`kPF9(f~m!F%q^@xe2CSMIT(`lxstHv^B57}|Ilb98OM>WC<>Xqv{9;M~D zgn^DRAwD;@b-LYpS`1lDdhL@csRWDsM2yJq#yhTu`x4*ejesTGP4}H-&*&n{o$>uA zMs;fI_ezdrQ0=aRsq9hq!{?C!)3~2KNMiMB`}gJ{7G+B|LByv=4r`eO_!>E1+Kxp* z9gKcQ$JkXPuFEa!R2+R3Q#B7@enm}zAJ*?2qREhRIY$nZ=d6o4+_%^iPM}gvCwIf?qVtWJgugM`!w@RR@U_9x0 zE&nGn(0>44`g=Udcfst!k&QFtw8SwW-=~jeha>aWU+EXv=nVmR{s}hHinP1mF1jub zYDhK$B)A|G`}_AMX=fYABH60s37&2S4@G%%x4do_o4;Ca>h=qO&KL%%`J)fltp_{Y z8Q_6p;5OTN%h1JrveWOlu3azxb+vSr{C>3`3qJS;j@C?E+e~9xs-HjQtNpE8FBVHB zXq~p*YKIn1{S5GO?QL-BTkI_SR`)}&ZYzhBah>0;VPxCE%85tSk4+3UVrfoAa9U zBOiLoioO!aQjns3tB4joCR)}N1Iw>?#H8ZLz`ia3Qsa$FjVF!liLy}Oowjf+1f3rt;J-oh2+NQfb{}G!+vPabvBa^X z%bm#Ema2K%o$jx_cB?FnK}oAL=dy6A_HK+`BJ8WaRS4q5S-(YIL(f))Lo4yr=co6m zwp-l!HwWuSuP$$zJaXEfjD8=CDtSUmZJ!qdRp^?zS+Th|XWr7q?{bv~>$NUIWrl(~oa=^c)FJ^KYyQ#^NP-+FG=mDGt z6HAke%Ytn}^%IW8B&Xj$$&Ld_Pef9Fw5945J$3hw*DZ;P2Wq%gEp=Hp7miJEAfqde zX~d|Cx?9+kD5vIeQx5CeVg*bQaOGU*FBx^3kR@`s5u+f*yO_roj{ho5i0Q^f=r!68 z`{ylHN;^HR&7ItYbyQ?n!Pg1Fl}D$t7Z08q{$We?*oqI{$xaH*53M0kNU=ru~n4kWpMNb#1RZUw#& zR}P<=NwY7!&I_lW>~+UN1Z|bl2`hGH46I0>QZ^%){nq`(-CHh0WW6fOc^d7%Mpd(5R9k@MN_+uVo!H?FWxYSK#*A$SVZ ziob4|%;!ZA*@t6}3xdc?{2EH6&S&{>Ip?P@F0>JKU|gf*VJs%{kM79p(T!~iVeMBm zObOs?%;-&mk|2&O+s;GNqIg8lvK|E0B78j=Yze5&7(bMlmzmVHvQBg| z+?qe}{H=FU{y+QoF-%J*YX{89Y(*npj$)m-K2p9ar%%k6wFKu^P=n8coLCIn^;w9gHMZE}l~uYDeAX6f6vJZn{5EuKfMT ziLK!S(NSyD32Xo~JPWmoOiD(`ccx03dH7`p7O+L@`st%@j(;7i{3^c$<@?!fG7!hC zUlr?bYN4SGGIEO&rlpn5xSyJD&;M1*v{A4sNJ+9kQ8f zhdbc*M{-wl{P_Si_{ua?cbcN#PC1juC{u~4HqQ5MTcARp$-#C-ay|w(^NpD@bMe_+ z9Ol8zYw^x>)MCtE)UFIFJhy|iN`+LZ7Ot7^T~MrirJuv1mk|VGP?ngq+p zY1CD*Uf?}7KN!bmPDBV9|FlwfhjnB#!_nYl3O zi0$<(;^adykTSP;RA&k)KJTZk;UTu?Q$Mv{3EA8S{%)~g;)?mykd%a?b6{w7w7MK? zr4hqLtKAV!Xg~6y_8We)&o^RqE9aAI{ZJI<*g+*Dmx^{$4(~i`-?rnAy53moJhZ6| z1vh?3A8eJRR`r?h)3EQlfsSW=1^8TiGbE}$#f=r(cC~Jtul2b8je6-B=;|W&AVHUTYj|lBE2BZypLxv`_Sjb z$CsP$-)cf|M-xwkK4+9Vd;1gNP1QvhTWvq0=F|o>Qxrt|b zkeWtOaWuB0(w{9(P_i;Ck#qg%(tA1E*@zCfj32e8d%0-7bp$5-u76DH#_bt!6iQ_HC9hh<0XfruLY| z0ZTQV9c7Ks7%m5e1D#UXEmB~lyDw0T#$Yc-N2YthMsl@?KrkgVfns3CYPiRx-1|WP zG^y9vGcbg6^7qMg@_1o8t6+7aHj&e#kbzZ0VZ=`ri9B+vt<|~W)tBbU(z@zV&~^G0 z!RqcP>@Of4h&G$ZA9Og;cgxXKsfwgO`HNqKT$t}gX@wUaIBe3&@EfY#zzLj;v6iV2 z8bvzjI~V#JEO-omS-IqQBl7s!RZ~z{-g-l%D;BCN&8(M}s$-O@eW|ql9{^RPjPzT?gS?d&q;+`VT0jWs9ogQ&D6F9EA>Q>znb^XVOJApE<(C&T~1y}DGD z*Ee`lG73C!1#$37#7!JVZGCtVshA8nf8=kJM5B61$n3tOJ*IBjyzUKV`_V$u1j6UJ zFZ+TfBV^H(q&JFQ5K$KzjXUuzj~Sc&I6&|tGo9%Hd;AfvMf3!{SdV)qS)O6_r`Y+n z5#Ny(Gq#kE-*5PhOuyr6^i!@mW9J7Hh}(+}?tSNs@8FRs3c-pT0`Fr^q+;iKt`WId z;&wJ#8}e-hP;znKU$1ngdOi4ZhV@lv?ri!UI=E=d{5sB0$45 z^H1L(Sw8E&P6b;t2<&NLT4R&+i;|xB`vER9+4T*)9PI?3O7kNoC<;BAz{Up%9} z9pri5Hiogca9Co(@atb{62hk)jul*27blt|`~R8x{|6v-taWl`G-9R6ud?qo`jS%V zML-0qgcE|zf$#MZA%Oi1dc)k1KZJD^!>6#Qwh!qVT{lZLN;%!inbKiN9;WnGFFut9 z;<~Xf%~iQAgPyz-RlDSlg*c&1@Z;4|HbT7CJ{{8W5z;6Hmu4Qvq`zYa0ix||^38Ywgl8!*jq*$#Oh|NPawP>oc z=q9t})KfX*t-mWMvgL~!^7EHTjx3k1B-y66xRFpl;l19~C6iV|$T!cGBJ43it$YWu z*Iy*DVb-+1sKdFO-I|}dZRPX`-TT_%o6b?y`%q3g~izqm@!emBIC{+)w_Y z7A2A5G*!DMblaNE#7bY8+0_|7r(}q5SN&%H({P;CQ#QvD3#(m;D%=((uX5evvD#`1H^|E5kll!! zikQ<%goQizMlrimPx@sfL}1j#`i+9RV)WGKpM?~`lP1oXhaF>x*!580r@xeTkv+Za1zm?0%C zdBIY}m%8He;n3<>TFF+KQ3?nzEueb2kNIeQtZG_>iX1aG26_-ur1452tHz#ogl!IG zJaq=Bg)x<(q=nKakZa7(1abcm0soY!@pEw1+2ok9%5Qme9Od`}>^Yda04->QidFgd zfM6Y!lKiswB-g|clnLScre`(NF{TM=+k>|cCP?Kx1ZmXVuSMXbGV{vCl+|Wkn;&(| zm8!_5338b)cII>c!_;fl;gx|teE*m_W^F$MmBq25=v_z0R`!4)#a8x@jijLj20FLh ziZMT?W%1ghxyQ8nX}3ql0w_3kg?*{iQqeM5U2JW6e7VO($C|(#UYA9+0EGz7h?7l^YA6-5)%EwHr|09&n0n*vw`;(hT0r z5aF5h+x|_R`!!fiND|#jC+s2v=SY|tis^mU&0$C%*h24oUdhxsbrSh^=_et{Us$2? z_Mj>qJYkl(m+9gFS#Bf5Ab8wg64HUu@u{d% z{+)rG>$(ckOsl!1e!S!E18(9^L=l;>XYT(*@9jDw;VP>ClJVjklF3}u!_ zLlqjI1D=C*Nh&O_OL&FWZX3spZk*J-S;!Lgh&ua&&+_LFaD6QM5(jd8U0pTu36;!w zfnCjDr(#1^`=wKo_@~u0zo4owk5oreo~23b4aHv7__0}zNRszZr)YbT;}5+K*;}h= zn9?+D{hq-EMSpuAo^DXK{sRz!MShW^zrpk{^AZqwdb_Nl;W0 zrL0uhG~@38HUECDunlS8{U95p>*qs<^^17B!zFg{ADiZj!MM&?{sL({pBJZZe(+^M`jFT3UjPksW0LDE2 zws5no0g1KAby_ntXA5+p-Hf(h<4CG>4I=gf{l3@)1R_CIeD#LJHZ`N9(ogBxK9;az z9l|h=Nw}>jHrUNiWpFkCM2HK3n4vfV>u#Jh>(qfYmOG#E&Pf}0?+f)FA%?$xma>DH z={~Sa_Gvsx6@`4(*C;VC3lBpWJ(&QUU9t~N|NCLu$aF9}g6ZEMaaeB8x&?o{)tz_E zCx^>vyJ(12A?G<`YPpLM^3P@7#qX~qEoP^r5G(`2T>TFYen#x5SKqe2hk1P#+xlay zsd6+ z+UfL4C?n%SZ17idZzP6J0~~+6>f;l3PCe6ihJm<+G->2oYXe0_Th+EKDpm|N7N-`7 zD?FJk%v2ZffA&)?;f#8jG``v%P|alJQgplT5a<>x8H`JDDT>zwn<+CD-Jj7sC|M7_n&;eN zIYGau##(zl*9zTj)ax#Wmvd|cu3jB-M4MTx9elV&%-6YrdUm>4lwd|6Q5T#D5_9gV zR9ou6h{_{$a666d&dn+E<%8<8*m^xlt8v(xSrKBe&U+*-*oeDW6Ce?FTTvjU|tSp{NXx_ z41&_y(i(XXrG_S{R0o4&I=1(?G3pln(>L5Gg9ClJe6aY&EJtI9wsH-tzk9WF6@1`~K)F$X6_>AEvpiqvzU4D?Fq}%_pMIVsQ=S()8$Y$f8ESSF zRx&KJd=1yNLuBghCjmT6E`eP}XB6v=0KqNgfJXe`8*}Q`oZ0K=$oKmHeHVOK8g(mk zGa`zc^~$OgnD-JCUDUD^HpPl<`TvnAjEZw9z(8~L@Dk&MneISA)TQ$yemQNa{B`U=wdq6N#M{2l6-f}7a z_LtL6!d=K9unJer?gL0ipLuLiw^V3FVAP1}A;nkiQ4D8&ll7T;rU#H%kFPkvD?t0O zLLN4e&K_kQaKye~vn;T(d@1?i zzxm8y<*!-c7GqOj)bPA#g^9-)u5W6Cue(zT_D z(Q!M4cr(DSa6!?kR>_dE{69cFx=~z@aDt&0G^k&B4(id;1PG|Nd%JH5cUK|J2=~yL zi9gPpy0E7g2R9QMpVMv}U-~q4*p;W?h1J)E34>s82+5GZ9!hUG@A7UN$$H=%IWJvZ z!atSiP4RK^wl>^$*D4u-9&udo(X_E+=-W)=iHP@E;OTOR9rGM*D3?h=Tyl!`i%f@U z^}Z36<=7pg*WQyPMV2p0$4fA;Eaed2vc@WyWSGXui%Ug+c@!ZtB+05rC9#<&bG&{$ z=gvlYYtqQQI&(qr!vIxRgzKSL z%$hL$j;fZaI$IV5Ef-=mDOHUO6{~N|)67$$q2iBAdos6cn&!K$0Q6fE>RJfDZir=X z3tfZ1v}L^V`RsSaHe=T1Cw?n7F{$(Cokg71S%{05ls#+UYT(dIll`}rvBR{|J8o@i z2rV13f-Ekd(y5K>3N9^d85N&?`bBrTkFNj?jIZ%@Y7PRtb9S9S`Kl||<&Q6f9kxmj?xrlI)VwP=jOaUdc@A7O*P z7f{K+q`y?W*mB-Sx#&<*kv93Y!goETi{|qa*mCAU>7&$BA zyzv~xaZ)FY_jN=QiFf8X0M%ptic(RH{42=Jd5IfHo^>&ec}$t^5DZI4Al@~)FhJ3t zOFCdZY+KQ7J=dfTH;qYiue|7%_hq2)hOcO@c>7_ulUxzp>57K{t;|@=YzWoYJ;)=u zhdWlTqxXH4r?=(M5?f6tJmsnLgYU-kVI&?*|0t%ZHxf#`M3#1&h88#T?2S4@@FC8c zpk530Lgl1WQlSC>8gI5hX11`EUQj!rg$>10Do@3rCSy^J1oNs%b|YH`HJ0o83P&I_ zbD7|W&cZOIAg6#c0ghZLJy?JUtxnqUOmnK2;gw?jipmIzP0lA~^%O;4PH1PXNs9q{ z7EwJkTU0R8LdF0-&QMFxOFneSiJfPftakdK^Q_AFv>YN=4?T~Bx`<&Ff{eH`w%~g` zw$uq`osE{KjA*NyC+bnFA*yt$B#RS#joZwocv#!5<0v_|$Tqb#72j_pRu~mISak&S zNx-5?GX!9eA(da+8PaFUf}3JKA;QmgW+0-GKb{W_<&nalD<;@0WM(CFid1ad{md@L zxbBw^9}X4Y8^e%8ChtY(F&y%AF%0sITQ)9)Y#}=lg`aCr?S4<)k}X#4#*Xs546t=o zV>QRro}Dr}d`ft!FTEkgs9rSC)z6I8m8Fiidqu9MYQRwpI6Y|BUtY(>@b9+86P*5q zi_(~qZgi9Djl@B)(|i8)#>j}pc_I3f6TWHiX##G-sfF!Z zh%_l;wpyLNWWvGVavS$#uxpR7ftBYuT7Fl~U&WjWzC`t}u4LHBWstE-YqA&K=Ia`v zq$Tz5!PH@sy?pJW`+roaU{-Y-$i8pn4(>@H$Ox$h~147wIZQx$6 zs~AuhNTYHfgET)4QToHsMzstP{J9R%8lE?MJ*Cv)01YHy#GK;>1>&lZ9nRS_Y*v5YyIg z_bR>h$H=yWC(1ChF{kTfHAzB&W>>k_-hJ^g9dv3nRtPk%=H3X!K3;w|k_XY77M)%SDd8l zTCFCR>P2ZA&Ibl8zHe~x+RHXZ$I?1T23F%HwA!q`&)L+9A2~JSbiBpwSuSm}<%kQ| zEmdizm_S1};h`+;QYJy5WF6fpS)i=REF}|X>_Fjv03p8ST{fHi3r+SAi)x9*8WHGE zh|9#`U$MYdq9;Xre4Q(EbNUrUW2bmFRx(X~xdc+}`3lEX%qEJcG43Z$;ph19mFD5w ziS#9s5mP?voAAC|Gs|x)$Pc+eK?)J#KwSi=0doLi!nfR^e~*|^DJa$^kx3I9 zI$e@ZNmdqc(x2yYepj@jeTsB4uB@s}RAHk@FUu#@t4N=WQ>U*ts%IslxyfvcWiPBh z`tlu$n;+y?TO3sF6UnfQ3&#Qx4Wx`LtE24XJultw0*6R7RmIi{=;>;43Y@NKwDc+i z{wCG7UXlMRC5<99uu7_(M2t3#Szi4u$k#ZxM&m1C7t+mSUprcRP^V@Y+~V|Vo_F9V znxufg4=^xiQc729Q_=pgIN?5eyQ(w6Zzn$-4MYKxlhsY_WGJds;0K=2tfzgzEgNWn zV~d7Y-YOw1RLeDx%(}^+%qrP_l_oN*_b5(Fu@I0`KI!9p>l6^g*ENu36x0;& z0Lt=ZLRg9G`ih3BUjwG|fcUddc_Tb?YAR`x3QNoU4LGCO#OdX#WS8fyUtrxs)r~XPTJj@S46%Rp2&FkzYMQ{;n*T~n+JX6NHdX0HQ{k0Y{wDXQ&VJU< zS(+;^^g25&SO}P(kqxEOBVN=TL9ci5gZ758?4?oJjzO-4*% zWBZH}{QfdGS2V6Fw}?~IGhY;D>jx48gCUQX`sZ08Qnd_(6$V?Z1!^v~TWu5Dggd^Tq zt6O`up19%z1VvKeHDnUlh)Qn-S~#+LJpqT(F|v339}Hy88-C`Z{FZG&{7OIB{R)Ov zULHWt)Z#UU zN)nFLgJt4^b!}ahHc3(i`vz=LNHKNcs?K&m!yKU(9!nXxNW55fHuL4;N$}D5Z9qMF zzn%Q6uks7`47Fa6GC^J{^_R6{qd7)(=qoc*lkJ*oY`xH9Z+FLyX1=Ebwwqq9Wq}yX zf-5O7xT@8jEH0qEnoe*4J(fNqAu)Pl=r?*P;UJlL{R4^a=DJ`3yPvo9T6<=eD!=ivLtjDdMw7E z#?s^S6-Xt$<|ecT^F!Rb?C1} z`|XLua|Dd2sjd&XpqN;8WALi3mbBn>r-V%fLrDGYc!{tQ27%zrR+V&5V{Fi{1AnBF=;k z;QqY6&P@;-eFe6>mc|V`qu5#ZvjVZ8mo+A{?qv@>}`MExaaFf)R-!lm__6x%WRngBF#m*1H_{G54b<6QwfqwJdhBZS(o* z1DK7+-?UTw4h8C3@>?n?d_{t<4X**MWj&HZ`TMM(?yfNclU0D{odfTg=uLx#%0E5> z=qxdts4aQ!f#D+P-ZTeu;!|Q!!l`{?RlYGzF|je-|Ga^-=@}bTi9q$GguS2Kf+`7A zwBX(I+;rIrEgdaab)K&Ms@wF0v`7e(l+N)ReqWr5KI+SV!DE0( z>Fe?=(V~u+H@b5Bvb2QcW?mOZLvsw`-o*I0;rSb#p!I`RY!yl@Z zepH2l%yV~Ane<8Y!$RtFK8zF~jvNlL|9~kVndqz}Y7C4+_Eq-%FxE1Zis#EPdq(Oc za#RzRjs^pGC1lyzbYt2DI&WolosM%dGnV!iUd?=}luVsG_WAu|<*)|kqry&ZUJa3t z^K!5oAS6dL$Pmh6Vk<6$+&uKpEzYSi@izA&Hrr*E$(^f+7aH4Rm(+!0hHGQ?9*vpl z$^<@BTXUjq|NNgiA03@TE|EV$=}1|ZNJr_bvyWBiY640_<<*_Qk}Pihu%9e0)&$zV zHGS;&=lT1LF(Jn>t8PApTCD;;!0LlUkmlPb!}erhe(g0}iovhULS%NkU%!@o%T`Ne2r0j!SYMvkXtDl`d5*&=1y@kwW}8dTya)yB9giE4xo zT3Cqvp{yY!n7XUx>@XH3ZTHD_2+xVNtf`cwMoy1X=p+*HU2#eXKCuE41mHn)&N!p6 zn@(htxGEfH=is%;jb0Wc(bUw4M>0TWjZ~&Yg!*)NXf$L@kiX+9uHLi~@-3`AYYiO^ z=d&J{4!7DteF-WpcoApt_A(!ICw%zPBIa7#z2O~&7Ews5pURKI-~9~#19WKLsK29Y zzS~egIA0HR>>?0Oe|uKMaT>t$tzAWNhaPq4tG=db0I9l;@L}|Upo!L_5&U%IJa$`h zgubEbC*>RW+@iOSzwGl(63C1X9c{h+{DqnSp+t~l?OnHUOfZr&aysX+epqbdWjyVV zeKX-Ee5N#X?fD;k0vsZ&dn<<>AdMWqx2^5fh5uPIVaYnMoTGekuNo&!Q8jUIPMcAr z@EyyDkUoXDLng(gp^Y~&XG(}0V}{Fmv?T=pLrRq1>NiGpaWAEd;~QmWHzi9MQQ2^6 zg#-N#(mSzTBPLSje7hIH@?i(t{DspmRb+K_9sQieddf%aS%Cs$&FZZPf`MAN2ZADD zlo7C@0Qz_Auel-XSqKIiR^{+`pfoMAcq#?^Xg0W+rRA$JDo~vCk=a;I{qO4#x@NSh zzkd-)LgW&QDk_i3YNplsSs;p`#0I7bd5J|7R?D1)0|me%C|6lB$cRZ)&{=y$Z$jfi zAPb!rPi`?w-o7YvD~6(tByuW*8a|2b5c;MVZ?o=_yJAnO&am#vs0Yj!v4PmerV|uTeJCk_f5#rhXc#tPH9Z;F=cp zztnlN{fqTZQ=M2OpwxBao;fj=`WK;pPk%vKuRo$KRqo?|08l{ly}u_1EDYESov);M zC>19-b@=-Z+I%1odqzJug$qB=YcI<~^-tl1YJ&F1;bMqt{1QcLT6`odOwSH?rHXec zka2=O&yuWp*dv*fL{KrLr-L)p)=w8Z?9 z)#+L^4b>Iy_|LmZof5o1Wo$qjW%bpGL}gPkY}nLl52^_>7nd3k)pG1#&x(M&o4YZm>p;px;mhM*ROOs37^d=QBG$c@p;cdA66>fVLPPQ@j zmO45MtX(4cKFURG38!>^n!)lKU zp;b(dHjN98rbU(G^GmnUe_=!jx!ZXV@Yk6oJR;HcU%TRfhM*3M_JOd@b$HaCEg19~ z^~oo*ZFL2xGgNt8SIicW=|9Ea;2>Q%l8pYLdgwYt{6m#?tM=juin_C}&MYhe^(etQsGU&{qQciIwU|VL!Lw3t&zqqQniLp34z{x6H&VfM{ zqVWJ+_jD%$VFUW5~Oy{B&mc5 z;Y5d~sEUD(wFnlPuaWHa=!j7V(Wm|3{(YGy$>bfUYKjTHt=Q~hs6aZ>yBg?t{e5wp zK#uSJ`H=a8pfRMM$QGG{DPp`SO!Fg+hN?Tf<3SyzB%b2moxMPrhB^Wf10+TErTKi` zL>Dr(ngo2H_GB|>NK5)FYa~C;w_#iFWrT6@*dJEC5DRssDiqSEoH4^^g(W^ zEt_FZHR{lHGBR@2@b!y}6ftduNx*$a15%Va?Es_&F=A012Wui3_^NX|_#Z%=9hTR~ z5&%oSL#l$g8n9nFpNwKC0%9;-5x?BS99Bd~2aNv7z$(wL{ma5h_WEqINLAs@PquexFZRb-)KVl$CP%8wFw+ZKNE?VU8%D)g#GMUfDC!hV0jYc= zhk5s`&|27r?rD;6LKQsoJu*HYbAZq!S^k`Wxy_KCGcVpVvB^Wl|9z9K6*UIo)h~ez zllsoO&NG*P)Lm^89%hg9WZygm&cmWD110|h6t?{bxZEh_M>ea3+C*Z=1(onr)ZNt; ziZSa~j^3vxB=$HSOYlr1mI?YQ3*)i-so4*Bbw#?cb6DX_VDW=F(slIbA|<4;Dy!w^ zi&Wb*frxVV%Q~@ANn*bjA-4We?5m(&5E%qap-Z|%C<0ybs(|Wc%` zVbGi%cb*Y={xr4i7E8AADrY8}gVRtyTB%ycRG(dz&XCrpOkMqjccrltPo0W2eAsai zDi0e0P-nhK^Uepx^7I)v)%+p0;y%f|UT!7&5AcV<^H1meHh-3}Q(_RKWNteIPzcbXX2Fdls z-KN@wH@r~?HN>R@IYKu&xo?e}sP!-I!x#(MF|yKiQswe_F5dlIVF)B^*VppDg<>@e zhCn@Vx?1I%XE8MDRBj8N1YQgW^^rOThC_NIJB8+cwpegN69`6+fiH8^qbk?o$)?20 zynd2`87Ftxrwv~#{sVNYk8%I|YZHFw#QmUWaSWPXXL2eR2pA*NsSdO(8x7K zE9^0!KReqZf7|h1OUz$j5`|9_UvqN~U#=FI|4B)nj}9`gg(XP;yt%Sxe3t6JSACyP z4d&&Zde|w`dJGBvnGmMc^oAGSey|NyzYX>Oo$*#enl^RyD`>hQm7oj{TxlHW`DIbR zLH2=)@2-PAX`V8=WzTzxoDj2eb(9=OSzB^IIdz^LakMP5FR#l7Lb9?!ypB{qDe|{f0K+8en*YD=}YXgq9{nXIs$L_tLrt zmeLnQK~xrGk2~$WFSmi)&%`8j!FqLo*^om9aneww%cmB~))G4$Z_~+L-PfUGdvtHr zby0oXNk)czt4AKG27{aQg6!ZGs`D0l{lR-#sN$7fSO1>_p?b8j%=j~?P;&nC|L~aq zU#^N?nO`g#cs+vw-k%Y0C3n!jkMO`uu;E_ZeG1O#%0Dyh$~u}2F2K6{x}`ruoj+ft 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 literal 0 HcmV?d00001 diff --git a/docs/fr/product/features/performance.md b/docs/fr/product/features/performance.md new file mode 100644 index 000000000..5f935d91b --- /dev/null +++ b/docs/fr/product/features/performance.md @@ -0,0 +1,30 @@ +--- +sidebarTitle: Performance +--- + +# Performance + +Le débit des transactions — souvent exprimé en transactions par seconde — est une métrique clé pour les adoptants, qui doivent être assurés que Mojaloop répond à leurs besoins, qu’il s’agisse d’un déploiement national, sectoriel ou multinational. + +Pour cette raison, la communauté Mojaloop a défini une base de référence en matière de performance et affine en continu l’efficacité du traitement des transactions. + +## Base de référence + +La version 17.0.0 du Hub Mojaloop a démontré les caractéristiques suivantes sur un matériel ***minimal*** : + +- Compensation de 1 000 transferts par seconde +- Maintenu pendant une heure +- Avec au plus 1 % (étape de transfert) des opérations dépassant 1 seconde dans le hub + +Cette base peut servir de repère pour le dimensionnement et la planification de capacité. + +Des performances supérieures peuvent être attendues avec davantage de ressources matérielles. + +## Perspectives + +Des travaux visent à remplacer la technologie de grand livre actuelle de Mojaloop par la base de transactions financières [TigerBeetle](https://tigerbeetle.com/). La performance du grand livre étant un facteur majeur de la performance globale, une nette amélioration est attendue avec TigerBeetle, dont l’adoption est visée pour la sortie de Mojaloop version 19.0. + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.0|3 juin 2025| Paul Makin|Version initiale ; texte sur la performance extrait de la doc déploiement| diff --git a/docs/fr/product/features/product.md b/docs/fr/product/features/product.md new file mode 100644 index 000000000..e6afccdc5 --- /dev/null +++ b/docs/fr/product/features/product.md @@ -0,0 +1,149 @@ +--- +sidebarTitle: Portails et exploitation +--- + +# Portails et fonctions opérationnelles + +Les thèmes abordés pour les portails et autres fonctions opérationnelles sont : + +- Gestion des utilisateurs + +- Gestion des participants + +- Consultation des transactions + +- Règlement + +- Journalisation et audit + +- Gestion du hub + +- Gestion des oracles + +- Portail participant + +- Reporting + +Ces fonctions sont fournies par le **Business Operations Framework** (BOF) de Mojaloop, qui offre les fonctions cœur décrites ici ainsi qu’un ensemble d’API permettant à l’opérateur du Hub d’étendre ces portails et d’en créer de nouveaux selon ses besoins. + +Le BOF canalise toute activité via un cadre unique **IAM** intégrant le **RBAC**, offrant à l’opérateur du hub un contrôle fin des accès aux capacités de gestion du Hub Mojaloop. + +L’accès à chacune des fonctions ci-dessus passe par le BOF, géré via l’IAM et le RBAC. + +## Gestion des utilisateurs + +Ces fonctions concernent la gestion du **personnel de l’opérateur du hub** via le module IAM intégré, et non la gestion du service lui-même. + +1. Création et gestion des comptes utilisateurs pour le personnel de l’opérateur du hub et les participants, via le portail IAM. +2. Définition des rôles associés aux sous-éléments des portails. +3. Attribution des rôles aux comptes utilisateurs pour définir qui accède à quelles fonctions des portails. +4. Pour les fonctions sensibles, définition d’une exigence émetteur / contrôleur (*maker/checker*), y compris les rôles requis et les éventuelles restrictions. +5. Activation / désactivation des comptes utilisateurs. +6. Création de comptes participants pour le libre-service via le portail participant (lorsqu’il est disponible). +7. Autoriser qu’un utilisateur soit à la fois émetteur et contrôleur (mais pas sur ses propres actions). + +Le portail participant n’est à ce jour implémenté sur aucun hub Mojaloop ; ce n’est donc pas une exigence actuelle. + +## Gestion des participants + +Fonctions permettant à l’opérateur du hub de gérer un DFSP participant (distinct du portail participant). + +1. Intégration d’un DFSP participant. +2. Définition et gestion des points de terminaison (certificats, adresses IP sources, etc.). +3. Gestion des contacts du participant (nom, e-mail, MSISDN, rôle, etc.). +4. Définition de seuils (pour les notifications). +5. Définition et gestion des comptes du participant par type et devise. +6. Désactivation d’un DFSP participant (sans possibilité de désactiver un DFSP avec des transactions en cours / non réglées). +7. Mise en pause / reprise de la connexion d’un participant. +8. Attribution / ajustement de liquidité (plusieurs devises), avec contrôle émetteur / contrôleur. +9. Attribution / ajustement d’un plafond de débit net (NDC) par participant, avec contrôle émetteur / contrôleur — NDC à valeur fixe (ajustement manuel après chaque changement de liquidité) ou variable (pourcentage fixe de la liquidité disponible). +10. Restreindre la connexion du participant à l’envoi ou à la réception uniquement. + +## Consultation des transactions + +Le personnel de l’opérateur du hub doit pouvoir retrouver le détail d’une transaction, quel que soit son statut. La recherche peut se faire par : + +- Plage de dates / heures + +- DFSP payeur ou bénéficiaire (participant) + +- Montant — identifiant de transaction Mojaloop + +- État du transfert + +- Identifiant de lot / fenêtre de règlement + +- Type de transaction + +- Code d’erreur + +La recherche renvoie la liste des transactions correspondantes ; chaque ligne mène à une vue détaillée avec : + +- Toutes les données détenues par le Hub Mojaloop, regroupées en sous-fenêtres pour l’ergonomie + +Y figurent notamment l’identifiant de fenêtre / lot de règlement, cliquable pour consulter le statut de règlement du lot et donc de la transaction. + +## Règlement + +La gestion du règlement sur le Hub Mojaloop doit être robuste et fiable. Les fonctions associées : + +1. Définir le modèle de règlement du service. +2. Clôturer une fenêtre ou un lot de règlement manuellement ou automatiquement selon un calendrier prédéfini. +3. Générer automatiquement les fichiers de règlement nécessaires pour l’intégration avec le ou les partenaires de règlement à la clôture d’une fenêtre. +4. Consulter les positions de tous les participants dans la fenêtre / le lot. +5. Après règlement achevé / finalisé, mettre à jour automatiquement les positions et la liquidité disponible d’après les retours du ou des partenaires de règlement. +6. Fournir des outils pour l’intégration entre le Hub Mojaloop et le ou les partenaires de règlement. + +Au moins une fenêtre ou un lot de règlement reste toujours ouvert ; les transactions y sont affectées au fur et à mesure. La création d’une nouvelle fenêtre est donc automatique à la clôture de la précédente. + +## Journalisation et audit + +Le Hub Mojaloop offre des outils pour la journalisation et l’audit de l’activité des opérateurs, en complément des fonctions d’audit bas niveau pour l’analyse détaillée du traitement des transactions (décrites ailleurs). Ces outils répondent aux besoins de la direction de l’opérateur du hub et des auditeurs externes. + +1. Toute modification issue de l’activité des opérateurs (y compris gestion des utilisateurs) est enregistrée dans un magasin de données non modifiable, avec les identifiants de l’opérateur. + +2. « Auditeur » est un rôle utilisateur hub par défaut ; les auditeurs ont un accès lecture illimité aux journaux. + +3. Un portail d’audit est disponible, avec recherche et affinage. + +4. Les entrées de journal / audit incluent les changements de configuration du Hub. + +## Gestion du hub + +Exigences de base pour la configuration d’un Hub Mojaloop définissant le service supporté. + +1. Un Hub Mojaloop prend en charge par défaut toutes les devises définies par l’ISO. Chaque devise est activée pour un déploiement donné par création des comptes de règlement et de position associés. Il doit être possible de consulter les soldes des comptes d’exploitation du Hub (règlement et position, par devise supportée). + +2. Ajout / consultation / suppression des certificats d’autorité de certification nécessaires au fonctionnement normal. + +## Gestion des oracles + +Gestion des oracles utilisés par l’Account Lookup Service (ALS) pour résoudre les alias vers les DFSP / participants (puis, avec le DFSP identifié, vers un compte précis). + +1. Consulter les oracles enregistrés. + +2. Enregistrer un oracle. + +3. Définir un point de terminaison. + +4. Tester la santé d’un oracle. + +## Portail participant + +À ce jour, le Hub Mojaloop ne propose pas de portail participant. Cette fonctionnalité est assurée par un autre projet open source, Payment Manager (). D’autres outils, comme l’Integration Toolkit Mojaloop, exposent une API permettant aux DFSP d’accéder aux mêmes informations. + +## Rapports + +Mojaloop intègre un moteur de reporting flexible dans le BOF, permettant au personnel de l’opérateur du hub de concevoir et produire un large éventail de rapports à partir des données des bases et grands livres Mojaloop. Le framework permet aussi d’intégrer ces rapports dans les portails opérateur pour génération à la demande par les équipes d’exploitation. + +Cela inclut les rapports liés au règlement. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|14 avril 2025| Paul Makin|Mises à jour liées à la sortie de la V17| +|1.0|5 février 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/risk.md b/docs/fr/product/features/risk.md new file mode 100644 index 000000000..b8a235f15 --- /dev/null +++ b/docs/fr/product/features/risk.md @@ -0,0 +1,31 @@ +--- +sidebarTitle: Gestion des risques +--- + +# Gestion des risques + +L’exploitation d’un schéma de paiement construit autour d’un hub Mojaloop implique de gérer le risque entre parties transactionnelles aux appétences différentes. Les principes appliqués sont les suivants : + +1. Tous les participants (FSP) doivent déposer une forme de liquidité convenue auprès du partenaire de règlement du schéma. Cette liquidité ne peut être retirée, en tout ou partie, du schéma qu’avec l’accord de l’opérateur de schéma. +   +2. Une transaction n’est compensée (phase de transfert) que s’il existe une liquidité suffisante pour la couvrir, au regard du solde de liquidité, de la position courante du DFSP (solde net des transactions déjà compensées depuis la dernière activité de règlement, en tant que payeur ou bénéficiaire) et des fonds réservés. +   +3. La valeur d’une transaction compensée est ajoutée à la position du DFSP payeur et débitée de celle du DFSP bénéficiaire. +   +4. Lors du règlement, pour chaque DFSP, une position négative est débitée du solde de liquidité et transférée au partenaire de règlement pour distribution aux créanciers ; une position positive est créditée sur le solde de liquidité par le partenaire de règlement à partir des fonds des débiteurs. +   +5. Un règlement réussi solde la valeur représentée par les transactions de la fenêtre ou du lot de règlement associé dans la position de chaque DFSP. +   +6. Un DFSP doit gérer sa liquidité : l’augmenter si elle devient insuffisante pour les transactions anticipées, ou en retirer une partie (sur demande à l’opérateur de schéma) si elle est trop élevée. Ces opérations ont lieu hors Mojaloop mais doivent être déclarées dans le schéma Mojaloop par le DFSP ou le partenaire de règlement. +   +7. Si le partenaire de règlement n’est pas disponible 24h/24, un DFSP peut déposer un excédent sur son compte de liquidité, par exemple pour couvrir les transactions prévues pendant un jour férié. Ce reliquat peut être géré via un plafond de débit net (NDC), par exemple pour limiter l’usage de la liquidité au niveau attendu un jour donné et préserver la capacité à traiter pendant toute la période de fermeture. Le NDC s’utilise conjointement avec le solde de liquidité pour l’autorisation des transactions pendant la phase de cotation. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|14 avril 2025| Paul Makin|Mises à jour liées à la sortie de la V17| +|1.0|13 mars 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/security.md b/docs/fr/product/features/security.md new file mode 100644 index 000000000..3ab663597 --- /dev/null +++ b/docs/fr/product/features/security.md @@ -0,0 +1,91 @@ +--- +sidebarTitle: Sécurité +--- + +# Sécurité + +## Open source et sécurité + +Une idée reçue veut que le logiciel open source soit intrinsèquement moins sûr que le logiciel propriétaire parce que le code est visible. En réalité, cette vision méconnaît le fonctionnement de la cybersécurité moderne. + +La sécurité de Mojaloop ne repose pas sur l’obscurité du code. Elle s’appuie sur des algorithmes cryptographiques open source éprouvés, élaborés par des experts et publiés pour relecture par les pairs. Ils sont testés en profondeur par la communauté cryptographique mondiale ; lorsqu’une faille est trouvée, les correctifs sont partagés ouvertement et rapidement, au bénéfice de tous les utilisateurs, Mojaloop y compris. + +C’est comparable aux serrures physiques : le mécanisme d’une serrure Yale n’est pas secret ; la sécurité vient de la clé, pas du secret du mécanisme. La cryptographie fonctionne de la même manière : les algorithmes modernes reposent sur le secret des clés, pas sur la dissimulation de l’algorithme. + +Il en va de même pour l’ensemble du code Mojaloop : en open source, chacun peut examiner le code et signaler des vulnérabilités. Des équipes de la communauté Mojaloop participent activement à ce processus et font remonter les problèmes identifiés dans le cadre qualité / sécurité pour examen et correction. Des vulnérabilités potentielles sont régulièrement signalées par des acteurs extérieurs au noyau de la communauté ; elles sont analysées et traitées par les équipes qualité et sécurité. Plus de détails figurent dans la section [Maintenir la sécurité](#maintenir-la-securite) ci-dessous. + +## Sécurité Mojaloop + +Mojaloop s’appuie sur ces pratiques et algorithmes pour un modèle de sécurité multicouche, complexe et soumis à une veille et des revues continues. + +On peut le décomposer en trois domaines : + +- la sécurité de la connexion entre le Hub Mojaloop et les DFSP participants (transactions et établissement / maintien de la connexion) ; +- la sécurité de l’exploitation du Hub, notamment des actions des opérationnels ; +- la qualité et la sécurité du déploiement du Hub Mojaloop. + +Les sections suivantes détaillent chaque axe. + +## Sécurité de la connexion DFSP + +La connexion entre un DFSP participant et le Hub Mojaloop combine trois niveaux de sécurité pour l’intégrité, la confidentialité et la non-répudiation des messages entre un DFSP, le Hub et, le cas échéant, l’autre DFSP de la transaction. + +Le schéma suivant illustre ces trois niveaux. + +![Couches de sécurité des connexions Mojaloop](./mojaloop_security_layers.jpg) + +Au niveau le plus bas, la connexion point à point entre un DFSP (participant autorisé) et le Hub Mojaloop est sécurisée par **mTLS**, ce qui garantit la confidentialité, l’authenticité des correspondants et la protection contre l’altération des échanges. + +Ensuite, le contenu des messages JSON est **signé cryptographiquement** selon **JWS** ([RFC 7515](https://www.rfc-editor.org/rfc/rfc7515.html)), ce qui assure aux destinataires l’origine des messages et empêche l’émetteur de nier cette provenance. + +Enfin, les conditions du transfert sont sécurisées par le **protocole Interledger (ILP)** entre payeur et bénéficiaire. ILP utilise un [contrat à secret et délai (HTLC)](./htlc.md) pour protéger l’intégrité de la condition de paiement et de son accomplissement (*fulfilment*). Ainsi, Mojaloop garantit qu’un transfert se termine entièrement pour toutes les parties ou pas du tout, et limite la durée de validité de l’instruction de transfert. + +Ces trois couches sont intégrées au Hub Mojaloop. Côté DFSP, elles peuvent être mises en œuvre directement par les équipes d’ingénierie. La communauté Mojaloop propose aussi [un ensemble d’outils](./connectivity.md) qui établissent et maintiennent ces couches et orchestrent les communications / API avec le Hub, tout en restant dans le périmètre du DFSP (et donc hors Hub Mojaloop). + +## Sécurité opérationnelle du Hub + +La sécurité du Hub Mojaloop dépasse les connexions aux DFSP et inclut la sécurité des actions des opérateurs via les différents [portails Hub](./product.md). + +Les portails s’appuient sur le Business Operations Framework (BOF) de Mojaloop, qui fournit les portails cœur et des API permettant à l’opérateur du Hub d’étendre ces portails ou d’en créer de nouveaux selon ses besoins. + +Pour gérer la sécurité de ces portails, le BOF canalise l’activité via un cadre unique d’**identité et d’accès (IAM)** intégrant le **contrôle d’accès basé sur les rôles (RBAC)** et, nativement, le principe **émetteur / contrôleur** (*Maker/Checker*, ou « quatre yeux »). + +L’opérateur du Hub Mojaloop dispose ainsi d’un contrôle fin des accès aux fonctions de gestion et des contrôles sur chaque activité. Il reste toutefois responsable du filtrage du personnel, de l’inscription sur l’IAM, de l’attribution des rôles et de la bonne configuration du RBAC (y compris émetteur / contrôleur le cas échéant). Des politiques telles que expiration des mots de passe, longueur et complexité, réutilisation, etc. sont prises en charge par l’IAM, ainsi que l’**authentification multifacteur (MFA)** pour tous les opérateurs, selon les choix de l’opérateur (l’usage du SMS ou USSD comme canal MFA est fortement déconseillé). + +Il incombe également à l’opérateur de mettre en place les points de contrôle adaptés à un service financier (accès physique aux serveurs, usage des téléphones portables par les opérateurs, vidéosurveillance, chaîne d’approvisionnement, gestion des visiteurs, etc.) et de définir les processus métier associés. + +## Maintenir la sécurité {#maintenir-la-securite} + +La communauté Mojaloop a défini procédures et moyens pour maintenir la sécurité des déploiements face à l’évolution des attaques et à l’identification de vulnérabilités dans Mojaloop ou dans les nombreux programmes open source dont il dépend. C’est le **processus de gestion des vulnérabilités**, qui comprend notamment : + +- un **comité sécurité**, coordonnateur de la gestion des vulnérabilités ; +- des processus de traitement des vulnérabilités potentielles signalées au comité ; +- des activités proactives d’identification et de gestion, dont : + - la surveillance continue des composants open source ; + - le **SAST** avec plusieurs outils s’appuyant sur des bases publiques de vulnérabilités ; + - la maintenance automatisée d’un **SBOM** pour l’inventaire et la gestion des dépendances ; + - l’analyse des images conteneur avant publication ; + - un scanner de licences pour n’utiliser que des composants aux licences compatibles ; + - à partir de Mojaloop Release v17.1.0, signature des charts Helm à la publication et vérification à l’installation / déploiement pour la traçabilité des artefacts ; + - une chaîne CI/CD intégrant des contrôles de sécurité ; + - un processus de **divulgation coordonnée des vulnérabilités (CVD)** ; + - des rapports détaillés après chaque analyse, avec actions correctives et efficacité, conservés pour audit et conformité. + +Pour plus de détails techniques : [vue d’ensemble de la gestion des vulnérabilités Mojaloop](https://docs.mojaloop.io/technical/technical/security/security-overview.html). + +## Qualité et sécurité du déploiement + +Des membres de la communauté Mojaloop développent un **cadre d’évaluation de la qualité** visant une boîte à outils pour valider la configuration, les fonctionnalités, la sécurité, la préparation à l’interopérabilité et les performances d’un déploiement. + +Il pourra servir à l’auto-évaluation des adoptants ou à un examen externe pour renforcer l’assurance auprès des autorités de tutelle et des participants. + +## Applicabilité + +Ce document concerne Mojaloop version 17.1.0. + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.2|13 octobre 2025| Paul Makin|Ajout de l’introduction « Open source et sécurité ».| +|1.1|15 juillet 2025| Paul Makin|Ajout de la section « Maintenir la sécurité ».| +|1.0|24 juin 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/tariffs.md b/docs/fr/product/features/tariffs.md new file mode 100644 index 000000000..ad83373b4 --- /dev/null +++ b/docs/fr/product/features/tariffs.md @@ -0,0 +1,57 @@ +--- +sidebarTitle: Frais et tarifs +--- + +# Frais et tarifs + +Mojaloop prend en charge les frais de transaction grâce à une architecture pilotée par des règles, pour la transparence et l’accord à chaque étape du paiement. + +## Accord sur les conditions — négociation des frais + +Avant la transaction, Mojaloop utilise la phase **Accord sur les conditions** pour permettre aux DFSP de calculer et d’accepter tous les frais et commissions associés. + +Au début de cette phase, le DFSP payeur propose la transaction au DFSP bénéficiaire, avec un modèle de facturation : soit les frais s’ajoutent au montant payé par l’émetteur, soit ils sont déduits du montant reçu par le bénéficiaire. + +Si le DFSP payeur souhaite poursuivre, il envoie une confirmation. Le DFSP bénéficiaire transmet alors ses frais (et autres conditions) au DFSP payeur sous forme de contrat, en acceptant ou en refusant le modèle de facturation choisi. + +Si le DFSP payeur accepte les conditions du DFSP bénéficiaire, il présente les conditions du transfert au payeur, y compris le total à payer selon le modèle retenu. + +| Modèle de facturation | Paye le payeur | Reçoit le bénéficiaire | +| -------------- | ---------------------- | -------------------- | +| Frais à charge de l’émetteur | Montant + frais DFSP payeur + frais DFSP bénéficiaire | Montant | +| Frais à charge du bénéficiaire | Montant + frais DFSP payeur | Montant − frais DFSP bénéficiaire | + +Si le payeur accepte et souhaite poursuivre, le montant convenu du transfert est débité sur son compte par le DFSP payeur, qui retient ses propres frais et soumet au Hub Mojaloop une demande de transfert pour le reliquat, avec le contrat du bénéficiaire. + +À l’issue du transfert, le DFSP bénéficiaire retient ses frais convenus et crédite le compte du bénéficiaire du reliquat. + +Ainsi, tous les frais sont regroupés dans une seule cotation : le payeur connaît le coût exact avant de valider, y compris si les frais du DFSP bénéficiaire sont payés par le payeur ou le bénéficiaire. + +## Rules Handler — frais d’interchange + +Mojaloop prend en charge des règles de frais avancées, comme les **frais d’interchange**, via son *Rules Handler*, qui évalue les transactions en cours de traitement. Par exemple, dans un paiement P2P portefeuille à portefeuille entre DFSP distincts, Mojaloop peut appliquer automatiquement 0,6 % de frais facturés par le DFSP bénéficiaire au DFSP payeur. Ils sont enregistrés au grand livre et règlés ultérieurement. + +## Frais de hub (opérateur) + +Outre les frais par transaction, les opérateurs de hub peuvent facturer des frais d’usage d’infrastructure ou d’abonnement aux DFSP participants. Ces « frais de hub » sont en général modestes — de quoi couvrir les coûts opérationnels — dans une logique de « coûts de service récupérés plus marge légère » pour limiter les frais finaux. + +--- + +### En résumé + +| Type de frais | Géré par | Quand et comment | +| ----------------------- | ---------------------- | --------------------------------------------- | +| Frais de transaction | Service d’accord sur les conditions | Cotés à l’avance, acceptés avant exécution | +| Frais d’interchange | Rules Handler + grand livre | Appliqués pendant le traitement selon les règles | +| Frais d’infrastructure hub | Opérateur de hub | Facturés séparément pour couvrir l’exploitation | + +Cette approche par couches offre à Mojaloop une forte transparence des frais, de la configurabilité, de l’automatisation et de la cohérence de règlement — essentiel pour l’interopérabilité et l’inclusion financière à coût maîtrisé. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.0|17 juillet 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/transaction.md b/docs/fr/product/features/transaction.md new file mode 100644 index 000000000..7fffe49db --- /dev/null +++ b/docs/fr/product/features/transaction.md @@ -0,0 +1,91 @@ +--- +sidebarTitle: Transactions +--- + + +# Transactions Mojaloop + +Cette section couvre les aspects d’une transaction Mojaloop. + +## Phases d’une transaction Mojaloop + +Un hub de paiements basé sur Mojaloop compense (route et garantit) les paiements entre comptes détenus par des parties finales (personnes, entreprises, administrations, etc.) chez les DFSP, et s’intègre à un partenaire de règlement pour orchestrer les mouvements de fonds entre DFSP participants, soit en temps réel (règlement brut continu), soit ultérieurement (formes de règlement net), selon un calendrier de règlement convenu. + +Toutes les transactions Mojaloop sont **asynchrones** (pour optimiser l’usage des ressources) et suivent **trois phases** : + +1. **Découverte**, pendant laquelle le DFSP du payeur collabore avec le Hub Mojaloop pour déterminer où envoyer le paiement. Cette phase résout un alias vers un DFSP bénéficiaire précis et, avec ce DFSP, un compte individuel. +   +2. **Accord sur les conditions (cotation)**, pendant laquelle les deux DFSP parties à la transaction conviennent que la transaction peut avoir lieu (sous réserve, par exemple, de restrictions liées à un KYC par paliers) et à quelles conditions (dont frais). +   + +3. **Transfert**, lorsque la transaction entre les deux DFSP (et, par procuration, les comptes clients) est compensée. +  + +Ces phases s’inscrivent dans l’asynchronisme de Mojaloop : chaque transaction est unique, traitée une seule fois quelle que soit la fréquence de soumission. Cette propriété est l’**idempotence** : même avec une connectivité intermittente, le client n’est débité qu’une fois, quel que soit le nombre de tentatives. + +Cette approche en trois phases, complétée par l’idempotence, limite les échecs ou doubles traitements. Mojaloop supprime ainsi le besoin technique de rapprochement transactionnel par les DFSP, réduit les causes de litiges et donc les coûts pour toutes les parties. + +Associée à l’approche Mojaloop de la [gestion des risques](./risk.md), elle permet à la plus petite IMF et à la plus grande banque internationale de participer à égalité, sans qu’aucune n’impose un risque à l’autre ni au Hub. + +  +## API Mojaloop {#mojaloop-apis} + +Le Hub Mojaloop expose quatre API. Les deux premières concernent les transactions clients ; les deux autres, l’administration des relations avec les DFSP participants et le règlement des transactions compensées : + +1. **API transactionnelle** +Mojaloop propose deux API transactionnelles fonctionnellement équivalentes pour les connexions directes avec les participants aux fins de transaction. Elles couvrent tous les [**cas d’usage Mojaloop**](./use-cases.md) et respectent les [principes Level One](https://www.leveloneproject.org/project_guide/level-one-project-design-principles/). Il s’agit de : + - l’**API FSP Interoperability (FSPIOP)**, API historique éprouvée ; +  + - un **schéma de messages ISO 20022**, fondé sur un jeu de messages ISO 20022 provisoirement aligné entre la Mojaloop Foundation et le *Registration Management Group* (RMG) ISO 20022, adapté aux besoins d’un système de paiements instantanés inclusifs (SIIP) tel que Mojaloop. Elle est proposée comme alternative à FSPIOP. Les détails d’implémentation et d’usage par les DFSP figurent dans le [**document de pratiques de marché ISO 20022 Mojaloop**](./iso20022.md). + +2. **API d’initiation de paiement par des tiers (3PPI / PISP)** + + Cette API gère les dispositifs de paiement initiés par des tiers — paiements initiés par des fintechs pour le compte de leurs clients depuis des comptes détenus chez des DFSP connectés au Hub Mojaloop — et permet d’initier ces paiements une fois autorisés. + + +3. **API d’administration** + + Elle permet aux opérateurs de hub de gérer notamment : + + - création / activation / désactivation des participants dans le Hub ; + + - ajout et mise à jour des informations de point de terminaison des participants ; + + - gestion des comptes, plafonds et positions des participants ; + + - création des comptes du Hub ; + + - opérations d’entrée et de sortie de fonds ; + + - création / mise à jour / consultation des modèles de règlement, pour gestion ultérieure via l’API de règlement ; + + - consultation des détails des transferts ; + +4. **API de règlement** + + Elle sert à gérer le processus de règlement. Elle n’est pas destinée à la gestion des modèles de règlement. + +  + +## Caractéristiques distinctives des transactions {#unique-transaction-characteristics} + +La plupart des fonctions de Mojaloop existent aussi sur d’autres hubs de compensation. Ce qui distingue Mojaloop : + +1. **Le flux transactionnel en trois phases et l’idempotence**, décrits ci-dessus.   +2. **La phase d’accord sur les conditions (cotation)**, qui permet aux deux DFSP de convenir qu’une transaction peut avoir lieu *avant* tout engagement. Le DFSP bénéficiaire peut vérifier que le compte peut recevoir le paiement, qu’il n’est pas suspendu, que les plafonds ne seront pas dépassés. S’il accepte, il indique les frais éventuels (les frais de hub sont hors transaction). Ce n’est qu’après accord du DFSP payeur et du payeur sur ces frais et conditions que la transaction est lancée. L’incertitude est ainsi réduite et la probabilité de succès augmentée *avant* exécution. + +3. **La non-répudiation de bout en bout** pendant la phase de transfert garantit à chaque partie qu’un message n’a pas été modifié et qu’il provient bien de l’émetteur déclaré. Mojaloop s’appuie sur cette technologie pour que la transaction ne soit engagée que si *les deux* DFSP payeur et bénéficiaire l’acceptent, sans qu’aucun puisse la nier. Le rapprochement au niveau transactionnel devient inutile, ce qui réduit litiges et traitement d’exceptions, et donc les coûts — au service de l’inclusion financière et de la confiance dans les paiements. + + La communauté Mojaloop met à disposition des outils gratuits pour connecter les DFSP au Hub ; ils restent dans le périmètre du DFSP. Outre la connexion et les transactions, ils assurent la sécurité du lien et notamment le chaînage à cette capacité de non-répudiation. +   +4. **L’API PISP est exposée par le Hub Mojaloop**, et non par chaque participant. Une fintech s’intègre au Hub et est immédiatement reliée à **tous** les DFSP connectés, sans intégration API individuelle avec chacun — ce qui réduit coûts et complexité pour les fintechs et leurs clients. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.3|30 juin 2025| Paul Makin|Précisions mineures sur la description de l’accord sur les conditions| +|1.2|14 avril 2025| Paul Makin|Mises à jour liées à la sortie de la V17| diff --git a/docs/fr/product/features/use-cases.md b/docs/fr/product/features/use-cases.md new file mode 100644 index 000000000..dfcf8172f --- /dev/null +++ b/docs/fr/product/features/use-cases.md @@ -0,0 +1,102 @@ +--- +sidebarTitle: Cas d’usage +--- + +# Cas d’usage + +La fonction centrale d’un hub Mojaloop est la compensation du transfert de fonds entre deux comptes, chacun détenu chez un DFSP connecté au hub, couramment appelé paiement poussé (*push payment*). Cela lui permet de couvrir un large éventail de cas d’usage. Ce n’est toutefois pas le seul type de transfert pris en charge par Mojaloop. + +La description ci-dessous des cas d’usage pris en charge par Mojaloop est regroupée selon les types de protocole sous-jacents, afin de montrer le caractère extensible d’un hub Mojaloop. On distingue notamment : +- les **paiements poussés**, qui couvrent les cas d’usage fondamentaux P2P, B2B, etc. ; +- la **demande de paiement** (*Request To Pay*), qui couvre certains paiements commerçants, le commerce en ligne et les recouvrements ; +- une gamme de **services d’espèces**, dont le CICO et l’hors ligne ; +- les **protocoles PISP/3PPI**, qui permettent aux fintechs et à d’autres acteurs de proposer des services tels que paiements commerçants, versements salariaux à petite échelle, recouvrements, etc. ; +- les **paiements de masse**, pour les versements sociaux à l’échelle nationale et les salaires ; +- les **paiements transfrontaliers**, y compris les envois de fonds et les paiements commerçants. + +Ces éléments sont détaillés ci-dessous. En lisant ces descriptions, il convient de garder à l’esprit que nombre de ces types de transaction [permettent le transport de métadonnées avec le paiement lui-même](./metadata.md). + +(Pour une vision centrée sur les API, voir la [section cas d’usage de la documentation API Mojaloop](https://docs.mojaloop.io/api/fspiop/use-cases.html#table-1).) +## Cas d’usage « paiement poussé » (*Push Payment*) +Un hub Mojaloop prend directement en charge les cas d’usage suivants, qui sont autant de variantes de paiements poussés : +- personne à personne (**P2P**) ; +- personne à entreprise (**P2B**), y compris des formes simples de paiement commerçant, en présentiel et à distance (en ligne) ; +- entreprise à entreprise (**B2B**) ; +- entreprise à administration (**B2G**) ; +- formes simples de paiements personne à administration (**P2G**). + +Pour tous les types de paiement commerçant, le paiement peut être facilité par des identifiants commerçant (pour l’USSD) ou des codes QR (smartphones). + +## Cas d’usage « demande de paiement » (*Request To Pay*) + +Outre les paiements poussés, Mojaloop prend en charge les transactions de demande de paiement (RTP), dans lesquelles un bénéficiaire demande un paiement à un payeur et, _lorsque le payeur consent_, son DFSP pousse le paiement vers le bénéficiaire en son nom. Cela couvre notamment les cas d’usage suivants : + +- **Paiements commerçants**, en environnement de face à face, par exemple via un code QR ; + - Les aspects pratiques de la configuration de la solution Paiements commerçants Mojaloop, y compris le contenu des codes QR, sont traités dans [**Comment configurer les paiements commerçants pour Mojaloop**](./merchant-payments.md). + - Pour tous les paiements commerçants en face à face, le paiement peut être facilité par des identifiants commerçant (USSD) ou des codes QR (smartphones). +- **Commerce électronique**, parfois appelé paiement commerçant à distance, lorsque par exemple une page de paiement (site web ou application mobile) inclut un bouton du type « payer depuis mon compte bancaire », déclenchant une RTP. + +- **Recouvrements**, y compris P2G, P2B, B2B et B2G, couramment utilisés pour le règlement de factures d’utilités. Cela peut aussi passer par l’interface fintech/3PPI décrite ci-dessous — la décision relève de l’opérateur de schéma. + +## Services d’espèces +Un hub Mojaloop prend directement en charge les opérations d’entrée/sortie d’espèces interopérables courantes attendues par tout DFSP (et ses clients) : +- **Distributeur sans carte**, par intégration aux réseaux de GAB, via le protocole ISO 8583 ; +- **Entrée / sortie d’espèces (CICO) chez un agent hors réseau** (*off-us agent*) ; +- **Espèces hors ligne** : + - Un hub Mojaloop peut soutenir les schémas de paiement **espèces hors ligne**, car ce type de schéma est assimilé à des espèces — numériques. Un retrait vers un portefeuille espèces hors ligne (chargement) s’apparente ainsi à une sortie d’espèces ; un dépôt depuis un tel portefeuille (versement) s’apparente à une entrée d’espèces. L’opérateur du schéma peut toutefois exiger que toutes ces opérations de chargement/versement de portefeuille, qu’elles soient sur son réseau ou hors réseau, transitent par le hub Mojaloop pour faciliter la réconciliation du schéma hors ligne. + +## Cas d’usage « 3PPI » — Fintechs et autres +Un hub Mojaloop prend directement en charge l’initiation de paiement par un tiers (3PPI), afin que les prestataires de services d’initiation de paiement (PISP) — souvent appelés fintechs — puissent, via leurs propres applications mobiles, recruter des clients et leur proposer un service de paiement unifié ou enrichi. La plupart des DFSP connectés à un hub Mojaloop peuvent proposer des services 3PPI s’ils disposent d’un back-office suffisamment moderne. + +Une fintech peut utiliser le service 3PPI pour lancer une demande de paiement (RTP) — en demandant au DFSP de son client d’initier un paiement vers un bénéficiaire. Cela couvre notamment : +- les **recouvrements**, en particulier P2G et P2B ; +- les **paiements de salaires**, essentiellement le traitement d’une liste de paiements de masse pour le compte de petites et moyennes entreprises ; +- les **paiements commerçants** (P2B), avec initiation par code QR. + +## Cas d’usage « paiement de masse » (*Bulk Payment*) +Tout service de paiement doit permettre les paiements de masse ; Mojaloop le propose selon un modèle très efficace. Tous les DFSP, sauf les plus petits, peuvent offrir ce service à leurs clients, qui peuvent soumettre des listes de paiements atteignant tout client de tout DFSP connecté. Cela sert notamment à : +- **pensions, prestations sociales et autres versements** (G2P) ; +- **salaires** (G2P et B2P). + +En outre, la fonctionnalité de paiement de masse est disponible via le **service 3PPI** (ci-dessus), ce qui permet à tous les DFSP — y compris les plus petits — d’offrir un service de paiements de masse à plus petite échelle, par l’intermédiaire d’une fintech ou directement via leur propre service 3PPI. + + +## Cas d’usage « transfrontalier » (*Cross Border*) + +Un hub Mojaloop peut permettre aux clients d’un DFSP d’envoyer de l’argent à l’étranger de manière économique, en intégrant le change (FX) dans la transaction. Cela couvre notamment : +- **P2P** et **P2B** (envoi à la famille et aux proches à l’étranger, ou règlement d’une facture dans un autre pays) ; +- **paiements commerçants**, via RTP transfrontalier (par exemple un petit commerçant qui franchit une frontière proche pour vendre sur un marché local et encaisser dans la monnaie locale). + +Pour explorer les éléments de l’écosystème Mojaloop qui le rendent possible, il est recommandé de consulter : +1. La possibilité de connecter un hub Mojaloop à des schémas de paiement voisins, dans le même pays ou ailleurs, pour assurer l’interopérabilité. Cette capacité [**est présentée ici**](./InterconnectingSchemes.md). + +2. La prise en charge des fournisseurs de change (FXP) se connectant à un hub Mojaloop pour proposer des services FX. Ni le payeur ni le bénéficiaire n’a besoin de définir la devise utilisée pour la transaction ; chacun opère dans sa propre devise, et le ou les hub(s) Mojaloop assure(nt) l’échange. Cette capacité [**est présentée ici**](./ForeignExchange.md). + +3. La manière dont l’interconnexion / l’inter-schéma et le change sont combinés pour soutenir les [**transactions transfrontalières**](./CrossBorder.md). +## Autres ; paiements par carte +De nombreux adoptants potentiels se demandent s’il est possible d’utiliser Mojaloop pour commuter des transactions carte. La réponse est que, techniquement, commuter une transaction carte est tout à fait envisageable ; le numéro de compte personnel (PAN) de la carte peut servir d’alias pour initier une RTP, d’autant que le numéro d’identification bancaire (BIN), partie du PAN, identifie le DFSP qui détient le compte du client, vers lequel la RTP doit être routée. + +En pratique toutefois, le terminal point de vente (PoS) carte devrait être adapté pour router les transactions en conséquence : transactions domestiques via une RTP vers le commutateur Mojaloop, le reste vers le réseau carte émetteur. Ces terminaux appartiennent souvent aux banques acquéreuses, peu enclines à en ouvrir l’accès (les grandes enseignes, qui possèdent souvent leurs propres PoS, souvent intégrés, peuvent être plus favorables). + +De plus, rediriger des transactions initiées avec une carte portant le logo d’un réseau international serait totalement inapproprié et exposerait quasi certainement toutes les parties à un risque juridique majeur. Cette approche ne devrait donc être envisagée que lorsqu’un schéma carte domestique est utilisé et que son propriétaire accepte que ses cartes servent de la sorte. + +Enfin, une telle approche se rapproche davantage d’une transaction RTP Mojaloop pour les cartes de débit ; pour une carte de crédit, avec par exemple mise en réserve de fonds sur un compte (à l’enregistrement à l’hôtel), la complexité augmente. + +## Cas d’usage étendus + +Outre ces cas d’usage standard, Mojaloop permet aux adoptants de mettre en œuvre des cas d’usage plus complexes, qui ajoutent des fonctionnalités et se superposent aux cas standard. + +Ces cas propres à un schéma peuvent être ajoutés aisément par chaque opérateur de schéma. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop version [17.0.0](https://github.com/mojaloop/helm/releases/tag/v17.0.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.6|24 juillet 2025| Paul Makin|Correction de liens cassés.| +|1.5|16 juillet 2025| Paul Makin|Sous-titres alignés sur l’introduction ; descriptions affinées ; lien vers les métadonnées ; note sur les transactions par carte.| +|1.4|12 juin 2025| Paul Makin|Introduction étendue pour expliquer le regroupement des cas d’usage.| +|1.3|10 juin 2025| Paul Makin|Description des paiements e-commerce via RTP ; 3PPI intitulé paiements fintech ; précision sur l’initiation des paiements de masse via 3PPI ; mises en forme des liens.| +|1.2|14 avril 2025| Paul Makin|Mises à jour liées à la sortie de la V17, y compris liens vers la documentation inter-schéma et FX.| diff --git a/docs/fr/product/features/workstreams/core.md b/docs/fr/product/features/workstreams/core.md new file mode 100644 index 000000000..8f6514ebe --- /dev/null +++ b/docs/fr/product/features/workstreams/core.md @@ -0,0 +1,39 @@ +--- +sidebarTitle: Cœur et versions +--- + +# Workstream Cœur et versions + +Le workstream Cœur et versions maintient le cœur Mojaloop (correctifs de bugs critiques, évolutions prioritaires, montées de version des nœuds) et conduit les versions des services cœur et de certains services ou produits adjacents de la plateforme Mojaloop. + +Il aide aussi les autres workstreams à livrer des fonctionnalités dans le cœur ou les services de support en empaquetant des services prêts pour la release (tests automatisés, documentation, charts Helm, etc.), avec l’appui de la communauté. + +# Justification métier + +La gestion du cœur Mojaloop et des versions open source de la plateforme est fondamentale pour l’offre. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| Sam Kummary | Shashi Hirugade
Juan Correa | + +## Dernière mise à jour (résumé) +Le code de la RC 17.2.0 passe environ 80 % des tests automatisés sur huit collections majeures ; les tests restants sont bloqués par des changements sécurité du Testing Toolkit. Une fois levés et les vulnérabilités traitées, la sortie pourra suivre. + +La version 17.2.0 apportera notamment : +- des gains de performance majeurs ; +- la prise en charge LEI dans les services commerçants ; +- l’intégration de Connection Manager dans Helm ; +- des correctifs importants issus de DRPP. + +L’équipe évaluera début 2026 si la prochaine version sera mineure ou la v18 basée sur TigerBeetle. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/deployment.md b/docs/fr/product/features/workstreams/deployment.md new file mode 100644 index 000000000..eb760e8a5 --- /dev/null +++ b/docs/fr/product/features/workstreams/deployment.md @@ -0,0 +1,31 @@ +--- +sidebarTitle: Workstream déploiement +--- + +# Workstream Outils de déploiement + +Ce workstream fournit outils, documentation et accompagnement pour permettre aux adoptants de déployer Mojaloop dans des environnements variés, cloud et sur site. + +# Justification métier + +Une suite d’outils bien documentée et complète, permettant d’explorer, développer, tester, évaluer et exploiter le logiciel, est essentielle à la pérennité des SIIP basés sur Mojaloop. + +L’objectif est de permettre un déploiement simple, dans l’environnement de choix, avec un minimum d’appui de la communauté. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| James Bush | Tony Williams
Vanda Illyes
Sam Kummary
Paul Makin
Paul Baker
Michael Richards| + +## Dernière mise à jour (résumé) +Des contributions DRPP à l’IaC ont accru les coûts d’infrastructure en optimisant de gros déploiements multi-instances. Pour les petits schémas, l’équipe a développé une alternative allégée — provisoirement « IAC Lite ». Des tests de déploiement tournent sur AWS et sur le lab de la Foundation. Objectif : une expérience open source rationalisée, peu gourmande, avec un minimum d’étapes manuelles. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/dispute.md b/docs/fr/product/features/workstreams/dispute.md new file mode 100644 index 000000000..53768ba14 --- /dev/null +++ b/docs/fr/product/features/workstreams/dispute.md @@ -0,0 +1,31 @@ +--- +sidebarTitle: Litiges +--- + +# Workstream Gestion des litiges + +Ce workstream vise une solution de gestion des litiges intégrable au cœur Mojaloop et aux DFSP connectés, pour les opérateurs de hub et les DFSP participants, sur l’ensemble des types de déploiement. + +# Justification métier + +La fiabilité des transactions Mojaloop appelle une solution dédiée open source de gestion des litiges. + +Les solutions génériques supposent souvent une découverte limitée et peu ou pas d’accord sur les conditions, ce qui multiplie les litiges ; elles ne correspondent pas bien à un déploiement Mojaloop. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| Promesse Ishimwe | Derrick Wamatu | + +## Dernière mise à jour (résumé) +Aucune mise à jour du workstream Gestion des litiges sur ce cycle. Promesse n’a pas pu assister à l’appel et aucune mise à jour écrite n’a été fournie. Une mise à jour est attendue à la prochaine session. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/evolution.md b/docs/fr/product/features/workstreams/evolution.md new file mode 100644 index 000000000..0dedc1704 --- /dev/null +++ b/docs/fr/product/features/workstreams/evolution.md @@ -0,0 +1,41 @@ +--- +sidebarTitle: Évolution Mojaloop +--- + +# Workstream Évolution Mojaloop + +Ce workstream vise une évolution majeure des services centraux critiques de Mojaloop : +- remplacer la fonctionnalité de comptabilité au cœur de Mojaloop par TigerBeetle ; +- remplacer le cœur du moteur de règlement par des capacités TigerBeetle alignées avec Settlement V3. + +# Justification métier + +TigerBeetle est la technologie de grand livre de nouvelle génération pensée pour Mojaloop, avec un potentiel d’amélioration du débit d’au moins un ordre de grandeur. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| Michael Richards | James Bush
Lewis Daley
Sam Kummary
Paul Makin | + +## Dernière mise à jour (résumé) +### Audit forensic +La refonte de l’audit forensic est prête à être implémentée mais attend le financement de projets d’adoption à venir. Peu de progrès attendus avant mi-T1 2026. + +### Nouveau modèle comptable +Le nouveau modèle est largement validé et marque un alignement majeur sur les normes comptables internationales, répondant aux préoccupations des institutions mondiales et renforçant la crédibilité de Mojaloop comme infrastructure financière. Cible initiale : TigerBeetle ; la production d’une version MySQL du nouveau modèle n’est pas encore tranchée. + +### Intégration TigerBeetle +Compte tenu de la complexité accrue du modèle comptable, TigerBeetle est le moteur de grand livre privilégié. La planification d’intégration est en cours ; les travaux devraient démarrer avant fin d’année. + +### Settlement v3 +Settlement v3 introduit des lots de règlement déterministes, pour des problèmes de rapprochement de longue date et une montée en charge multi-schémas. TigerBeetle stockera les clés de lot de règlement ; les composants SQL et les API d’administration devront évoluer fortement pour la configuration du modèle, le suivi des lots et les opérations de règlement. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/fintech_participation.md b/docs/fr/product/features/workstreams/fintech_participation.md new file mode 100644 index 000000000..34f64d65f --- /dev/null +++ b/docs/fr/product/features/workstreams/fintech_participation.md @@ -0,0 +1,31 @@ +--- +sidebarTitle: Participation fintech +--- + +# Workstream Outils de participation pour les fintechs + +L’objectif de ce workstream est de développer une offre « outils Fintech » pour aider les fintechs et acteurs assimilés à intégrer leurs systèmes à un Hub Mojaloop via l’interface PISP. + +# Justification métier + +Faciliter l’offre de services par les fintechs connectées à un schéma de paiements Mojaloop en réduisant temps, coût et complexité — techniques et métier. + +Cela devrait favoriser des schémas Mojaloop plus dynamiques et inclusifs, avec un impact sur l’accès aux paiements instantanés pour plus de personnes. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| Alain Kajangwe | Jean de Dieu Uwizeye
Bonaparte Ituze
Yvan Rugwe | + +## Dernière mise à jour (résumé) +Aucune mise à jour du workstream Participation fintech (*Open Banking*) sur ce cycle. Alain n’a pas pu assister à l’appel et aucune mise à jour écrite n’a été fournie. Une mise à jour est attendue à la prochaine session. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/iso20022.md b/docs/fr/product/features/workstreams/iso20022.md new file mode 100644 index 000000000..8359065b9 --- /dev/null +++ b/docs/fr/product/features/workstreams/iso20022.md @@ -0,0 +1,28 @@ +--- +sidebarTitle: ISO 20022 +--- + +# Workstream Affinage ISO 20022 + +Ce workstream affine l’implémentation ISO 20022 livrée avec Mojaloop V17.0.0 à partir du retour des adoptants, y compris les messages ISO 20022 définis dans le *Market Practice Document* (MPD) et les mises à jour du MPD lui-même. + +# Justification métier + +ISO 20022 devient rapidement la norme mondiale de messagerie pour les systèmes de paiement ; les messages SIIP Mojaloop en ISO 20022, dont l’accord sur les conditions (*Agreement of Terms*), s’inscrivent dans ce mouvement. Les détails ne sont toutefois pas encore figés et des affinements restent probables. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| Michael Richards |Paul Baker
Julie Guetta | + +## Dernière mise à jour (résumé) +Pas de mise à jour récente. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/lei.md b/docs/fr/product/features/workstreams/lei.md new file mode 100644 index 000000000..d17f30208 --- /dev/null +++ b/docs/fr/product/features/workstreams/lei.md @@ -0,0 +1,31 @@ +--- +sidebarTitle: Adressage LEI +--- + +# Workstream Adressage LEI + +Ce workstream soutient les transactions commerçants nationales et transfrontalières par l’adoption de l’identifiant international LEI. C’est une collaboration entre la Mojaloop Foundation et GLEIF, devant aboutir à un pilote avec un adoptant Mojaloop. + +# Justification métier + +La collaboration avec GLEIF est stratégique pour la Foundation : GLEIF bénéficie du soutien de l’« establishment » financier (FSB, G20). + +Elle renforce aussi la crédibilité sur les paiements commerçants transfrontaliers et complète le travail ISO 20022 en introduisant les LEI dans l’écosystème Mojaloop. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| Clare Rowley
Ololade Osunsanya | Michael Richards
Paul Makin
Shuchita Prakash
Sam Kummary
James Bush
Xiaodi Wang | + +## Dernière mise à jour (résumé) +La documentation est la priorité : intégration des flux LEI dans l’introduction à Mojaloop, et préparation de la collaboration avec le workstream ISO 20022 sur des exemples de messages, notamment un cas P2B avec LEI comme identifiant bénéficiaire. Les questions plus larges sur l’application des LEI aux identités DFSP sont reportées compte tenu de la complexité et des implications réglementaires. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/participation.md b/docs/fr/product/features/workstreams/participation.md new file mode 100644 index 000000000..4cf1cc4aa --- /dev/null +++ b/docs/fr/product/features/workstreams/participation.md @@ -0,0 +1,31 @@ +--- +sidebarTitle: Outils de participation +--- + +# Workstream Outils de participation + +L’objectif global du workstream Outils de participation est de constituer une offre « outils DFSP » pour aider les DFSP et les intégrateurs à raccorder leurs systèmes à un Hub Mojaloop. Au-delà de solutions semi-finales, le portefeuille comprend les outils nécessaires à l’intégration et des implémentations exemplaires adaptées à différents profils de DFSP. + +Il convient de rappeler à tous les DFSP que les bénéfices d’une solution de paiement instantané inclusive comme Mojaloop reposent sur une démarche « écosystème complet » : étendre la portée du service Mojaloop dans leurs environnements pour offrir à eux et à leurs clients finalité des transactions, coûts réduits et exécution fiable de chaque transaction valide. + +# Justification métier + +En réduisant les obstacles de temps, de coût et de complexité — techniques et métier — pour des DFSP de profils variés, on favorise la croissance et l’ampleur des schémas Mojaloop, avec un impact sur l’accès de plus de personnes aux paiements instantanés inclusifs. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| James Bush | Sam Kummary
Yevhen Kryiukha
Paul Baker
Vijay Kumar
Phil Green
Steve Haley
Paul Makin | + +## Dernière mise à jour (résumé) +Le workstream progresse sur l’intégration des participants, notamment grâce au Mojaloop Connection Manager (MCM). Découplé du code IaC, le MCM peut être adopté séparément par les schémas, ce qui élargit son usage. La documentation est la priorité la plus urgente ; un rédacteur technique prépare des contenus couvrant MCM, Payment Manager et l’Integration Toolkit. De la documentation donnée par Infitx sera généralisée pour la communauté. De nouveaux mini-guides ont été publiés pour faciliter la navigation dans les outils Mojaloop. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/performance.md b/docs/fr/product/features/workstreams/performance.md new file mode 100644 index 000000000..78a5ffa8b --- /dev/null +++ b/docs/fr/product/features/workstreams/performance.md @@ -0,0 +1,31 @@ +--- +sidebarTitle: Workstream performance +--- + +# Workstream Optimisation des performances + +Démontrer les performances de Mojaloop dans diverses configurations de déploiement, produire et publier un livre blanc. Utiliser une configuration de référence sur site pour mesurer l’évolution des performances entre versions Mojaloop. + +# Justification métier + +Un livre blanc montrant que Mojaloop dépasse les exigences de performance des adoptants serait un atout majeur pour la communauté. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| James Bush | Julie Guetta
Shashi Hirugade
Sam Kummary
Nathan Delma
Ablipay (Jerome, équipe)| + +## Dernière mise à jour (résumé) +Le workstream a atteint 1 000 TPS avant la rencontre de Nairobi. Avec réplication, le débit reste élevé (950 TPS). L’équipe vise 2 000 et 2 500 TPS pour le livre blanc, avec des recommandations de dimensionnement matériel. Les premiers tests TigerBeetle suggèrent des gains de performance importants et une baisse des coûts d’infrastructure. + +Le *tiering* du stockage à long terme a été identifié comme essentiel aux obligations de conservation réglementaire dans les schémas à fort volume. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/pqs.md b/docs/fr/product/features/workstreams/pqs.md new file mode 100644 index 000000000..bfe6050d3 --- /dev/null +++ b/docs/fr/product/features/workstreams/pqs.md @@ -0,0 +1,29 @@ +--- +sidebarTitle: Qualité et sécurité +--- + +# Workstream Qualité et sécurité de plateforme (PQS) + +Le workstream PQS est dédié à l’évaluation, au maintien et aux renforcements de la sécurité et de la qualité de la plateforme Mojaloop : connectivité des DFSP participants (y compris transactions), sécurité des portails opérateur, et qualité / sécurité du code open source Mojaloop et des artefacts associés. + +# Justification métier + +Maintenir la qualité et la sécurité de la plateforme Mojaloop ; assurer la gestion des vulnérabilités et planifier les correctifs. Travailler avec adoptants et membres de la communauté pour améliorer progressivement sécurité et qualité. Fournir des fonctionnalités favorisant la conformité et combler les lacunes. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| Sam Kummary | Juan Correa
Devarsh Shah
Shuchita Prakash
Shashi Hirugade | + +## Dernière mise à jour (résumé) +L’équipe vise une release candidate 17.2.0 avant fin d’année : durcissement sécurité, mises à jour des dépendances, fiabilité CI. Des outils d’IA génèrent désormais des PR automatiques pour les dépendances internes Mojaloop, réduisant fortement la charge manuelle. Le portail Finance nécessite une refonte plus large (technologie obsolète). Le workstream a aussi évalué le bac à sable IaC Mojaloop par rapport au nouveau cadre QA. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| diff --git a/docs/fr/product/features/workstreams/qa.md b/docs/fr/product/features/workstreams/qa.md new file mode 100644 index 000000000..deb62dc41 --- /dev/null +++ b/docs/fr/product/features/workstreams/qa.md @@ -0,0 +1,34 @@ +--- +sidebarTitle: Cadre QA +--- + +# Workstream Cadre QA + +L’objectif est de développer un cadre QA pour valider la configuration, les fonctionnalités, la sécurité, la préparation à l’interopérabilité et les performances d’un déploiement. Il pourra servir à l’auto-évaluation des adoptants ou à un examen externe pour rassurer autorités de tutelle et participants. + +# Justification métier + +Un cadre QA offre une approche cohérente pour évaluer qualité et maturité des déploiements Mojaloop, y compris par des évaluations indépendantes de résilience, sécurité et intégrité fonctionnelle. Une démarche structurée permet : + +- aux équipes de déploiement d’identifier et combler les lacunes tôt ; +- aux participants d’évaluer la préparation opérationnelle avant intégration ; +- aux régulateurs d’interpréter la qualité d’implémentation à partir d’éléments objectifs ; +- à la communauté Mojaloop de partager les bonnes pratiques et d’aligner les attentes minimales. + +## Contributeurs +|Responsable du workstream|Contributeurs| +|:--------------:|:--------------:| +| Moses Kipchirchir | Denis Mariru
Brian Njoroge
Ei Nghon Phoo
Sam Kummary | + +## Dernière mise à jour (résumé) +L’ébauche du cadre QA est publiée sur GitHub et Slack et utilisable immédiatement par la communauté. Les retours des adoptants guideront les affinements. Des discussions explorent une version automatisée du cadre dans le pipeline de déploiement ; l’automatisation complète reste un objectif à plus long terme. + +## Applicabilité + +La présente version de ce document correspond à Mojaloop [version 17.1.0](https://github.com/mojaloop/helm/releases/tag/v17.1.0). + +## Historique du document + |Version|Date|Auteur|Détail| +|:--------------:|:--------------:|:--------------:|:--------------:| +|1.1|4 décembre 2025| Paul Makin|Ajout de la dernière mise à jour| +|1.0|25 novembre 2025| Paul Makin|Version initiale| From 82b636fecacf064a447b7aa86d0443f387b9a013 Mon Sep 17 00:00:00 2001 From: maximen Date: Tue, 24 Mar 2026 23:10:36 +0100 Subject: [PATCH 2/7] feat: update French translations for Currency Conversion documentation and diagrams --- .../FXAPI_Discovery.plantuml | 66 +- .../CurrencyConversion/FXAPI_Discovery.svg | 248 +++++++- .../FXAPI_Payer_Agreement.plantuml | 56 +- .../FXAPI_Payer_Agreement.svg | 213 ++++++- .../FXAPI_Payer_CurrencyConversion.plantuml | 102 ++-- .../FXAPI_Payer_CurrencyConversion.svg | 318 +++++++++- .../FXAPI_Payer_Receive_Agreement.plantuml | 100 ++-- .../FXAPI_Payer_Receive_Agreement.svg | 310 +++++++++- .../FXAPI_Payer_Receive_Discovery.plantuml | 68 +-- .../FXAPI_Payer_Receive_Discovery.svg | 168 +++++- ..._Payer_Receive_SenderConfirmation.plantuml | 32 +- ...FXAPI_Payer_Receive_SenderConfirmation.svg | 51 +- ...FXAPI_Payer_Receive_TransferPhase.plantuml | 144 ++--- .../FXAPI_Payer_Receive_TransferPhase.svg | 438 +++++++++++++- .../FXAPI_Payer_SenderConfirmation.plantuml | 44 +- .../FXAPI_Payer_SenderConfirmation.svg | 105 +++- .../FXAPI_Payer_Transfer.plantuml | 166 ++--- .../FXAPI_Payer_Transfer.svg | 565 +++++++++++++++++- .../PAYER_SEND_Agreement.plantuml | 44 +- .../PAYER_SEND_Agreement.svg | 93 ++- .../PAYER_SEND_Confirmation.plantuml | 36 +- .../PAYER_SEND_Confirmation.svg | 43 +- .../PAYER_SEND_CurrencyConversion.plantuml | 64 +- .../PAYER_SEND_CurrencyConversion.svg | 141 ++++- .../PAYER_SEND_Transfer.plantuml | 132 ++-- .../PAYER_SEND_Transfer.svg | 307 +++++++++- .../Payer_SEND_ABORT_TransferPhase.plantuml | 178 +++--- .../Payer_SEND_ABORT_TransferPhase.svg | 490 ++++++++++++++- .../Payer_SEND_Discovery.plantuml | 44 +- .../Payer_SEND_Discovery.svg | 107 +++- .../Interscheme-Agreement.plantuml | 62 +- .../Interscheme/Interscheme-Agreement.svg | 179 +++++- .../Interscheme-ErrorCases.plantuml | 70 +-- .../Interscheme/Interscheme-ErrorCases.svg | 312 +++++++++- .../Interscheme-GETTransfer.plantuml | 54 +- .../Interscheme/Interscheme-GETTransfer.svg | 132 +++- .../Interscheme-Happypath.plantuml | 76 +-- .../Interscheme/Interscheme-Happypath.svg | 274 ++++++++- .../Interscheme-OnDemandDiscovery.plantuml | 102 ++-- .../Interscheme-OnDemandDiscovery.svg | 459 +++++++++++++- ...rscheme-StalePartyIdentifierCache.plantuml | 74 +-- .../Interscheme-StalePartyIdentifierCache.svg | 269 ++++++++- .../Interscheme/Interscheme-Transfer.plantuml | 72 +-- .../Interscheme/Interscheme-Transfer.svg | 219 ++++++- .../Interscheme/SettingUpProxys.plantuml | 12 +- .../features/Interscheme/SettingUpProxys.svg | 61 +- .../v1.0/SequenceDiagrams/Agreement.plantuml | 22 +- .../v1.0/SequenceDiagrams/Agreement.svg | 134 ++++- .../AgreementConversion.plantuml | 18 +- .../SequenceDiagrams/AgreementConversion.svg | 157 ++++- .../ConversionTransfer.plantuml | 26 +- .../SequenceDiagrams/ConversionTransfer.svg | 133 ++++- .../v1.0/SequenceDiagrams/Discovery.plantuml | 20 +- .../v1.0/SequenceDiagrams/Discovery.svg | 121 +++- .../v1.0/SequenceDiagrams/Transfer.plantuml | 28 +- .../v1.0/SequenceDiagrams/Transfer.svg | 132 +++- 56 files changed, 7107 insertions(+), 984 deletions(-) diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.plantuml index 2e20cd471..9bb681e08 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.plantuml +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.plantuml @@ -42,35 +42,35 @@ !$fxCondition = "GRzLaTP7DJ9t4P-a_B..." !$condition = "HOr22-H3AfTDHrSkP..." -title Discovery - Mojaloop Connector Integration +title Découverte — intégration du connecteur Mojaloop actor "$senderName" as A1 - participant "Payer CBS" as PayerCBS -box "Payer DFSP" #LightBlue - participant "Core Connector" as PayerCC - participant "Payer\nMojaloop\nConnector" as D1 + participant "CBS payeur" as PayerCBS +box "DFSP payeur" #LightBlue + participant "Connecteur principal" as PayerCC + participant "Connecteur Mojaloop\npayeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -box "Discovery Service" #LightYellow - participant "ALS Oracle" as ALS +box "Service de découverte" #LightYellow + participant "Oracle ALS" as ALS end box -'box "FX provider" -' participant "FXP\nConnector" as FXP -' participant "Backend FX API" as FXPBackend +'box "Fournisseur de change" +' participant "Connecteur\nFXP" as FXP +' participant "API FX backend" as FXPBackend 'end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 - participant "Core Connector" as PayeeCC +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 + participant "Connecteur principal" as PayeeCC end box 'actor "$receiverName" as A2 autonumber -A1->PayerCBS:I'd like to pay $receiverName\n$payerSendAmount $payerCurrency, please -PayerCBS->PayerCC: Initiate remittance transfer +A1->PayerCBS:Je voudrais payer $receiverName\n$payerSendAmount $payerCurrency, s'il vous plaît +PayerCBS->PayerCC: Lancer le transfert de fonds !if ($advancedCoreConnectorFlow != true) PayerCC->D1: **POST /transfers** !if ($simplified != true) @@ -102,29 +102,29 @@ PayerCC->D1: **GET /parties/MSISDN/$payeeMSISDN** !endif activate D1 -D1->>S1:I want to send to MSISDN $payeeMSISDN\n**GET /parties/MSISDN/$payeeMSISDN** +D1->>S1:Je veux envoyer vers le MSISDN $payeeMSISDN\n**GET /parties/MSISDN/$payeeMSISDN** activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif -S1->ALS:Who owns MSISDN $payeeMSISDN? +S1->ALS:À qui appartient le MSISDN $payeeMSISDN ? activate ALS -ALS-->S1:It's $payeeFSPID +ALS-->S1:C'est $payeeFSPID deactivate ALS -S1->>D2:Do you own MSISDN $payeeMSISDN? +S1->>D2:Le MSISDN $payeeMSISDN vous appartient-il ? activate D2 !if ($simplified != true) -D2-->>S1:202 I'll get back to you +D2-->>S1:202 — Je vous recontacte deactivate S1 !endif D2->PayeeCC: **GET** /parties -PayeeCC->PayeeCC: Validate whether the party \n can receive the transfer -PayeeCC->PayeeCC: Check account and\n get currency type +PayeeCC->PayeeCC: Valider si la partie \n peut recevoir le transfert +PayeeCC->PayeeCC: Vérifier le compte et\nobtenir le type de devise !if ($simplified != true) -PayeeCC-->D2: Result +PayeeCC-->D2: Résultat !endif deactivate S1 -D2->>S1:Yes, it's $receiverName.\n He can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +D2->>S1:Oui, c'est $receiverName.\n Il peut recevoir en $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** !if ($simplified != true) note right PUT /parties @@ -143,17 +143,17 @@ end note !endif activate S1 !if ($simplified != true) -S1-->>D2:200 Gotcha +S1-->>D2:200 — OK !endif deactivate D2 -S1->>D1:Yes, it's $receiverName. \nHe can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +S1->>D1:Oui, c'est $receiverName. \nIl peut recevoir en $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** !if ($simplified != true) -D1-->>S1:200 Gotcha +D1-->>S1:200 — OK !endif deactivate S1 !if ($advancedCoreConnectorFlow != true) - D1-->PayerCC: Here is the party information\nand supported currencies + D1-->PayerCC: Voici les informations sur la partie\net les devises prises en charge note right { "transferId": "$transferId", @@ -190,7 +190,7 @@ deactivate S1 } end note !else - D1-->PayerCC: Here is the party information\nand supported currencies + D1-->PayerCC: Voici les informations sur la partie\net les devises prises en charge !if ($simplified != true) note right of PayerCC { @@ -211,6 +211,6 @@ deactivate S1 !endif !endif deactivate D1 -PayerCC-->PayerCBS:Here's are the \nreceiver details -PayerCBS->A1:Hi, $senderName: \nThe number belongs to $receiverName \nLet me know if you want to\n go ahead +PayerCC-->PayerCBS:Voici les \ndétails du bénéficiaire +PayerCBS->A1:Bonjour, $senderName : \nLe numéro appartient à $receiverName \nDites-moi si vous souhaitez\n continuer @enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.svg index c1b690c59..dd017b8a2 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.svg +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Discovery.svg @@ -1 +1,247 @@ -Discovery - Mojaloop Connector IntegrationPayer DFSPDiscovery ServicePayee DFSPJohnJohnPayer CBSPayer CBSCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchALS OracleALS OraclePayeeMojaloopConnectorPayeeMojaloopConnectorCore ConnectorCore Connector1I'd like to pay Yaro300 BWP, please2Initiate remittance transfer3POST /transfers{"homeTransactionId": "string","from": {"dateOfBirth": "1966-06-16","displayName": "John","firstName": "$senderFirstName","middleName": "$senderMiddleName","lastName": """fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"idType": "MSISDN","idValue": "2551234567890"},"amountType": "SEND","currency": "BWP","amount": "300"}4I want to send to MSISDN 2551234567890GET /parties/MSISDN/25512345678905202 I'll get back to you6Who owns MSISDN 2551234567890?7It's PayeeFSP8Do you own MSISDN 2551234567890?9202 I'll get back to you10GET/parties11Validate whether the partycan receive the transfer12Check account andget currency type13Result14Yes, it's Yaro.He can receive in TZSPUT /parties/MSISDN/2551234567890PUT /parties{"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro"},"supportedCurrencies": [ "TZS" ]}15200 Gotcha16Yes, it's Yaro.He can receive in TZSPUT /parties/MSISDN/255123456789017200 Gotcha18Here is the party informationand supported currencies{"transferId": "d9ce59d4359843968630581bb0","homeTransactionId": "string","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"type": "CONSUMER","idType": "MSISDN","idValue": "2551234567890","displayName": "Yaro","fspId": "PayeeFSP""supportedCurrencies": [ "TZS" ]},"amountType": "SEND","currency": "BWP","amount": "300""currentState": "WAITING_FOR_PARTY_ACCEPTANCE","getPartiesResponse": {"body": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro","supportedCurrencies": [ "TZS" ]}}}19Here's are thereceiver details20Hi, John:The number belongs to YaroLet me know if you want togo ahead \ No newline at end of file + + Découverte — intégration du connecteur Mojaloop + + + Découverte — intégration du connecteur Mojaloop + + DFSP payeur + + Service de découverte + + DFSP bénéficiaire + + + + + + + + + + + + + + John + + + John + + + + CBS payeur + + CBS payeur + + Connecteur principal + + Connecteur principal + + Connecteur Mojaloop + payeur + + Connecteur Mojaloop + payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Oracle ALS + + Oracle ALS + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + + Connecteur principal + + Connecteur principal + + + + + + + + 1 + Je voudrais payer Yaro + 300 BWP, s'il vous plaît + + + 2 + Lancer le transfert de fonds + + + 3 + POST /transfers + + + { + "homeTransactionId": "string", + "from": { + "dateOfBirth": "1966-06-16", + "displayName": "John", + "firstName": "$senderFirstName", + "middleName": "$senderMiddleName", + "lastName": "" + "fspId": "PayerFSP", + "idType": "MSISDN", + "idValue": "26787654321" + }, + "to": { + "idType": "MSISDN", + "idValue": "2551234567890" + }, + "amountType": "SEND", + "currency": "BWP", + "amount": "300" + } + + + + 4 + Je veux envoyer vers le MSISDN 2551234567890 + GET /parties/MSISDN/2551234567890 + + + + 5 + 202 — Je vous recontacte + + + 6 + À qui appartient le MSISDN 2551234567890 ? + + + 7 + C'est PayeeFSP + + + + 8 + Le MSISDN 2551234567890 vous appartient-il ? + + + + 9 + 202 — Je vous recontacte + + + 10 + GET + /parties + + + + + 11 + Valider si la partie + peut recevoir le transfert + + + + + 12 + Vérifier le compte et + obtenir le type de devise + + + 13 + Résultat + + + + 14 + Oui, c'est Yaro. + Il peut recevoir en TZS + PUT /parties/MSISDN/2551234567890 + + + PUT /parties + { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "2551234567890", + "fspId": "PayeeFSP" + }, + "name": "Yaro" + }, + "supportedCurrencies": [ "TZS" ] + } + + + + 15 + 200 — OK + + + + 16 + Oui, c'est Yaro. + Il peut recevoir en TZS + PUT /parties/MSISDN/2551234567890 + + + + 17 + 200 — OK + + + 18 + Voici les informations sur la partie + et les devises prises en charge + + + { + "transferId": "d9ce59d4359843968630581bb0", + "homeTransactionId": "string", + "from": { + "displayName": "John", + "fspId": "PayerFSP", + "idType": "MSISDN", + "idValue": "26787654321" + }, + "to": { + "type": "CONSUMER", + "idType": "MSISDN", + "idValue": "2551234567890", + "displayName": "Yaro", + "fspId": "PayeeFSP" + "supportedCurrencies": [ "TZS" ] + }, + "amountType": "SEND", + "currency": "BWP", + "amount": "300" + "currentState": " + WAITING_FOR_PARTY_ACCEPTANCE + ", + "getPartiesResponse": { + "body": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "2551234567890", + "fspId": "PayeeFSP" + }, + "name": "Yaro", + "supportedCurrencies": [ "TZS" ] + } + } + } + + + 19 + Voici les + détails du bénéficiaire + + + 20 + Bonjour, John : + Le numéro appartient à Yaro + Dites-moi si vous souhaitez + continuer + + diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.plantuml index 9f71b0acb..5364328ae 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.plantuml +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.plantuml @@ -42,40 +42,40 @@ !$fxCondition = "GRzLaTP7DJ9t4P-a_B..." !$condition = "HOr22-H3AfTDHrSkP..." -title Agreement Phase - Mojaloop Connector Integration +title Phase d'accord — intégration du connecteur Mojaloop 'actor "$senderName" as A1 -' participant "Payer CBS" as PayerCBS -box "Payer DFSP" #LightBlue - participant "Core Connector" as PayerCC - participant "Payer\nMojaloop\nConnector" as D1 +' participant "CBS payeur" as PayerCBS +box "DFSP payeur" #LightBlue + participant "Connecteur principal" as PayerCC + participant "Connecteur Mojaloop\npayeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -'box "FX provider" -' participant "FXP\nConnector" as FXP -' participant "Backend FX API" as FXPBackend +'box "Fournisseur de change" +' participant "Connecteur\nFXP" as FXP +' participant "API FX backend" as FXPBackend 'end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 - participant "Core Connector" as PayeeCC +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 + participant "Connecteur principal" as PayeeCC end box 'actor "$receiverName" as A2 autonumber !if ($advancedCoreConnectorFlow != true) -PayerCC->D1: I want to get a quote from the FSP\n**PUT /transfers** +PayerCC->D1: Je souhaite obtenir un devis du FSP\n**PUT /transfers** note left {"acceptConversion": true} end note !else -PayerCC->D1: I want to get a quote from the FSP\n**POST /quotes** +PayerCC->D1: Je souhaite obtenir un devis du FSP\n**POST /quotes** !if ($simplified != true) note right of PayerCC { @@ -114,7 +114,7 @@ PayerCC->D1: I want to get a quote from the FSP\n**POST /quotes** !endif -D1->>S1:Please quote for a transfer which \nsends $fxpTargetAmount $payeeCurrency.\n**POST /quotes** +D1->>S1:Merci de coter un transfert qui \nenvoie $fxpTargetAmount $payeeCurrency.\n**POST /quotes** !if ($simplified != true) note left **POST /quotes** @@ -145,13 +145,13 @@ end note !endif activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif S1->>D2:**POST /quotes** activate D2 !if ($simplified != true) -D2-->>S1:202 I'll get back to you +D2-->>S1:202 — Je vous recontacte !endif deactivate S1 D2->PayeeCC:**POST /quoterequests** @@ -183,8 +183,8 @@ note left } end note !endif -PayeeCC->PayeeCC:OK, so I will charge $payeeFee $payeeCurrency for this.\nNow I create terms of the transfer -PayeeCC-->D2:Here are the terms +PayeeCC->PayeeCC:OK, je facturerai $payeeFee $payeeCurrency pour cela.\nJe crée maintenant les conditions du transfert +PayeeCC-->D2:Voici les conditions !if ($simplified != true) note right **POST /quoterequests** response @@ -201,8 +201,8 @@ note right } end note !endif -D2->D2:Now I will sign the transaction object -D2->>S1:Here's the signed quote +D2->D2:Je signe maintenant l'objet de transaction +D2->>S1:Voici le devis signé note right **put /quotes/$quoteId** { @@ -216,21 +216,21 @@ note right "currency": "$payeeCurrency", "amount": "$payeeFee"}, "expiration": "$payeeQuoteExpiration", - "ilpPacket": "", + "ilpPacket": "", "condition": "$condition" } end note activate S1 !if ($simplified != true) -S1-->>D2:200 Gotcha +S1-->>D2:200 — OK !endif deactivate D2 -S1->>D1:Here's the signed quote\n**PUT /quotes/$quoteId** +S1->>D1:Voici le devis signé\n**PUT /quotes/$quoteId** activate D1 !if ($simplified != true) -D1-->>S1:200 Gotcha +D1-->>S1:200 — OK !endif deactivate S1 -D1->D1:OK, I can see that there \nare going to be $payeeFee $payeeCurrency in charges. +D1->D1:OK, je vois qu'il y aura \n$payeeFee $payeeCurrency de frais. @enduml diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.svg index b9d56798d..bd03b9f04 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.svg +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Agreement.svg @@ -1 +1,212 @@ -Agreement Phase - Mojaloop Connector IntegrationPayer DFSPPayee DFSPCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchPayeeMojaloopConnectorPayeeMojaloopConnectorCore ConnectorCore Connector1I want to get a quote from the FSPPUT /transfers{"acceptConversion": true}2Please quote for a transfer whichsends 48000 TZS.POST /quotesPOST /quotes{"quoteId": "382987a875ce403...","transactionId": "d9ce59d43598439...","payee": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro","supportedCurrencies": [ "TZS" ] },"payer": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321","fspId": "PayerFSP"},"name": "John"},"amountType": "SEND","amount": {"currency": "TZS","amount": "48000"},"converter": "PAYER","expiration": "2021-08-25T14:17:09.663+01:00"}3202 I'll get back to you4POST /quotes5202 I'll get back to you6POST /quoterequestsPOST /quoterequests{"quoteId": "382987a875ce403...","transactionId": "d9ce59d43598439...","payee": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro","supportedCurrencies": [ "TZS" ]},"payer": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321","fspId": "PayerFSP"},"name": "John"},"amountType": "SEND","amount": {"currency": "TZS","amount": "48000"},"converter": "PAYER","expiration": "2021-08-25T14:17:09.663+01:00"}7OK, so I will charge 4000 TZS for this.Now I create terms of the transfer8Here are the termsPOST /quoterequestsresponse{"quoteId": "382987a875ce403...","transactionId": "d9ce59d43598439...","payeeFspFeeAmount": "4000","payeeFspFeeAmountCurrency": "TZS","payeeReceiveAmount": "44000","payeeReceiveAmountCurrency": "TZS","transferAmount": "48000","transferAmountCurrency": "TZS""expiration": "2021-08-25T14:17:09.663+01:00"}9Now I will sign the transaction object10Here's the signed quoteput /quotes/382987a875ce403...{"transferAmount": {"currency": "TZS","amount": "48000"},"payeeReceiveAmount": {"currency": "TZS","amount": "44000"},"payeeFspFee": {"currency": "TZS","amount": "4000"},"expiration": "$payeeQuoteExpiration","ilpPacket": "<This is encoded transaction object.>","condition": "HOr22-H3AfTDHrSkP..."} 11200 Gotcha12Here's the signed quotePUT /quotes/382987a875ce403...13200 Gotcha14OK, I can see that thereare going to be 4000 TZS in charges. \ No newline at end of file + + Phase d'accord — intégration du connecteur Mojaloop + + + Phase d'accord — intégration du connecteur Mojaloop + + DFSP payeur + + DFSP bénéficiaire + + + + + + + + + + + Connecteur principal + + Connecteur principal + + Connecteur Mojaloop + payeur + + Connecteur Mojaloop + payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + + Connecteur principal + + Connecteur principal + + + + + + + 1 + Je souhaite obtenir un devis du FSP + PUT /transfers + + + {"acceptConversion": true} + + + + 2 + Merci de coter un transfert qui + envoie 48000 TZS. + POST /quotes + + + POST /quotes + { + "quoteId": "382987a875ce403...", + "transactionId": "d9ce59d43598439...", + "payee": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "2551234567890", + "fspId": "PayeeFSP"}, + "name": "Yaro", + "supportedCurrencies": [ "TZS" ] }, + "payer": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "26787654321", + "fspId": "PayerFSP"}, + "name": "John"}, + "amountType": "SEND", + "amount": { + "currency": "TZS", + "amount": "48000"}, + "converter": "PAYER", + "expiration": "2021-08-25T14:17:09.663+01:00" + } + + + + 3 + 202 — Je vous recontacte + + + + 4 + POST /quotes + + + + 5 + 202 — Je vous recontacte + + + 6 + POST /quoterequests + + + POST /quoterequests + { + "quoteId": "382987a875ce403...", + "transactionId": "d9ce59d43598439...", + "payee": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "2551234567890", + "fspId": "PayeeFSP"}, + "name": "Yaro", + "supportedCurrencies": [ "TZS" ]}, + "payer": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "26787654321", + "fspId": "PayerFSP"}, + "name": "John"}, + "amountType": "SEND", + "amount": { + "currency": "TZS", + "amount": "48000"}, + "converter": "PAYER", + "expiration": "2021-08-25T14:17:09.663+01:00" + } + + + + + 7 + OK, je facturerai 4000 TZS pour cela. + Je crée maintenant les conditions du transfert + + + 8 + Voici les conditions + + + POST /quoterequests + response + { + "quoteId": "382987a875ce403...", + "transactionId": "d9ce59d43598439...", + "payeeFspFeeAmount": "4000", + "payeeFspFeeAmountCurrency": "TZS", + "payeeReceiveAmount": "44000", + "payeeReceiveAmountCurrency": "TZS", + "transferAmount": "48000", + "transferAmountCurrency": "TZS" + "expiration": "2021-08-25T14:17:09.663+01:00" + } + + + + + 9 + Je signe maintenant l'objet de transaction + + + + 10 + Voici le devis signé + + + put /quotes/382987a875ce403... + { + "transferAmount": { + "currency": "TZS", + "amount": "48000"}, + "payeeReceiveAmount": { + "currency": "TZS", + "amount": "44000"}, + "payeeFspFee": { + "currency": "TZS", + "amount": "4000"}, + "expiration": "$payeeQuoteExpiration", + "ilpPacket": "<Objet de transaction encodé>", + "condition": "HOr22-H3AfTDHrSkP..." + } +   + + + + 11 + 200 — OK + + + + 12 + Voici le devis signé + PUT /quotes/382987a875ce403... + + + + 13 + 200 — OK + + + + + 14 + OK, je vois qu'il y aura + 4000 TZS de frais. + + diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.plantuml index 994fc0f2d..4f843b4e5 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.plantuml +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.plantuml @@ -42,57 +42,57 @@ !$fxCondition = "GRzLaTP7DJ9t4P-a_B..." !$condition = "HOr22-H3AfTDHrSkP..." -title Agreement Phase Currency Conversion - Mojaloop Connector Integration +title Phase d'accord — conversion de devises — intégration du connecteur Mojaloop actor "$senderName" as A1 -participant "Payer CBS" as PayerCBS -box "Payer DFSP" #LightBlue - participant "Core Connector" as PayerCC - participant "Payer\nMojaloop\nConnector" as D1 +participant "CBS payeur" as PayerCBS +box "DFSP payeur" #LightBlue + participant "Connecteur principal" as PayerCC + participant "Connecteur Mojaloop\npayeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -box "FX provider" - participant "FXP\nConnector" as FXP +box "Fournisseur de change" + participant "Connecteur\nFXP" as FXP participant "Backend FX API \n(Core Connector)" as FXPBackend end box -'box "Payee DFSP" #LightBlue -' participant "Payee\nMojaloop\nConnector" as D2 -' participant "Core Connector" as PayeeCC +'box "DFSP bénéficiaire" #LightBlue +' participant "Connecteur Mojaloop\nbénéficiaire" as D2 +' participant "Connecteur principal" as PayeeCC 'end box 'actor "$receiverName" as A2 autonumber -A1->PayerCBS:Yes please, go ahead -PayerCBS->PayerCC: Payer has accepted\n the party information +A1->PayerCBS:Oui, continuez s'il vous plaît +PayerCBS->PayerCC: Le payeur a accepté\n les informations sur la partie !if ($shortCutSingleFXP != true) !if ($advancedCoreConnectorFlow != true) -PayerCC->>D1:Get quotation\n**PUT /transfers/$transferId** +PayerCC->>D1:Obtenir le devis\n**PUT /transfers/$transferId** note left { "acceptParty": true } end note -D1->D1:Hmmm. I can only send in $payerCurrency.\nI need to get some currency conversion +D1->D1:Hmm. Je ne peux envoyer qu'en $payerCurrency.\nJ'ai besoin d'une conversion de devises !else -PayerCC->PayerCC:Hmmm. I can only send in $payerCurrency.\nI need to get some currency conversion -PayerCC->>PayerCC:Lookup the local cached FXPs\n that can provide the conversion +PayerCC->PayerCC:Hmm. Je ne peux envoyer qu'en $payerCurrency.\nJ'ai besoin d'une conversion de devises +PayerCC->>PayerCC:Consulter les FXP en cache localement\npouvant assurer la conversion !endif -D1->>D1:Lookup the local cached FXPs\n that can provide the conversion +D1->>D1:Consulter les FXP en cache localement\npouvant assurer la conversion !if ($advancedCoreConnectorFlow != true) -' TODO: We can pause the execution here if required to allow the core connector to select the FXP -D1->D1:I'll ask FDH FX to perform my conversion +' TODO : on peut suspendre l'exécution ici si besoin pour permettre au connecteur principal de sélectionner le FXP +D1->D1:Je vais demander à FDH FX d'effectuer ma conversion !else -D1->>PayerCC:Here are the available FXPs +D1->>PayerCC:Voici les FXP disponibles note right of PayerCC { "providers": [ @@ -101,8 +101,8 @@ note right of PayerCC } end note -PayerCC->PayerCC:I'll ask FDH FX to perform my conversion -PayerCC->D1: I want to get a quote from this FXP\n**POST /fxQuotes** +PayerCC->PayerCC:Je vais demander à FDH FX d'effectuer ma conversion +PayerCC->D1: Je souhaite obtenir un devis de ce FXP\n**POST /fxQuotes** !if ($simplified != true) note right of PayerCC { @@ -131,9 +131,9 @@ PayerCC->D1: I want to get a quote from this FXP\n**POST /fxQuotes** deactivate S1 !if ($shortCutSingleFXP != true) -D1->>S1:Here is the initial version of the transfer.\nPlease quote me for the currency conversion. +D1->>S1:Voici la version initiale du transfert.\nMerci de me coter la conversion de devises. !else -D1->>FXP:Here is the initial version of the transfer.\nPlease quote me for the currency conversion. +D1->>FXP:Voici la version initiale du transfert.\nMerci de me coter la conversion de devises. !endif note left **post /fxQuotes** @@ -156,21 +156,21 @@ end note !if ($shortCutSingleFXP != true) activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif deactivate D1 -S1->>FXP:Here is the initial version of the transfer.\nPlease quote me for the currency conversion.\n**POST /fxQuote** +S1->>FXP:Voici la version initiale du transfert.\nMerci de me coter la conversion de devises.\n**POST /fxQuote** activate FXP !if ($simplified != true) -FXP-->>S1:202 I'll get back to you +FXP-->>S1:202 — Je vous recontacte !endif deactivate S1 !else !if ($simplified != true) -FXP-->>D1:202 I'll get back to you +FXP-->>D1:202 — Je vous recontacte !endif !endif -FXP->FXPBackend:Lookup FX rate +FXP->FXPBackend:Consulter le taux de change !if ($simplified != true) note left **post /fxQuotes** @@ -192,10 +192,10 @@ note left end note !endif note over FXPBackend - I will add a $fxpChargesSource $payerCurrency fee for undertaking the conversion. - Now I'll set an expiry time, sign the quotation object, + J'ajouterai des frais de $fxpChargesSource $payerCurrency pour la conversion. + Je fixe maintenant une heure d'expiration et je signe l'objet de devis, end note -FXPBackend-->FXP:Return FX rate +FXPBackend-->FXP:Renvoyer le taux de change !if ($simplified != true) note right **post /fxQuotes** response @@ -227,19 +227,19 @@ end note !endif note over FXP - Now I'll sign the quotation object, - create an ILP prepare packet and return it in the intermediary object. + Je signe maintenant l'objet de devis, + je crée un paquet ILP prepare et le renvoie dans l'objet intermédiaire. - **NOTE:** the ILP prepare packet contains the following items, all encoded: - - The amount being sent (i.e. in the source currency) - - An expiry time - - The condition - - The name of the FXP - - The content of the conversion terms + **REMARQUE :** le paquet ILP prepare contient les éléments suivants, tous encodés : + - Le montant envoyé (c.-à-d. dans la devise source) + - Une heure d'expiration + - La condition + - Le nom du FXP + - Le contenu des conditions de conversion end note !if ($shortCutSingleFXP != true) -FXP->>S1:Here's the signed conversion object +FXP->>S1:Voici l'objet de conversion signé note right **PUT /fxQuotes/$conversionRequestId** { @@ -270,26 +270,26 @@ note right end note activate S1 !if ($simplified != true) -S1-->>FXP:200 Gotcha +S1-->>FXP:200 — OK !endif deactivate FXP -S1->>D1:Here's the signed conversion object\n**PUT /fxQuotes/$conversionRequestId** +S1->>D1:Voici l'objet de conversion signé\n**PUT /fxQuotes/$conversionRequestId** activate D1 !if ($simplified != true) -D1-->>S1:Gotcha +D1-->>S1:Compris !endif deactivate S1 !else -FXP-->>D1:Here's the signed conversion object\n**PUT /fxQuotes/$conversionRequestId** +FXP-->>D1:Voici l'objet de conversion signé\n**PUT /fxQuotes/$conversionRequestId** !if ($simplified != true) -D1-->>FXP:202 I'll get back to you +D1-->>FXP:202 — Je vous recontacte !endif activate D1 !endif !if ($advancedCoreConnectorFlow != true) - D1-->PayerCC: Here are the conversion terms + D1-->PayerCC: Voici les conditions de conversion note right **POST/PUT /transfers** response { @@ -342,7 +342,7 @@ activate D1 } end note !else - D1->PayerCC: Here are the conversion terms + D1->PayerCC: Voici les conditions de conversion !if ($simplified != true) note right of PayerCC { diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.svg index 8114a5163..e960cc853 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.svg +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_CurrencyConversion.svg @@ -1 +1,317 @@ -Agreement Phase Currency Conversion - Mojaloop Connector IntegrationPayer DFSPFX providerJohnJohnPayer CBSPayer CBSCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorBackend FX API(Core Connector)Backend FX API(Core Connector)1Yes please, go ahead2Payer has acceptedthe party information3Get quotationPUT /transfers/d9ce59d4359843968630581bb0{ "acceptParty": true }4Hmmm. I can only send in BWP.I need to get some currency conversion5Lookup the local cached FXPsthat can provide the conversion6I'll ask FDH FX to perform my conversion7Here is the initial version of the transfer.Please quote me for the currency conversion.post /fxQuotes{"conversionRequestId": "828cc75f1654415e8fcddf76cc","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS"},"expiration": "2021-08-25T14:17:09.663+01:00"}}8202 I'll get back to you9Here is the initial version of the transfer.Please quote me for the currency conversion.POST /fxQuote10202 I'll get back to you11Lookup FX ratepost /fxQuotes{"conversionRequestId": "828cc75f1654415e8fcddf76cc","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS"},"expiration": "2021-08-25T14:17:09.663+01:00"}}I will add a 33 BWP fee for undertaking the conversion.Now I'll set an expiry time, sign the quotation object,12Return FX ratepost /fxQuotesresponse{"conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"expiration": "2021-08-25T14:17:09.663+01:00""charges": [{"chargeType": "string","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}]}}Now I'll sign the quotation object,create an ILP prepare packet and return it in the intermediary object. NOTE:the ILP prepare packet contains the following items, all encoded:- The amount being sent (i.e. in the source currency)- An expiry time- The condition- The name of the FXP- The content of the conversion terms13Here's the signed conversion objectPUT /fxQuotes/828cc75f1654415e8fcddf76cc{"condition": "GRzLaTP7DJ9t4P-a_B...","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"expiration": "2021-08-25T14:17:09.663+01:00""charges": [{"chargeType": "string","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}]}}14200 Gotcha15Here's the signed conversion objectPUT /fxQuotes/828cc75f1654415e8fcddf76cc16Gotcha17Here are the conversion termsPOST/PUT /transfersresponse{"transferId": "d9ce59d4359843968630581bb0","homeTransactionId": "string","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"type": "CONSUMER","idType": "MSISDN","idValue": "2551234567890","displayName": "Yaro","fspId": "PayeeFSP""supportedCurrencies": [ "TZS" ]},"amountType": "SEND","currency": "BWP","amount": "300""currentState": "WAITING_FOR_CONVERSION_ACCEPTANCE","getPartiesResponse": {<Same as the previous responses>},"conversionRequestId": "828cc75f1654415e8fcddf76cc","fxQuotesResponse": {"body": {"condition": "GRzLaTP7DJ9t4P-a_B...","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"expiration": "2021-08-25T14:17:09.663+01:00""charges": [{"chargeType": "string","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}]}}},"fxQuotesResponseSource": "PayeeFSP",} \ No newline at end of file + + Phase d'accord — conversion de devises — intégration du connecteur Mojaloop + + + Phase d'accord — conversion de devises — intégration du connecteur Mojaloop + + DFSP payeur + + Fournisseur de change + + + + + + + + + + + John + + + John + + + + CBS payeur + + CBS payeur + + Connecteur principal + + Connecteur principal + + Connecteur Mojaloop + payeur + + Connecteur Mojaloop + payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur + FXP + + Connecteur + FXP + + Backend FX API + (Core Connector) + + Backend FX API + (Core Connector) + + + + + + 1 + Oui, continuez s'il vous plaît + + + 2 + Le payeur a accepté + les informations sur la partie + + + + 3 + Obtenir le devis + PUT /transfers/d9ce59d4359843968630581bb0 + + + { "acceptParty": true } + + + + + 4 + Hmm. Je ne peux envoyer qu'en BWP. + J'ai besoin d'une conversion de devises + + + + + + 5 + Consulter les FXP en cache localement + pouvant assurer la conversion + + + + + 6 + Je vais demander à FDH FX d'effectuer ma conversion + + + + 7 + Voici la version initiale du transfert. + Merci de me coter la conversion de devises. + + + post /fxQuotes + { + "conversionRequestId": "828cc75f1654415e8fcddf76cc", + "conversionTerms": { + "conversionId": "581f68efb54f416f9161ac34e8", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + } + } + + + + 8 + 202 — Je vous recontacte + + + + 9 + Voici la version initiale du transfert. + Merci de me coter la conversion de devises. + POST /fxQuote + + + + 10 + 202 — Je vous recontacte + + + 11 + Consulter le taux de change + + + post /fxQuotes + { + "conversionRequestId": "828cc75f1654415e8fcddf76cc", + "conversionTerms": { + "conversionId": "581f68efb54f416f9161ac34e8", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + } + } + + + J'ajouterai des frais de 33 BWP pour la conversion. + Je fixe maintenant une heure d'expiration et je signe l'objet de devis, + + + 12 + Renvoyer le taux de change + + + post /fxQuotes + response + { + "conversionTerms": { + "conversionId": "581f68efb54f416f9161ac34e8", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS", + "amount": "48000"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [ + { + "chargeType": "string", + "sourceAmount": { + "currency": "BWP", + "amount": "33"}, + "targetAmount": { + "currency": "TZS", + "amount": "6000"} + }]} + } + + + Je signe maintenant l'objet de devis, + je crée un paquet ILP prepare et le renvoie dans l'objet intermédiaire. +   + REMARQUE : + le paquet ILP prepare contient les éléments suivants, tous encodés : + - Le montant envoyé (c.-à-d. dans la devise source) + - Une heure d'expiration + - La condition + - Le nom du FXP + - Le contenu des conditions de conversion + + + + 13 + Voici l'objet de conversion signé + + + PUT /fxQuotes/828cc75f1654415e8fcddf76cc + { + "condition": "GRzLaTP7DJ9t4P-a_B...", + "conversionTerms": { + "conversionId": "581f68efb54f416f9161ac34e8", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS", + "amount": "48000"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [ + { + "chargeType": "string", + "sourceAmount": { + "currency": "BWP", + "amount": "33"}, + "targetAmount": { + "currency": "TZS", + "amount": "6000"} + }]} + } + + + + 14 + 200 — OK + + + + 15 + Voici l'objet de conversion signé + PUT /fxQuotes/828cc75f1654415e8fcddf76cc + + + + 16 + Compris + + + 17 + Voici les conditions de conversion + + + POST/PUT /transfers + response + { + "transferId": "d9ce59d4359843968630581bb0", + "homeTransactionId": "string", + "from": { + "displayName": "John", + "fspId": "PayerFSP", + "idType": "MSISDN", + "idValue": "26787654321"}, + "to": { + "type": "CONSUMER", + "idType": "MSISDN", + "idValue": "2551234567890", + "displayName": "Yaro", + "fspId": "PayeeFSP" + "supportedCurrencies": [ "TZS" ]}, + "amountType": "SEND", + "currency": "BWP", + "amount": "300" + "currentState": " + WAITING_FOR_CONVERSION_ACCEPTANCE + ", + "getPartiesResponse": {<Same as the previous responses>}, + "conversionRequestId": "828cc75f1654415e8fcddf76cc", + "fxQuotesResponse": { + "body": { + "condition": "GRzLaTP7DJ9t4P-a_B...", + "conversionTerms": { + "conversionId": "581f68efb54f416f9161ac34e8", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS", + "amount": "48000"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [{ + "chargeType": "string", + "sourceAmount": { + "currency": "BWP", + "amount": "33"}, + "targetAmount": { + "currency": "TZS", + "amount": "6000"} + }]}} + }, + "fxQuotesResponseSource": "PayeeFSP", + } + + diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.plantuml index 53bde892c..bdf1afcfa 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.plantuml +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.plantuml @@ -21,33 +21,33 @@ !$totalChargesSourceCurrency = "55" -title Agreement - Currency Conversion with Amount Type RECEIVE +title Accord — conversion de devises avec type de montant RÉCEPTION 'actor "$senderName" as A1 -box "Payer DFSP" #LightBlue -' participant "Payer CBS" as PayerCBS - participant "Payer\nMojaloop\nConnector" as D1 +box "DFSP payeur" #LightBlue +' participant "CBS payeur" as PayerCBS + participant "Connecteur Mojaloop\npayeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -box "FX provider" - participant "FXP\nConnector" as FXP - participant "Backend FX API" as FXPBackend +box "Fournisseur de change" + participant "Connecteur\nFXP" as FXP + participant "API FX backend" as FXPBackend end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 -' participant "Payee CBS" as PayeeCBS +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 +' participant "CBS bénéficiaire" as PayeeCBS end box 'actor "$receiverName" as A2 autonumber -D1->>S1:Please quote for a payment\n of $payeeReceiveAmount $payeeCurrency.\n**POST /quotes** +D1->>S1:Merci de coter un paiement\nde $payeeReceiveAmount $payeeCurrency.\n**POST /quotes** !if ($simplified != true) note left **POST /quotes** @@ -71,21 +71,21 @@ note left end note !endif !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif deactivate D1 S1->>D2:**POST /quotes** activate D2 !if ($simplified != true) -D2-->>S1:202 I'll get back to you +D2-->>S1:202 — Je vous recontacte deactivate S1 !endif -D2->D2: Let me get a quote to do the conversion +D2->D2: Je vais obtenir un devis pour la conversion !if ($shortCutSingleFXP != true) -D2->D2:OK, so I will charge $payeeFee $payeeCurrency for this.\nNow I create terms of the transfer \nand sign the transaction object -D2->>S1:Here's the signed quote +D2->D2:OK, je facturerai $payeeFee $payeeCurrency pour cela.\nJe crée maintenant les conditions du transfert \net je signe l'objet de transaction +D2->>S1:Voici le devis signé note right **put /quotes/382987a875ce...** { @@ -124,26 +124,26 @@ note right end note activate S1 !if ($simplified != true) -S1-->>D2:200 Gotcha +S1-->>D2:200 — OK !endif deactivate D2 -S1->>D1:Here's the signed quote\n**PUT /quotes/382987a875ce...** +S1->>D1:Voici le devis signé\n**PUT /quotes/382987a875ce...** activate D1 !if ($simplified != true) -D1-->>S1:200 Gotcha +D1-->>S1:200 — OK !endif deactivate S1 -D1->D1:OK, I can see that there are going\n to be $payeeFee $payeeCurrency in charges and \nI need send $targetAmount $payeeCurrency to make \nthis transfer +D1->D1:OK, je vois qu'il y aura\n $payeeFee $payeeCurrency de frais et \nque je dois envoyer $targetAmount $payeeCurrency pour \neffectuer ce transfert -group Currency Conversion -D1->D1:Now I need to find out what the \nexchange rate is +group Conversion de devises +D1->D1:Je dois maintenant connaître le \ntaux de change deactivate S1 -D1->D1:I'll ask FDH FX to\n perform my conversion +D1->D1:Je vais demander à FDH FX\nd'effectuer ma conversion !if ($shortCutSingleFXP != true) -D1->>S1:Here is the initial version \nof the transfer.Please quote\n me for the currency conversion. +D1->>S1:Voici la version initiale \ndu transfert. Merci de me coter\n la conversion de devises. !else -D1->>FXP:Here is the initial version\n of the transfer.Please quote\n me for the currency conversion. +D1->>FXP:Voici la version initiale\n du transfert. Merci de me coter\n la conversion de devises. !endif note left **post /fxQuotes** @@ -164,34 +164,34 @@ end note !if ($shortCutSingleFXP != true) activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif deactivate D1 -S1->>FXP:Here is the initial version\n of the transfer. Please quote\n me for the currency conversion.\n**POST /fxQuote** +S1->>FXP:Voici la version initiale\n du transfert. Merci de me coter\n la conversion de devises.\n**POST /fxQuote** activate FXP !if ($simplified != true) -FXP-->>S1:202 I'll get back to you +FXP-->>S1:202 — Je vous recontacte !endif deactivate S1 !else !endif -FXP->FXPBackend:Lookup FX rate -FXPBackend-->FXP:Return FX rate +FXP->FXPBackend:Consulter le taux de change +FXPBackend-->FXP:Renvoyer le taux de change ' !if ($shortCutSingleFXP != true) note right - I will add a $fxpChargesSource $payerCurrency fee for - undertaking the conversion. Now I'll set an expiry time, - sign the quotation object, create an ILP prepare packet - and return it in the intermediary object. - - **NOTE:** the ILP prepare packet contains the following - items, all encoded: - - The amount being sent (i.e. in the source currency) - - An expiry time - - The condition - - The name of the FXP - - The content of the conversion terms + J'ajoute des frais de $fxpChargesSource $payerCurrency pour + la conversion. Je fixe maintenant une heure d'expiration, + je signe l'objet de devis, je crée un paquet ILP prepare + et je le renvoie dans l'objet intermédiaire. + + **REMARQUE :** le paquet ILP prepare contient les éléments + suivants, tous encodés : + - Le montant envoyé (c.-à-d. dans la devise source) + - Une heure d'expiration + - La condition + - Le nom du FXP + - Le contenu des conditions de conversion **PUT /fxQuotes/828cc75f1654...** { @@ -219,20 +219,20 @@ note right } end note !if ($shortCutSingleFXP != true) -FXP->>S1:Here's the signed \nconversion object +FXP->>S1:Voici l'objet \nde conversion signé activate S1 !if ($simplified != true) -S1-->>FXP:200 Gotcha +S1-->>FXP:200 — OK !endif deactivate FXP -S1->>D1:Here's the signed conversion object\n**PUT /fxQuotes/828cc75f1654...** +S1->>D1:Voici l'objet de conversion signé\n**PUT /fxQuotes/828cc75f1654...** activate D1 !if ($simplified != true) -D1-->>S1:Gotcha +D1-->>S1:Compris !endif deactivate S1 !else -FXP-->>D1:Here's the signed conversion object\n**PUT /fxQuotes/828cc75f1654...** +FXP-->>D1:Voici l'objet de conversion signé\n**PUT /fxQuotes/828cc75f1654...** activate D1 !endif diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.svg index 1d646e96c..1abd590c0 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.svg +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Agreement.svg @@ -1 +1,309 @@ -Agreement - Currency Conversion with Amount Type RECEIVEPayer DFSPFX providerPayee DFSPPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorBackend FX APIBackend FX APIPayeeMojaloopConnectorPayeeMojaloopConnector1Please quote for a paymentof 50000 TZS.POST /quotesPOST /quotes{"quoteId": "382987a875ce...","transactionId": "d9ce59d43598...","payee": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890" }}"payer": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321"}},"amountType":"RECEIVE","amount": {"currency": "TZS","amount": "50000"}"validity": "2021-08-25T14:17:09.663+01:00"}2202 I'll get back to you3POST /quotes4202 I'll get back to you5Let me get a quote to do the conversion6OK, so I will charge 4000 TZS for this.Now I create terms of the transferand sign the transaction object7Here's the signed quoteput /quotes/382987a875ce...{"transferAmount": {"currency": "TZS","amount": "54000" },"payeeReceiveAmount": {"currency": "TZS","amount": "50000"},"payeeFspFee": {"currency": "TZS","amount": "4000"},"expiration": "2021-08-25T14:17:09.663+01:00,"transaction": {"transactionId": "d9ce59d43598...","quoteId": "382987a875ce...","payee": {"fspId": "PayeeFSP","partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890"}},"payer": {"fspId": "PayerFSP","partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321"}},"amount": {"currency": "TZS","amount": "54000"},"payeeReceiveAmount": {"currency": "TZS","amount": "50000"},"converter": "PAYER"},"condition": "BfNFPRgfKF8Ke9kpo..."}8200 Gotcha9Here's the signed quotePUT /quotes/382987a875ce...10200 Gotcha11OK, I can see that there are goingto be 4000 TZS in charges andI need send 54000 TZS to makethis transferCurrency Conversion12Now I need to find out what theexchange rate is13I'll ask FDH FX toperform my conversion14Here is the initial versionof the transfer.Please quoteme for the currency conversion.post /fxQuotes{"conversionRequestId": "828cc75f1654...","conversionTerms": {"conversionId": "581f68efb54f...","counterPartyFsp": "FDH_FX","amountType": "RECEIVE","sourceAmount": {"currency": "BWP"},"targetAmount": {"currency": "TZS","amount": "54000"},"validity": "2021-08-25T14:17:09.663+01:00"}}15202 I'll get back to you16Here is the initial versionof the transfer. Please quoteme for the currency conversion.POST /fxQuote17202 I'll get back to you18Lookup FX rate19Return FX rateI will add a 33 BWP fee forundertaking the conversion. Now I'll set an expiry time,sign the quotation object, create an ILP prepare packetand return it in the intermediary object. NOTE:the ILP prepare packet contains the followingitems, all encoded:- The amount being sent (i.e. in the source currency)- An expiry time- The condition- The name of the FXP- The content of the conversion terms PUT /fxQuotes/828cc75f1654...{"condition": "bdbcf517cfc7e...","conversionTerms": {"conversionId": "581f68efb54f...","initiatingFsp": "PayerFSP""sourceAmount": {"currency": "BWP","amount": "330"},"targetAmount": {"currency": "TZS"","amount": "54000"},"charges": [{"chargeType": "Conversion fee","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}],"validity": "2021-08-25T14:17:09.663+01:00"}}20Here's the signedconversion object21200 Gotcha22Here's the signed conversion objectPUT /fxQuotes/828cc75f1654...23Gotcha \ No newline at end of file + + Accord — conversion de devises avec type de montant RÉCEPTION + + + Accord — conversion de devises avec type de montant RÉCEPTION + + DFSP payeur + + Fournisseur de change + + DFSP bénéficiaire + + + + + + + + + + + + + + Connecteur Mojaloop + payeur + + Connecteur Mojaloop + payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur + FXP + + Connecteur + FXP + + API FX backend + + API FX backend + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + + + + + + + + + + 1 + Merci de coter un paiement + de 50000 TZS. + POST /quotes + + + POST /quotes + { + "quoteId": "382987a875ce...", + "transactionId": "d9ce59d43598...", + "payee": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "2551234567890" }} + "payer": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "26787654321"}}, + "amountType": + "RECEIVE" + , + "amount": { + "currency": "TZS", + "amount": "50000"} + "validity": "2021-08-25T14:17:09.663+01:00" + } + + + + 2 + 202 — Je vous recontacte + + + + 3 + POST /quotes + + + + 4 + 202 — Je vous recontacte + + + + + 5 + Je vais obtenir un devis pour la conversion + + + + + 6 + OK, je facturerai 4000 TZS pour cela. + Je crée maintenant les conditions du transfert + et je signe l'objet de transaction + + + + 7 + Voici le devis signé + + + put /quotes/382987a875ce... + { + "transferAmount": { + "currency": "TZS", + "amount": "54000" }, + "payeeReceiveAmount": { + "currency": "TZS", + "amount": "50000"}, + "payeeFspFee": { + "currency": "TZS", + "amount": "4000"}, + "expiration": "2021-08-25T14:17:09.663+01:00, + "transaction": { + "transactionId": "d9ce59d43598...", + "quoteId": "382987a875ce...", + "payee": { + "fspId": "PayeeFSP", + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "2551234567890"}}, + "payer": { + "fspId": "PayerFSP", + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "26787654321"}}, + "amount": { + "currency": "TZS", + "amount": "54000"}, + "payeeReceiveAmount": { + "currency": "TZS", + "amount": "50000"}, + "converter": "PAYER"}, + "condition": "BfNFPRgfKF8Ke9kpo..." + } + + + + 8 + 200 — OK + + + + 9 + Voici le devis signé + PUT /quotes/382987a875ce... + + + + 10 + 200 — OK + + + + + 11 + OK, je vois qu'il y aura + 4000 TZS de frais et + que je dois envoyer 54000 TZS pour + effectuer ce transfert + + + Conversion de devises + + + + + 12 + Je dois maintenant connaître le + taux de change + + + + + 13 + Je vais demander à FDH FX + d'effectuer ma conversion + + + + 14 + Voici la version initiale + du transfert. Merci de me coter + la conversion de devises. + + + post /fxQuotes + { + "conversionRequestId": "828cc75f1654...", + "conversionTerms": { + "conversionId": "581f68efb54f...", + "counterPartyFsp": "FDH_FX", + "amountType": "RECEIVE", + "sourceAmount": { + "currency": "BWP"}, + "targetAmount": { + "currency": "TZS", + "amount": "54000"}, + "validity": "2021-08-25T14:17:09.663+01:00"} + } + + + + 15 + 202 — Je vous recontacte + + + + 16 + Voici la version initiale + du transfert. Merci de me coter + la conversion de devises. + POST /fxQuote + + + + 17 + 202 — Je vous recontacte + + + 18 + Consulter le taux de change + + + 19 + Renvoyer le taux de change + + + J'ajoute des frais de 33 BWP pour + la conversion. Je fixe maintenant une heure d'expiration, + je signe l'objet de devis, je crée un paquet ILP prepare + et je le renvoie dans l'objet intermédiaire. +   + REMARQUE : + le paquet ILP prepare contient les éléments + suivants, tous encodés : + - Le montant envoyé (c.-à-d. dans la devise source) + - Une heure d'expiration + - La condition + - Le nom du FXP + - Le contenu des conditions de conversion +   + PUT /fxQuotes/828cc75f1654... + { + "condition": "bdbcf517cfc7e...", + "conversionTerms": { + "conversionId": "581f68efb54f...", + "initiatingFsp": "PayerFSP" + "sourceAmount": { + "currency": "BWP", + "amount": "330" + }, + "targetAmount": { + "currency": "TZS"", + "amount": "54000" + }, + "charges": [{ + "chargeType": "Conversion fee", + "sourceAmount": { + "currency": "BWP", + "amount": "33"}, + "targetAmount": { + "currency": "TZS", + "amount": "6000"}}], + "validity": "2021-08-25T14:17:09.663+01:00"} + } + + + + 20 + Voici l'objet + de conversion signé + + + + 21 + 200 — OK + + + + 22 + Voici l'objet de conversion signé + PUT /fxQuotes/828cc75f1654... + + + + 23 + Compris + + diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.plantuml index ea6b0de21..b6fb42d04 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.plantuml +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.plantuml @@ -21,57 +21,57 @@ !$totalChargesSourceCurrency = "55" -title Discovery - Currency Conversion with Amount Type RECEIVE +title Découverte — conversion de devises avec type de montant RÉCEPTION actor "$senderName" as A1 -box "Payer DFSP" #LightBlue - participant "Payer CBS" as PayerCBS - participant "Payer\nMojaloop\nConnector" as D1 +box "DFSP payeur" #LightBlue + participant "CBS payeur" as PayerCBS + participant "Connecteur Mojaloop\npayeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -box "Discovery Service" #LightYellow - participant "ALS Oracle" as ALS +box "Service de découverte" #LightYellow + participant "Oracle ALS" as ALS end box -'box "FX provider" -' participant "FXP\nConnector" as FXP -' participant "Backend FX API" as FXPBackend +'box "Fournisseur de change" +' participant "Connecteur\nFXP" as FXP +' participant "API FX backend" as FXPBackend 'end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 - participant "Payee CBS" as PayeeCBS +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 + participant "CBS bénéficiaire" as PayeeCBS end box 'actor "$receiverName" as A2 autonumber -A1->PayerCBS:I'd like to pay $receiverName\n$payeeReceiveAmount $payeeCurrency for \nhis latest book, please -PayerCBS->D1: Initiate merchant payment +A1->PayerCBS:Je voudrais payer $receiverName\n$payeeReceiveAmount $payeeCurrency pour \nson dernier livre, s'il vous plaît +PayerCBS->D1: Lancer le paiement marchand activate D1 -D1->>S1:I want to send to MSISDN $payeeMSISDN\n**GET /parties/MSISDN/$payeeMSISDN** +D1->>S1:Je veux envoyer vers le MSISDN $payeeMSISDN\n**GET /parties/MSISDN/$payeeMSISDN** activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif deactivate D1 -S1->ALS:Who owns MSISDN $payeeMSISDN? +S1->ALS:À qui appartient le MSISDN $payeeMSISDN ? activate ALS -ALS-->S1:It's $payeeFSPID +ALS-->S1:C'est $payeeFSPID deactivate ALS -S1->>D2:Do you own MSISDN $payeeMSISDN? +S1->>D2:Le MSISDN $payeeMSISDN vous appartient-il ? activate D2 !if ($simplified != true) -D2-->>S1:202 I'll get back to you +D2-->>S1:202 — Je vous recontacte !endif deactivate S1 -D2->D2: Check Sanction list status \n& trigger a refresh of the status -D2->PayeeCBS: Check account and get\n currency type +D2->D2: Vérifier le statut de liste de sanctions \net déclencher une actualisation +D2->PayeeCBS: Vérifier le compte et obtenir\nle type de devise !if ($simplified != true) -PayeeCBS-->D2: Result +PayeeCBS-->D2: Résultat !endif -D2->>S1:Yes, it's $receiverName. He can receive in $payeeCurrency,\n and I can convert from $payerCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +D2->>S1:Oui, c'est $receiverName. Il peut recevoir en $payeeCurrency,\n et je peux convertir depuis $payerCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** !if ($simplified != true) note right **PUT /parties** @@ -86,27 +86,27 @@ note right end note !else note over D2 - Payee Info with Encrypted KYC Data + Informations bénéficiaire avec données KYC chiffrées end note !endif activate S1 !if ($simplified != true) -S1-->>D2:200 Gotcha +S1-->>D2:200 — OK !endif deactivate D2 -S1->>D1:Yes, it's $receiverName. He can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +S1->>D1:Oui, c'est $receiverName. Il peut recevoir en $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** activate D1 !if ($simplified != true) -D1-->>S1:200 Gotcha +D1-->>S1:200 — OK !endif deactivate S1 -D1->D1: I will need to perform currency conversion. +D1->D1: Je devrai effectuer une conversion de devises. note left -I need to calculate -how much currency I need. -Let me find a currency -conversion provider before I start. +Je dois calculer +de combien de devise j'ai besoin. +Je vais trouver un fournisseur +de conversion de devises avant de commencer. end note @enduml diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.svg index 5177277c1..84c07f371 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.svg +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_Discovery.svg @@ -1 +1,167 @@ -Discovery - Currency Conversion with Amount Type RECEIVEPayer DFSPDiscovery ServicePayee DFSPKeeyaKeeyaPayer CBSPayer CBSPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchALS OracleALS OraclePayeeMojaloopConnectorPayeeMojaloopConnectorPayee CBSPayee CBS1I'd like to pay Yaro50000 TZS forhis latest book, please2Initiate merchant payment3I want to send to MSISDN 255123...GET /parties/MSISDN/255123...4202 I'll get back to you5Who owns MSISDN 255123...?6It's PayeeFSP7Do you own MSISDN 255123...?8202 I'll get back to you9Check Sanction list status& trigger a refresh of the status10Check account and getcurrency type11Result12Yes, it's Yaro. He can receive in TZS,and I can convert from BWPPUT /parties/MSISDN/255123...PUT /parties{"party": {"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "255123..."},"name": "Yaro","supportedCurrencies":["TZS"]}}13200 Gotcha14Yes, it's Yaro. He can receive in TZSPUT /parties/MSISDN/255123...15200 Gotcha16I will need to perform currency conversion.I need to calculatehow much currency I need.Let me find a currencyconversion provider before I start. \ No newline at end of file + + Découverte — conversion de devises avec type de montant RÉCEPTION + + + Découverte — conversion de devises avec type de montant RÉCEPTION + + DFSP payeur + + Service de découverte + + DFSP bénéficiaire + + + + + + + + + + + + + + Keeya + + + Keeya + + + + CBS payeur + + CBS payeur + + Connecteur Mojaloop + payeur + + Connecteur Mojaloop + payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Oracle ALS + + Oracle ALS + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + + CBS bénéficiaire + + CBS bénéficiaire + + + + + + + + + 1 + Je voudrais payer Yaro + 50000 TZS pour + son dernier livre, s'il vous plaît + + + 2 + Lancer le paiement marchand + + + + 3 + Je veux envoyer vers le MSISDN 255123... + GET /parties/MSISDN/255123... + + + + 4 + 202 — Je vous recontacte + + + 5 + À qui appartient le MSISDN 255123... ? + + + 6 + C'est PayeeFSP + + + + 7 + Le MSISDN 255123... vous appartient-il ? + + + + 8 + 202 — Je vous recontacte + + + + + 9 + Vérifier le statut de liste de sanctions + et déclencher une actualisation + + + 10 + Vérifier le compte et obtenir + le type de devise + + + 11 + Résultat + + + + 12 + Oui, c'est Yaro. Il peut recevoir en TZS, + et je peux convertir depuis BWP + PUT /parties/MSISDN/255123... + + + PUT /parties + { + "party": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "255123..."}, + "name": "Yaro", + "supportedCurrencies":["TZS"]} + } + + + + 13 + 200 — OK + + + + 14 + Oui, c'est Yaro. Il peut recevoir en TZS + PUT /parties/MSISDN/255123... + + + + 15 + 200 — OK + + + + + 16 + Je devrai effectuer une conversion de devises. + + + Je dois calculer + de combien de devise j'ai besoin. + Je vais trouver un fournisseur + de conversion de devises avant de commencer. + + diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.plantuml index 8bffb60ec..24aa8c4dc 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.plantuml +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.plantuml @@ -21,26 +21,26 @@ !$totalChargesSourceCurrency = "55" -title Currency Conversion with Amount Type RECEIVE +title Conversion de devises avec type de montant RÉCEPTION actor "$senderName" as A1 -box "Payer DFSP" #LightBlue - participant "Payer CBS" as PayerCBS - participant "Payer\nMojaloop\nConnector" as D1 +box "DFSP payeur" #LightBlue + participant "CBS payeur" as PayerCBS + participant "Connecteur Mojaloop\npayeur" as D1 end box -'participant "Mojaloop Switch" as S1 +'participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -'box "FX provider" -' participant "FXP\nConnector" as FXP -' participant "Backend FX API" as FXPBackend +'box "Fournisseur de change" +' participant "Connecteur\nFXP" as FXP +' participant "API FX backend" as FXPBackend 'end box -'box "Payee DFSP" #LightBlue -' participant "Payee\nMojaloop\nConnector" as D2 +'box "DFSP bénéficiaire" #LightBlue +' participant "Connecteur Mojaloop\nbénéficiaire" as D2 ' participant "Payee CBS" as PayeeCBS 'end box @@ -48,10 +48,10 @@ end box autonumber -D1->PayerCBS:Here's the quote for the transfer\nIt expires at 2021-08-25T14:17:09.663+01:00 -PayerCBS->A1:Hi, $senderName: I can do the transfer.\nIt'll cost you $totalChargesSourceCurrency $payerCurrency in fees\n$fxpSourceAmount $payerCurrency will be deducted from your account,\nand $receiverName will receive\n$payeeReceiveAmount $payeeCurrency.\nLet me know if you want to go ahead -A1-->PayerCBS:Great! Yes please, go ahead +D1->PayerCBS:Voici le devis pour le transfert\nIl expire le 2021-08-25T14:17:09.663+01:00 +PayerCBS->A1:Bonjour, $senderName : je peux effectuer le transfert.\nCela vous coûtera $totalChargesSourceCurrency $payerCurrency de frais\n$fxpSourceAmount $payerCurrency seront débités de votre compte,\net $receiverName recevra\n$payeeReceiveAmount $payeeCurrency.\nDites-moi si vous souhaitez continuer +A1-->PayerCBS:Parfait ! Oui, continuez s'il vous plaît -PayerCBS-->D1: Payer has accepted the terms please proceed +PayerCBS-->D1: Le payeur a accepté les conditions — merci de poursuivre @enduml diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.svg index 5c94fddac..d862ceb60 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.svg +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_SenderConfirmation.svg @@ -1 +1,50 @@ -Currency Conversion with Amount Type RECEIVEPayer DFSPKeeyaKeeyaPayer CBSPayer CBSPayerMojaloopConnectorPayerMojaloopConnectorSender Confirmation1Here's the quote for the transferIt expires at 2021-08-25T14:17:09.663+01:002Hi, Keeya: I can do the transfer.It'll cost you 55 BWP in fees330 BWP will be deducted from your account,and Yaro will receive50000 TZS.Let me know if you want to go ahead3Great! Yes please, go ahead4Payer has accepted the terms please proceed \ No newline at end of file + + Conversion de devises avec type de montant RÉCEPTION + + + Conversion de devises avec type de montant RÉCEPTION + + DFSP payeur + + + + Keeya + + + Keeya + + + + CBS payeur + + CBS payeur + + Connecteur Mojaloop + payeur + + Connecteur Mojaloop + payeur + + + 1 + Voici le devis pour le transfert + Il expire le 2021-08-25T14:17:09.663+01:00 + + + 2 + Bonjour, Keeya : je peux effectuer le transfert. + Cela vous coûtera 55 BWP de frais + 330 BWP seront débités de votre compte, + et Yaro recevra + 50000 TZS. + Dites-moi si vous souhaitez continuer + + + 3 + Parfait ! Oui, continuez s'il vous plaît + + + 4 + Le payeur a accepté les conditions — merci de poursuivre + + diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.plantuml index a5b9f2977..48f9dc6cd 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.plantuml +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.plantuml @@ -21,34 +21,34 @@ !$totalChargesSourceCurrency = "55" -title Transfer - Currency Conversion with Amount Type RECEIVE +title Transfert — conversion de devises avec type de montant RÉCEPTION actor "$senderName" as A1 -box "Payer DFSP" #LightBlue -' participant "Payer CBS" as PayerCBS - participant "Payer\nMojaloop\nConnector" as D1 +box "DFSP payeur" #LightBlue +' participant "CBS payeur" as PayerCBS + participant "Connecteur Mojaloop\npayeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -box "FX provider" - participant "FXP\nConnector" as FXP - participant "Backend FX API" as FXPBackend +box "Fournisseur de change" + participant "Connecteur\nFXP" as FXP + participant "API FX backend" as FXPBackend end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 end box - participant "Payee CBS" as PayeeCBS + participant "CBS bénéficiaire" as PayeeCBS 'actor "$receiverName" as A2 autonumber -D1->D1:First, activate the conversion -D1->>S1:Please confirm your\n part of the transfer +D1->D1:D'abord, activer la conversion +D1->>S1:Merci de confirmer votre\npart du transfert note left **POST /fxTransfers** { @@ -67,30 +67,30 @@ note left end note activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif deactivate D1 !if ($hideSwitchDetail != true) -S1->S1:OK, so this is an FX confirmation. -S1->S1: Does the sender have an account \nin this currency? Yes, it does. +S1->S1:OK, il s'agit d'une confirmation FX. +S1->S1: L'émetteur a-t-il un compte \ndans cette devise ? Oui. !endif -S1->S1: Liquidity check and reserve on\n Payer DFSP's account +S1->S1: Contrôle de liquidité et réserve sur\nle compte du DFSP payeur !if ($hideSwitchDetail != true) note over S1 -Reservations: +Réservations : -**$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency** +**$payerFSPID a une réservation de $fxpSourceAmount $payerCurrency** end note !endif -S1->>FXP:Please confirm the currency \nconversion part of the transfer\n **POST /fxTransfers** +S1->>FXP:Merci de confirmer la partie\nconversion de devises du transfert\n **POST /fxTransfers** activate FXP !if ($simplified != true) -FXP-->>S1:202 I'll get back to you +FXP-->>S1:202 — Je vous recontacte !endif deactivate S1 -FXP->FXPBackend:Reserve funds for\n FX conversion -FXPBackend->FXP:Success -FXP->>S1:Confirmed. Here's the fulfilment +FXP->FXPBackend:Réserver les fonds pour\n la conversion FX +FXPBackend->FXP:Succès +FXP->>S1:Confirmé. Voici l'exécution (fulfilment) note right **PUT /fxTransfers/77c9d78dc26a...** { @@ -101,13 +101,13 @@ note right end note activate S1 !if ($simplified != true) -S1-->>FXP:200 Gotcha +S1-->>FXP:200 — OK !endif deactivate FXP !if ($simplified != true) -S1->S1:Check fulfilment \nmatches and cancel if not. -alt Conversion failed -S1->FXP:Sorry. Conversion failed +S1->S1:Vérifier que l'exécution \ncorrespond et annuler sinon. +alt Échec de la conversion +S1->FXP:Désolé. La conversion a échoué note left **PATCH /fxTransfers/77c9d78dc26a...** { @@ -117,34 +117,34 @@ note left } end note activate FXP -FXP-->S1:Acknowledged -FXP->FXP:Remove any reservations\nor obligations +FXP-->S1:Accusé de réception +FXP->FXP:Supprimer les réservations\nou obligations deactivate FXP -S1->>D1:Sorry. Conversion failed +S1->>D1:Désolé. La conversion a échoué note right **PUT /fxTransfers/77c9d78dc26a.../error** { "errorCode": "9999", - "errorDescription": "Whatever the error was" + "errorDescription": "Description de l'erreur (variable)" } end note activate D1 -else Conversion succeeded -S1->D1:Conversion succeeded subject\n to transfer success\n**PUT /fxTransfers/77c9d78dc26a...** +else Conversion réussie +S1->D1:Conversion réussie sous réserve\ndu succès du transfert\n**PUT /fxTransfers/77c9d78dc26a...** end !else -S1->D1:Conversion succeeded subject\n to transfer success\n**PUT /fxTransfers/77c9d78dc26a...** +S1->D1:Conversion réussie sous réserve\ndu succès du transfert\n**PUT /fxTransfers/77c9d78dc26a...** !endif activate D1 !if ($simplified != true) -D1-->S1:200 Gotcha +D1-->S1:200 — OK !endif deactivate S1 -D1->D1:OK, so that's all right\nNow I can send the transfer itself +D1->D1:OK, tout est bon\nJe peux maintenant envoyer le transfert proprement dit -D1->S1:Please do the transfer \n**POST /transfers** +D1->S1:Merci d'effectuer le transfert \n**POST /transfers** !if ($simplified != true) note left **POST /transfers** @@ -174,30 +174,30 @@ end note !endif activate S1 !if ($simplified != true) -S1-->D1:202 I'll get back to you +S1-->D1:202 — Je vous recontacte !endif deactivate D1 !if ($hideSwitchDetail != true) -S1->S1:Is there a dependent transfer? Yes +S1->S1:Y a-t-il un transfert dépendant ? Oui !endif -S1->S1:Perform liquidity check and\n reserve funds against creditor\n party to dependent transfer +S1->S1:Effectuer le contrôle de liquidité et\nréserver les fonds en faveur de la partie\ncréancière du transfert dépendant note over S1 -**Reservations:** +**Réservations :** -$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency -**FDH_FX has a reservation of $targetAmount $payeeCurrency** +$payerFSPID a une réservation de $fxpSourceAmount $payerCurrency +**FDH_FX a une réservation de $targetAmount $payeeCurrency** end note -S1->D2:Please do the transfer\n**POST /transfers** +S1->D2:Merci d'effectuer le transfert\n**POST /transfers** activate D2 !if ($simplified != true) -D2-->S1:202 I'll get back to you +D2-->S1:202 — Je vous recontacte !endif deactivate S1 -D2->D2:Let me check that the terms \nof the dependent transfer are\n the same as the ones I agreed\n to and that the fulfilment\n and condition match -D2->D2:Yes, they do. \nI approve the transfer -D2->PayeeCBS:Please credit $receiverName's account\n with $payeeReceiveAmount $payeeCurrency -D2->S1:Transfer is confirmed, here's the fulfilment +D2->D2:Je vérifie que les conditions \ndu transfert dépendant sont\n les mêmes que celles acceptées\n et que l'exécution\n et la condition concordent +D2->D2:Oui. \nJ'approuve le transfert +D2->PayeeCBS:Merci de créditer le compte de $receiverName\nde $payeeReceiveAmount $payeeCurrency +D2->S1:Transfert confirmé, voici l'exécution note right **PUT /transfers/c720ae14fc72...** { @@ -208,19 +208,19 @@ note right end note activate S1 !if ($simplified != true) -S1-->D2:200 Gotcha +S1-->D2:200 — OK !endif deactivate D2 !if ($hideSwitchDetail != true) -S1->S1:Is there a dependent transfer?\nYes, there is. -S1->S1:Is this dependency against the\n debtor party to the transfer?\nYes, it is. -S1->S1:Create an obligation from the\n debtor party to the party named\n in the dependency (the FXP) -S1->S1:Is the transfer denominated in\n the currency of the payee \nreceive amount? Yes, it is. -S1->S1:Create an obligation from the\n party named in the dependency\nto the creditor party for the transfer +S1->S1:Y a-t-il un transfert dépendant ?\nOui. +S1->S1:Cette dépendance concerne-t-elle le\ndébiteur du transfert ?\nOui. +S1->S1:Créer une obligation du\ndébiteur vers la partie nommée\ndans la dépendance (le FXP) +S1->S1:Le transfert est-il libellé dans\nla devise du montant \nreçu par le bénéficiaire ? Oui. +S1->S1:Créer une obligation de la\npartie nommée dans la dépendance\nvers le créancier du transfert !else -S1->S1:Create obligations from the\n payer to the FXP and from \nFXP to the payee +S1->S1:Créer des obligations du\npayeur vers le FXP et du \nFXP vers le bénéficiaire !endif -S1->FXP:The transfer succeeded.\nYou can clear it in your ledgers +S1->FXP:Le transfert a réussi.\nVous pouvez le compenser dans vos livres note left **PATCH /fxTransfers/77c9d78dc26a...** { @@ -230,25 +230,25 @@ note left } end note activate FXP -FXP->FXP:Let's just check: does \nthis match the stuff I sent? -FXP->FXP:It does. Great. \nI'll clear the conversion -FXP-->S1:200 Gotcha +FXP->FXP:Vérifions : \ncela correspond-il à ce que j'ai envoyé ? +FXP->FXP:Oui. Parfait. \nJe compense la conversion +FXP-->S1:200 — OK deactivate FXP note over S1 - **Ledger positions:** - $payerFSPID has a debit of $fxpSourceAmount $payerCurrency - FDH_FX has a credit of $fxpSourceAmount $payerCurrency - FDH_FX has a debit of $fxpTargetAmount $payeeCurrency - $payeeFSPID has a credit of $targetAmount $payeeCurrency + **Positions du grand livre :** + $payerFSPID a un débit de $fxpSourceAmount $payerCurrency + FDH_FX a un crédit de $fxpSourceAmount $payerCurrency + FDH_FX a un débit de $fxpTargetAmount $payeeCurrency + $payeeFSPID a un crédit de $targetAmount $payeeCurrency end note -S1->D1:Transfer is complete\n**PUT /transfers/c720ae14fc72...** +S1->D1:Transfert terminé\n**PUT /transfers/c720ae14fc72...** activate D1 !if ($simplified != true) -D1-->S1:200 Gotcha +D1-->S1:200 — OK !endif deactivate S1 -D1->D1:Commit the funds in my ledgers -D1->A1:Transfer was completed successfully +D1->D1:Comptabiliser les fonds dans mes livres +D1->A1:Le transfert s'est terminé avec succès deactivate D1 @enduml diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.svg index 0ca638f9b..836e972dc 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.svg +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Receive_TransferPhase.svg @@ -1 +1,437 @@ -Transfer - Currency Conversion with Amount Type RECEIVEPayer DFSPFX providerPayee DFSPKeeyaKeeyaPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorBackend FX APIBackend FX APIPayeeMojaloopConnectorPayeeMojaloopConnectorPayee CBSPayee CBS1First, activate the conversion2Please confirm yourpart of the transferPOST /fxTransfers{"commitRequestId": "77c9d78dc26a4474...","determiningTransactionId": "d9ce59d435...","requestingFsp": "PayerFSP","respondingFxp": "FDH_FX","sourceAmount": {"currency": "BWP","amount": "330"},"targetAmount": {"currency": "TZS","amount": "54000"},"condition": "bdbcf517cfc7..."}3202 I'll get back to you4OK, so this is an FX confirmation.5Does the sender have an accountin this currency? Yes, it does.6Liquidity check and reserve onPayer DFSP's accountReservations: PayerFSP has a reservation of 330 BWP7Please confirm the currencyconversion part of the transfer POST /fxTransfers8202 I'll get back to you9Reserve funds forFX conversion10Success11Confirmed. Here's the fulfilmentPUT /fxTransfers/77c9d78dc26a...{"fulfilment": "188909ceb6cd5c...","completedTimeStamp": "2021-08-25T14:17:08.175+01:00""conversionState": "RESERVED"}12200 Gotcha13Check fulfilmentmatches and cancel if not.alt[Conversion failed]14Sorry. Conversion failedPATCH /fxTransfers/77c9d78dc26a...{"fulfilment": "188909ceb6cd5c35...","completedTimeStamp": "2021-08-25T14:17:08.175+01:00","conversionState": "ABORTED"}15Acknowledged16Remove any reservationsor obligations17Sorry. Conversion failedPUT /fxTransfers/77c9d78dc26a.../error{"errorCode": "9999","errorDescription": "Whatever the error was"}[Conversion succeeded]18Conversion succeeded subjectto transfer successPUT /fxTransfers/77c9d78dc26a...19200 Gotcha20OK, so that's all rightNow I can send the transfer itself21Please do the transferPOST /transfersPOST /transfers{"transferId": "c720ae14fc72...","payeeFsp": "PayeeFSP","payerFsp": "PayerFSP","amount": {"currency": "TZS","amount": "54000"},"transaction": {"transactionId": "d9ce59d43598...","quoteId": "382987a875ce...","payee": {"fspId": "PayeeFSP","partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890"}},"payer": {"fspId": "PayerFSP","partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "26787654321"}}}}22202 I'll get back to you23Is there a dependent transfer? Yes24Perform liquidity check andreserve funds against creditorparty to dependent transferReservations: PayerFSP has a reservation of 330 BWPFDH_FX has a reservation of 54000 TZS25Please do the transferPOST /transfers26202 I'll get back to you27Let me check that the termsof the dependent transfer arethe same as the ones I agreedto and that the fulfilmentand condition match28Yes, they do.I approve the transfer29Please credit Yaro's accountwith 50000 TZS30Transfer is confirmed, here's the fulfilmentPUT /transfers/c720ae14fc72...{"fulfilment": "mhPUT9ZAwdXLfe...","completedTimestamp": "2021-08-25T14:17:08.227+01:00","transferState": "COMMITTED"}31200 Gotcha32Is there a dependent transfer?Yes, there is.33Is this dependency against thedebtor party to the transfer?Yes, it is.34Create an obligation from thedebtor party to the party namedin the dependency (the FXP)35Is the transfer denominated inthe currency of the payeereceive amount? Yes, it is.36Create an obligation from theparty named in the dependencyto the creditor party for the transfer37The transfer succeeded.You can clear it in your ledgersPATCH /fxTransfers/77c9d78dc26a...{"fulfilment": "2e6870fb4ed...","completedTimeStamp": "2021-08-25T14:17:08.175+01:00","conversionState": "COMMITTED"}38Let's just check: doesthis match the stuff I sent?39It does. Great.I'll clear the conversion40200 GotchaLedger positions:PayerFSP has a debit of 330 BWPFDH_FX has a credit of 330 BWPFDH_FX has a debit of 54000 TZSPayeeFSP has a credit of 54000 TZS41Transfer is completePUT /transfers/c720ae14fc72...42200 Gotcha43Commit the funds in my ledgers44Transfer was completed successfully \ No newline at end of file + + Transfert — conversion de devises avec type de montant RÉCEPTION + + + Transfert — conversion de devises avec type de montant RÉCEPTION + + DFSP payeur + + Fournisseur de change + + DFSP bénéficiaire + + + + + + + + + + + + + + + + + + + Keeya + + + Keeya + + + + Connecteur Mojaloop + payeur + + Connecteur Mojaloop + payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur + FXP + + Connecteur + FXP + + API FX backend + + API FX backend + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + + CBS bénéficiaire + + CBS bénéficiaire + + + + + + + + + + + + + + + 1 + D'abord, activer la conversion + + + + 2 + Merci de confirmer votre + part du transfert + + + POST /fxTransfers + { + "commitRequestId": "77c9d78dc26a4474...", + "determiningTransactionId": "d9ce59d435...", + "requestingFsp": "PayerFSP", + "respondingFxp": "FDH_FX", + "sourceAmount": { + "currency": "BWP", + "amount": "330"}, + "targetAmount": { + "currency": "TZS", + "amount": "54000"}, + "condition": "bdbcf517cfc7..." + } + + + + 3 + 202 — Je vous recontacte + + + + + 4 + OK, il s'agit d'une confirmation FX. + + + + + 5 + L'émetteur a-t-il un compte + dans cette devise ? Oui. + + + + + 6 + Contrôle de liquidité et réserve sur + le compte du DFSP payeur + + + Réservations : +   + PayerFSP a une réservation de 330 BWP + + + + 7 + Merci de confirmer la partie + conversion de devises du transfert +   + POST /fxTransfers + + + + 8 + 202 — Je vous recontacte + + + 9 + Réserver les fonds pour + la conversion FX + + + 10 + Succès + + + + 11 + Confirmé. Voici l'exécution (fulfilment) + + + PUT /fxTransfers/77c9d78dc26a... + { + "fulfilment": "188909ceb6cd5c...", + "completedTimeStamp": "2021-08-25T14:17:08.175+01:00" + "conversionState": "RESERVED" + } + + + + 12 + 200 — OK + + + + + 13 + Vérifier que l'exécution + correspond et annuler sinon. + + + alt + [Échec de la conversion] + + + 14 + Désolé. La conversion a échoué + + + PATCH /fxTransfers/77c9d78dc26a... + { + "fulfilment": "188909ceb6cd5c35...", + "completedTimeStamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "ABORTED" + } + + + 15 + Accusé de réception + + + + + 16 + Supprimer les réservations + ou obligations + + + + 17 + Désolé. La conversion a échoué + + + PUT /fxTransfers/77c9d78dc26a.../error + { + "errorCode": "9999", + "errorDescription": "Description de l'erreur (variable)" + } + + [Conversion réussie] + + + 18 + Conversion réussie sous réserve + du succès du transfert + PUT /fxTransfers/77c9d78dc26a... + + + 19 + 200 — OK + + + + + 20 + OK, tout est bon + Je peux maintenant envoyer le transfert proprement dit + + + 21 + Merci d'effectuer le transfert + POST /transfers + + + POST /transfers + { + "transferId": "c720ae14fc72...", + "payeeFsp": "PayeeFSP", + "payerFsp": "PayerFSP", + "amount": { + "currency": "TZS", + "amount": "54000"}, + "transaction": { + "transactionId": "d9ce59d43598...", + "quoteId": "382987a875ce...", + "payee": { + "fspId": "PayeeFSP", + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "2551234567890"}}, + "payer": { + "fspId": "PayerFSP", + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "26787654321"}} + } + } + + + 22 + 202 — Je vous recontacte + + + + + 23 + Y a-t-il un transfert dépendant ? Oui + + + + + 24 + Effectuer le contrôle de liquidité et + réserver les fonds en faveur de la partie + créancière du transfert dépendant + + + Réservations : +   + PayerFSP a une réservation de 330 BWP + FDH_FX a une réservation de 54000 TZS + + + 25 + Merci d'effectuer le transfert + POST /transfers + + + 26 + 202 — Je vous recontacte + + + + + 27 + Je vérifie que les conditions + du transfert dépendant sont + les mêmes que celles acceptées + et que l'exécution + et la condition concordent + + + + + 28 + Oui. + J'approuve le transfert + + + 29 + Merci de créditer le compte de Yaro + de 50000 TZS + + + 30 + Transfert confirmé, voici l'exécution + + + PUT /transfers/c720ae14fc72... + { + "fulfilment": "mhPUT9ZAwdXLfe...", + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "transferState": "COMMITTED" + } + + + 31 + 200 — OK + + + + + 32 + Y a-t-il un transfert dépendant ? + Oui. + + + + + 33 + Cette dépendance concerne-t-elle le + débiteur du transfert ? + Oui. + + + + + 34 + Créer une obligation du + débiteur vers la partie nommée + dans la dépendance (le FXP) + + + + + 35 + Le transfert est-il libellé dans + la devise du montant + reçu par le bénéficiaire ? Oui. + + + + + 36 + Créer une obligation de la + partie nommée dans la dépendance + vers le créancier du transfert + + + 37 + Le transfert a réussi. + Vous pouvez le compenser dans vos livres + + + PATCH /fxTransfers/77c9d78dc26a... + { + "fulfilment": "2e6870fb4ed...", + "completedTimeStamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "COMMITTED" + } + + + + + 38 + Vérifions : + cela correspond-il à ce que j'ai envoyé ? + + + + + 39 + Oui. Parfait. + Je compense la conversion + + + 40 + 200 — OK + + + Positions du grand livre : + PayerFSP a un débit de 330 BWP + FDH_FX a un crédit de 330 BWP + FDH_FX a un débit de 54000 TZS + PayeeFSP a un crédit de 54000 TZS + + + 41 + Transfert terminé + PUT /transfers/c720ae14fc72... + + + 42 + 200 — OK + + + + + 43 + Comptabiliser les fonds dans mes livres + + + 44 + Le transfert s'est terminé avec succès + + diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.plantuml index 5b0d81e16..387a7f76e 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.plantuml +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.plantuml @@ -42,29 +42,29 @@ !$fxCondition = "GRzLaTP7DJ9t4P-a_B..." !$condition = "HOr22-H3AfTDHrSkP..." -title Payer DFSP requests conversion with SEND amount +title Le DFSP payeur demande une conversion avec montant ENVOI actor "$senderName" as A1 -participant "Payer CBS" as PayerCBS +participant "CBS payeur" as PayerCBS -box "Payer DFSP" #LightBlue - participant "Core Connector" as PayerCC - participant "Payer\nMojaloop\nConnector" as D1 +box "DFSP payeur" #LightBlue + participant "Connecteur principal" as PayerCC + participant "Connecteur Mojaloop\npayeur" as D1 end box -'participant "Mojaloop Switch" as S1 +'participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow - 'participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow + 'participant "Oracle ALS" as ALS 'end box -'box "FX provider" -' participant "FXP\nConnector" as FXP -' participant "Backend FX API" as FXPBackend +'box "Fournisseur de change" +' participant "Connecteur\nFXP" as FXP +' participant "API FX backend" as FXPBackend 'end box -'box "Payee DFSP" #LightBlue -' participant "Payee\nMojaloop\nConnector" as D2 -' participant "Core Connector" as PayeeCC +'box "DFSP bénéficiaire" #LightBlue +' participant "Connecteur Mojaloop\nbénéficiaire" as D2 +' participant "Connecteur principal" as PayeeCC 'end box 'actor "$receiverName" as A2 @@ -72,7 +72,7 @@ autonumber !if ($advancedCoreConnectorFlow != true) - D1-->PayerCC:Here's the quote for the transfer\nIt expires at $quotePayeeExpiration + D1-->PayerCC:Voici le devis pour le transfert\nIl expire le $quotePayeeExpiration note right **POST/PUT /transfers** response { @@ -111,13 +111,13 @@ autonumber "currency": "$payeeCurrency", "amount": "$payeeFee"}, "expiration": "$payeeQuoteExpiration", - "ilpPacket": "", + "ilpPacket": "", "condition": "$condition"},}, "quoteResponseSource": "$payeeFSPID", } end note !else - D1-->PayerCC:Here's the quote for the transfer\nIt expires at $quotePayeeExpiration + D1-->PayerCC:Voici le devis pour le transfert\nIl expire le $quotePayeeExpiration !if ($simplified != true) note right of PayerCC { @@ -137,7 +137,7 @@ autonumber }, "expiration": "$payeeQuoteExpiration", "ilpPacket": " - + ", "condition": "$condition" }, @@ -148,10 +148,10 @@ autonumber end note !endif !endif -PayerCC->PayerCBS:Here's the quote -PayerCBS->A1:Hi, $senderName: I can do the transfer.\nIt'll cost you $totalChargesSourceCurrency $payerCurrency($totalChargesTargetCurrency $payeeCurrency) in fees\nand $receiverName will receive\n$payeeReceiveAmount $payeeCurrency.\nLet me know if you want to go ahead -A1->PayerCBS:Great! Yes please, go ahead +PayerCC->PayerCBS:Voici le devis +PayerCBS->A1:Bonjour, $senderName : je peux effectuer le transfert.\nCela vous coûtera $totalChargesSourceCurrency $payerCurrency ($totalChargesTargetCurrency $payeeCurrency) de frais\net $receiverName recevra\n$payeeReceiveAmount $payeeCurrency.\nDites-moi si vous souhaitez continuer +A1->PayerCBS:Parfait ! Oui, continuez s'il vous plaît -PayerCBS->PayerCC: Payer has accepted the terms please proceed +PayerCBS->PayerCC: Le payeur a accepté les conditions — merci de poursuivre @enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.svg index 1f3622fef..bcf406cf1 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.svg +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_SenderConfirmation.svg @@ -1 +1,104 @@ -Payer DFSP requests conversion with SEND amountPayer DFSPJohnJohnPayer CBSPayer CBSCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnector1Here's the quote for the transferIt expires at 2021-08-25T14:17:09.663+01:00POST/PUT /transfersresponse{"transferId": "d9ce59d4359843968630581bb0","homeTransactionId": "string","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321" },"to": {"type": "CONSUMER","idType": "MSISDN","idValue": "2551234567890","displayName": "Yaro","fspId": "PayeeFSP""supportedCurrencies": [ "TZS" ] },"amountType": "SEND","currency": "BWP","amount": "300""currentState": "WAITING_FOR_QUOTE_ACCEPTANCE","getPartiesResponse": {<Same as the previous responses>},"conversionRequestId": "828cc75f1654415e8fcddf76cc","fxQuotesResponse": {<Same as the previous responses>},"fxQuotesResponseSource": "PayeeFSP","quoteId": "382987a875ce4037b500c475e0","quoteResponse": {"body": {"transferAmount": {"currency": "TZS","amount": "48000"},"payeeReceiveAmount": {"currency": "TZS","amount": "44000"},"payeeFspFee": {"currency": "TZS","amount": "4000"},"expiration": "$payeeQuoteExpiration","ilpPacket": "<This is encoded transaction object.>","condition": "HOr22-H3AfTDHrSkP..."},},"quoteResponseSource": "PayeeFSP",}2Here's the quote3Hi, John: I can do the transfer.It'll cost you 55 BWP(10000 TZS) in feesand Yaro will receive44000 TZS.Let me know if you want to go ahead4Great! Yes please, go ahead5Payer has accepted the terms please proceed \ No newline at end of file + + Le DFSP payeur demande une conversion avec montant ENVOI + + + Le DFSP payeur demande une conversion avec montant ENVOI + + DFSP payeur + + + + + John + + + John + + + + CBS payeur + + CBS payeur + + Connecteur principal + + Connecteur principal + + Connecteur Mojaloop + payeur + + Connecteur Mojaloop + payeur + + + 1 + Voici le devis pour le transfert + Il expire le 2021-08-25T14:17:09.663+01:00 + + + POST/PUT /transfers + response + { + "transferId": "d9ce59d4359843968630581bb0", + "homeTransactionId": "string", + "from": { + "displayName": "John", + "fspId": "PayerFSP", + "idType": "MSISDN", + "idValue": "26787654321" }, + "to": { + "type": "CONSUMER", + "idType": "MSISDN", + "idValue": "2551234567890", + "displayName": "Yaro", + "fspId": "PayeeFSP" + "supportedCurrencies": [ "TZS" ] }, + "amountType": "SEND", + "currency": "BWP", + "amount": "300" + "currentState": " + WAITING_FOR_QUOTE_ACCEPTANCE + ", + "getPartiesResponse": {<Same as the previous responses>}, + "conversionRequestId": "828cc75f1654415e8fcddf76cc", + "fxQuotesResponse": {<Same as the previous responses>}, + "fxQuotesResponseSource": "PayeeFSP", + "quoteId": "382987a875ce4037b500c475e0", + "quoteResponse": { + "body": { + "transferAmount": { + "currency": "TZS", + "amount": "48000"}, + "payeeReceiveAmount": { + "currency": "TZS", + "amount": "44000"}, + "payeeFspFee": { + "currency": "TZS", + "amount": "4000"}, + "expiration": "$payeeQuoteExpiration", + "ilpPacket": "<Objet de transaction encodé>", + "condition": "HOr22-H3AfTDHrSkP..."},}, + "quoteResponseSource": "PayeeFSP", + } + + + 2 + Voici le devis + + + 3 + Bonjour, John : je peux effectuer le transfert. + Cela vous coûtera 55 BWP (10000 TZS) de frais + et Yaro recevra + 44000 TZS. + Dites-moi si vous souhaitez continuer + + + 4 + Parfait ! Oui, continuez s'il vous plaît + + + 5 + Le payeur a accepté les conditions — merci de poursuivre + + diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.plantuml b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.plantuml index 4cf1da01c..fea62e343 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.plantuml +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.plantuml @@ -42,40 +42,40 @@ !$fxCondition = "GRzLaTP7DJ9t4P-a_B..." !$condition = "HOr22-H3AfTDHrSkP..." -title Transfer Phase - Mojaloop Connector +title Phase de transfert — connecteur Mojaloop actor "$senderName" as A1 - participant "Payer CBS" as PayerCBS -box "Payer DFSP" #LightBlue - participant "Core Connector" as PayerCC - participant "Payer\nMojaloop\nConnector" as D1 + participant "CBS payeur" as PayerCBS +box "DFSP payeur" #LightBlue + participant "Connecteur principal" as PayerCC + participant "Connecteur Mojaloop\npayeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -box "FX provider" - participant "FXP\nConnector" as FXP - participant "Backend FX API" as FXPBackend +box "Fournisseur de change" + participant "Connecteur\nFXP" as FXP + participant "API FX backend" as FXPBackend end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 - participant "Core Connector" as PayeeCC +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 + participant "Connecteur principal" as PayeeCC end box actor "$receiverName" as A2 autonumber !if ($advancedCoreConnectorFlow != true) -PayerCC->D1: Proceed with the transfer\nPUT /transfers +PayerCC->D1: Poursuivre le transfert\nPUT /transfers note left {"acceptQuote": true} end note !else -PayerCC->D1: Proceed with the transfer\n**POST /fxTransfers** +PayerCC->D1: Poursuivre le transfert\n**POST /fxTransfers** !if ($simplified != true) note left { @@ -98,9 +98,9 @@ PayerCC->D1: Proceed with the transfer\n**POST /fxTransfers** !endif !if ($advancedCoreConnectorFlow != true) -D1->D1:First, activate the conversion +D1->D1:D'abord, activer la conversion !endif -D1->>S1:Please confirm your part of the transfer +D1->>S1:Merci de confirmer votre part du transfert note left **POST /fxTransfers** { @@ -120,28 +120,28 @@ note left end note activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif deactivate D2 !if ($hideSwitchDetail != true) -S1->S1:OK, so this is an FX confirmation. -S1->S1: Is there any transfer with determiningTransactionId?\nNo, it does'nt. +S1->S1:OK, il s'agit d'une confirmation FX. +S1->S1: Existe-t-il un transfert avec determiningTransactionId ?\nNon. !endif -S1->S1: Liquidity check and reserve on Payer DFSP's account +S1->S1: Contrôle de liquidité et réserve sur le compte du DFSP payeur !if ($hideSwitchDetail != true) note over S1 -Reservations: +Réservations : -**$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency** +**$payerFSPID a une réservation de $fxpSourceAmount $payerCurrency** end note !endif -S1->>FXP:Please confirm the currency conversion part of the transfer\n** POST /fxTransfers** +S1->>FXP:Merci de confirmer la partie conversion de devises du transfert\n** POST /fxTransfers** activate FXP !if ($simplified != true) -FXP-->>S1:202 I'll get back to you +FXP-->>S1:202 — Je vous recontacte !endif deactivate S1 -FXP->FXPBackend:Reserve funds for FX conversion +FXP->FXPBackend:Réserver les fonds pour la conversion FX note left **POST /fxTransfers** { @@ -160,7 +160,7 @@ note left "condition": "$fxCondition" } end note -FXPBackend-->FXP:Success +FXPBackend-->FXP:Succès note right { "homeTransactionId": "$homeTransactionId", @@ -168,7 +168,7 @@ note right "conversionState": "RESERVED" } end note -FXP->>S1:Confirmed. Here's the fulfilment +FXP->>S1:Confirmé. Voici l'exécution (fulfilment) note right **PUT /fxTransfers/$commitRequestId** { @@ -179,13 +179,13 @@ note right end note activate S1 !if ($simplified != true) -S1-->>FXP:200 Gotcha +S1-->>FXP:200 — OK !endif deactivate FXP !if ($simplified != true) -S1->S1:Check fulfilment matches and cancel if not. -alt Conversion failed -S1->FXP:Sorry. Conversion failed +S1->S1:Vérifier que l'exécution correspond et annuler sinon. +alt Échec de la conversion +S1->FXP:Désolé. La conversion a échoué note right **PATCH /fxTransfers/$commitRequestId** { @@ -194,8 +194,8 @@ note right } end note activate FXP -FXP-->S1:Acknowledged -FXP->FXPBackend:Remove any reservations or obligations +FXP-->S1:Accusé de réception +FXP->FXPBackend:Supprimer les réservations ou obligations note left **PUT /fxTransfers/$commitRequestId** { @@ -206,32 +206,32 @@ end note FXPBackend-->FXP:Ok deactivate FXP -S1->>D1:Sorry. Conversion failed +S1->>D1:Désolé. La conversion a échoué note right **PUT /fxTransfers/$commitRequestId/error** { "errorCode": "9999", - "errorDescription": "Whatever the error was" + "errorDescription": "Description de l'erreur (variable)" } end note -else Conversion succeeded -S1->D1:Conversion succeeded subject to transfer success\n**PUT /fxTransfers/77c9d78d-c26a-4474-8b3c-99b96a814bfc** +else Conversion réussie +S1->D1:Conversion réussie sous réserve du succès du transfert\n**PUT /fxTransfers/77c9d78d-c26a-4474-8b3c-99b96a814bfc** end !else -S1->D1:Conversion succeeded subject to transfer success\n**PUT /fxTransfers/77c9d78d-c26a-4474-8b3c-99b96a814bfc** +S1->D1:Conversion réussie sous réserve du succès du transfert\n**PUT /fxTransfers/77c9d78d-c26a-4474-8b3c-99b96a814bfc** !endif activate D1 !if ($simplified != true) -D1-->S1:200 Gotcha +D1-->S1:200 — OK !endif deactivate S1 !if ($advancedCoreConnectorFlow != true) - D1->D1:OK, so that's all right\nNow I can send the transfer itself - ' TODO: Need to add PUT /transfers response here + D1->D1:OK, tout est bon\nJe peux maintenant envoyer le transfert proprement dit + ' TODO : ajouter ici la réponse PUT /transfers !else - D1-->PayerCC:Confirmed. You can proceed with the transfer. + D1-->PayerCC:Confirmé. Vous pouvez poursuivre le transfert. note right of PayerCC **PUT /fxTransfers/$commitRequestId** { @@ -241,7 +241,7 @@ deactivate S1 } end note - PayerCC-->D1:Please do the transfer **POST /simpleTransfers** + PayerCC-->D1:Merci d'effectuer le transfert **POST /simpleTransfers** !if ($simplified != true) note right of PayerCC { @@ -254,7 +254,7 @@ deactivate S1 "currency": "$payeeCurrency", "amount": "$targetAmount" }, - "ilpPacket": "", + "ilpPacket": "", "condition": "$condition", "expiration": "2016-05-24T08:38:08.699-04:00" } @@ -263,7 +263,7 @@ deactivate S1 !endif !endif -D1->S1:Please do the transfer **POST /transfers** +D1->S1:Merci d'effectuer le transfert **POST /transfers** !if ($simplified != true) note over D1 **POST /transfers** @@ -274,7 +274,7 @@ note over D1 "amount": { "currency": "$payeeCurrency", "amount": "$targetAmount"}, - "ilpPacket": "", + "ilpPacket": "", "condition": "$condition", "expiration": "2016-05-24T08:38:08.699-04:00" } @@ -282,29 +282,29 @@ end note !endif activate S1 !if ($simplified != true) -S1-->D1:202 I'll get back to you +S1-->D1:202 — Je vous recontacte !endif deactivate D1 !if ($hideSwitchDetail != true) -S1->S1:Is there a dependent transfer? Yes +S1->S1:Y a-t-il un transfert dépendant ? Oui !endif -S1->S1:Perform liquidity check and reserve funds\nagainst creditor party to dependent transfer +S1->S1:Effectuer le contrôle de liquidité et réserver les fonds\nen faveur de la partie créancière du transfert dépendant note over S1 -Reservations: +Réservations : -$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency -**$fxpID has a reservation of $targetAmount $payeeCurrency** +$payerFSPID a une réservation de $fxpSourceAmount $payerCurrency +**$fxpID a une réservation de $targetAmount $payeeCurrency** end note -S1->D2:Please do the transfer\n**POST /transfers** +S1->D2:Merci d'effectuer le transfert\n**POST /transfers** activate D2 !if ($simplified != true) -D2-->S1:202 I'll get back to you +D2-->S1:202 — Je vous recontacte !endif deactivate S1 -D2->D2:Let me check that the terms of the dependent transfer\nare the same as the ones I agreed to\nand that the fulfilment and condition match +D2->D2:Je vérifie que les conditions du transfert dépendant\ncorrespondent à celles auxquelles j'ai souscrit\net que l'exécution et la condition concordent -D2->PayeeCC:Please credit $receiverName's account with $payeeReceiveAmount $payeeCurrency +D2->PayeeCC:Merci de créditer le compte de $receiverName de $payeeReceiveAmount $payeeCurrency !if ($simplified != true) note left **POST /transfers** @@ -339,8 +339,8 @@ note left end note !endif -PayeeCC-->D2:Done -PayeeCC->A2:You have received $payeeReceiveAmount $payeeCurrency +PayeeCC-->D2:Fait +PayeeCC->A2:Vous avez reçu $payeeReceiveAmount $payeeCurrency !if ($simplified != true) note right of D2 { @@ -353,7 +353,7 @@ note right of D2 end note !endif -D2->>S1:Transfer is confirmed, here's the fulfilment +D2->>S1:Transfert confirmé, voici l'exécution (fulfilment) note over D2 **PUT /transfers/$commitRequestId** { @@ -364,19 +364,19 @@ note over D2 end note activate S1 !if ($simplified != true) -S1-->>D2:200 Gotcha +S1-->>D2:200 — OK !endif deactivate D2 !if ($hideSwitchDetail != true) -S1->S1:Is there a dependent transfer?\nYes, there is. -S1->S1:Is this dependency against \nthe debtor party to the transfer?\nYes, it is. -S1->S1:Create an obligation from the\n debtor party to the party named in the dependency (the FXP) -S1->S1:Is the transfer denominated in\n the currency of the payee receive amount?\nYes, it is. -S1->S1:Create an obligation from the \nparty named in the dependency\nto the creditor party for the transfer +S1->S1:Y a-t-il un transfert dépendant ?\nOui. +S1->S1:Cette dépendance concerne-t-elle \nle débiteur du transfert ?\nOui. +S1->S1:Créer une obligation du\ndébiteur vers la partie nommée dans la dépendance (le FXP) +S1->S1:Le transfert est-il libellé dans\nla devise du montant reçu par le bénéficiaire ?\nOui. +S1->S1:Créer une obligation de la \npartie nommée dans la dépendance\nvers le créancier du transfert !else -S1->S1:Create obligations from the payer to the FXP and from FXP to the payee +S1->S1:Créer des obligations du payeur vers le FXP et du FXP vers le bénéficiaire !endif -S1->>FXP:The transfer succeeded.\nYou can clear it in your ledgers +S1->>FXP:Le transfert a réussi.\nVous pouvez le compenser dans vos livres note over S1 **PATCH /fxTransfers/$commitRequestId** { @@ -386,25 +386,25 @@ note over S1 } end note activate FXP -FXP->FXP:Let's just check: does this match the stuff I sent? -FXP->FXP:It does. Great. I'll clear the conversion -FXP-->>S1:200 Gotcha +FXP->FXP:Vérifions : cela correspond-il à ce que j'ai envoyé ? +FXP->FXP:Oui. Parfait. Je compense la conversion +FXP-->>S1:200 — OK deactivate FXP note over S1 Ledger positions: - $payerFSPID has a debit of $fxpSourceAmount $payerCurrency - $fxpID has a credit of $fxpSourceAmount $payerCurrency - $fxpID has a debit of $fxpTargetAmount $payeeCurrency - $payeeFSPID has a credit of $targetAmount $payeeCurrency + $payerFSPID a un débit de $fxpSourceAmount $payerCurrency + $fxpID a un crédit de $fxpSourceAmount $payerCurrency + $fxpID a un débit de $fxpTargetAmount $payeeCurrency + $payeeFSPID a un crédit de $targetAmount $payeeCurrency end note -S1->>D1:Transfer is complete\n**PUT /transfers/$commitRequestId** +S1->>D1:Transfert terminé\n**PUT /transfers/$commitRequestId** activate D1 !if ($simplified != true) -D1-->S1:200 Gotcha +D1-->S1:200 — OK !endif deactivate S1 !if ($advancedCoreConnectorFlow != true) - D1-->PayerCC:Transfer was completed successfully + D1-->PayerCC:Le transfert s'est terminé avec succès note right of PayerCC **POST/PUT /transfers/** response { @@ -441,7 +441,7 @@ deactivate S1 } end note !else - D1-->PayerCC:Transfer was completed successfully + D1-->PayerCC:Le transfert s'est terminé avec succès !if ($simplified != true) note right of PayerCC { @@ -459,8 +459,8 @@ deactivate S1 !endif !endif -PayerCC->PayerCBS:Transfer was completed successfully -PayerCBS->PayerCBS:Commit the funds in my ledgers -PayerCBS->A1:Your transfer is successful +PayerCC->PayerCBS:Le transfert s'est terminé avec succès +PayerCBS->PayerCBS:Comptabiliser les fonds dans mes livres +PayerCBS->A1:Votre transfert a réussi deactivate D1 @enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.svg b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.svg index 1cb78ebdb..59afcbdbd 100644 --- a/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.svg +++ b/docs/fr/product/features/CurrencyConversion/FXAPI_Payer_Transfer.svg @@ -1 +1,564 @@ -Transfer Phase - Mojaloop ConnectorPayer DFSPFX providerPayee DFSPJohnJohnPayer CBSPayer CBSCore ConnectorCore ConnectorPayerMojaloopConnectorPayerMojaloopConnectorMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorBackend FX APIBackend FX APIPayeeMojaloopConnectorPayeeMojaloopConnectorCore ConnectorCore ConnectorYaroYaro1Proceed with the transferPUT /transfers{"acceptQuote": true}2First, activate the conversion3Please confirm your part of the transferPOST /fxTransfers{"commitRequestId": "77c9d78dc26a44748b3c99b96a","determiningTransferId": "d9ce59d4359843968630581bb0","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"condition": "GRzLaTP7DJ9t4P-a_B..."}4202 I'll get back to you5OK, so this is an FX confirmation.6Is there any transfer with determiningTransactionId?No, it does'nt.7Liquidity check and reserve on Payer DFSP's accountReservations: PayerFSP has a reservation of 300 BWP8Please confirm the currency conversion part of the transferPOST /fxTransfers**9202 I'll get back to you10Reserve funds for FX conversionPOST /fxTransfers{"homeTransactionId": "string","commitRequestId": "77c9d78dc26a44748b3c99b96a","determiningTransferId": "d9ce59d4359843968630581bb0","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"condition": "GRzLaTP7DJ9t4P-a_B..."}11Success{"homeTransactionId": "string","completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "RESERVED"}12Confirmed. Here's the fulfilmentPUT /fxTransfers/77c9d78dc26a44748b3c99b96a{"fulfilment": "188909ceb6cd5c35d5c6b394f0a9e5a0571199c332fbd013dc1e6b8a2d5fff42","completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "RESERVED"}13200 Gotcha14Check fulfilment matches and cancel if not.alt[Conversion failed]15Sorry. Conversion failedPATCH /fxTransfers/77c9d78dc26a44748b3c99b96a{"completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "ABORTED"}16Acknowledged17Remove any reservations or obligationsPUT /fxTransfers/77c9d78dc26a44748b3c99b96a{"completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "ABORTED"}18Ok19Sorry. Conversion failedPUT /fxTransfers/77c9d78dc26a44748b3c99b96a/error{"errorCode": "9999","errorDescription": "Whatever the error was"}[Conversion succeeded]20Conversion succeeded subject to transfer successPUT /fxTransfers/77c9d78d-c26a-4474-8b3c-99b96a814bfc21200 Gotcha22OK, so that's all rightNow I can send the transfer itself23Please do the transferPOST /transfersPOST /transfers{"transferId": "d9ce59d4359843968630581bb0","payeeFsp": "PayeeFSP","payerFsp": "PayerFSP","amount": {"currency": "TZS","amount": "48000"},"ilpPacket": "<Encoded transaction object>","condition": "HOr22-H3AfTDHrSkP...","expiration": "2016-05-24T08:38:08.699-04:00"}24202 I'll get back to you25Is there a dependent transfer? Yes26Perform liquidity check and reserve fundsagainst creditor party to dependent transferReservations: PayerFSP has a reservation of 300 BWPFDH_FX has a reservation of 48000 TZS27Please do the transferPOST /transfers28202 I'll get back to you29Let me check that the terms of the dependent transferare the same as the ones I agreed toand that the fulfilment and condition match30Please credit Yaro's account with 44000 TZSPOST /transfers{"transferId": "d9ce59d4359843968630581bb0","amount": "48000","currency": "TZS","amountType": "SEND","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"displayName": "Yaro","fspId": "PayeeFSP","idType": "MSISDN","idValue": "2551234567890"},"quote": {"quoteId": "382987a875ce4037b500c475e0","transactionId": "d9ce59d4359843968630581bb0","payeeFspFeeAmount": "4000","payeeFspFeeAmountCurrency": "TZS","payeeReceiveAmount": "44000","payeeReceiveAmountCurrency": "TZS","transferAmount": "48000","transferAmountCurrency": "TZS""expiration": "2021-08-25T14:17:09.663+01:00"},"transactionType": "TRANSFER","ilpPacket": {"data": <decoded ilpPacket>}}31Done32You have received 44000 TZS{"homeTransactionId": "string","completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s",    Note: fulfilment is optional: SDK will create if not found"transferState": "COMMITTED"}33Transfer is confirmed, here's the fulfilmentPUT /transfers/77c9d78dc26a44748b3c99b96a{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s","transferState": "COMMITTED"}34200 Gotcha35Is there a dependent transfer?Yes, there is.36Is this dependency againstthe debtor party to the transfer?Yes, it is.37Create an obligation from thedebtor party to the partynamed in the dependency (the FXP)38Is the transfer denominated inthe currency of the payee receive amount?Yes, it is.39Create an obligation from theparty named in the dependencyto the creditor party for the transfer40The transfer succeeded.You can clear it in your ledgersPATCH /fxTransfers/77c9d78dc26a44748b3c99b96a{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s","transferState": "COMMITTED"}41Let's just check: does this match the stuff I sent?42It does. Great. I'll clear the conversion43200 GotchaLedger positions:PayerFSP has a debit of 300 BWPFDH_FX has a credit of 300 BWPFDH_FX has a debit of 48000 TZSPayeeFSP has a credit of 48000 TZS44Transfer is completePUT /transfers/77c9d78dc26a44748b3c99b96a45200 Gotcha46Transfer was completed successfullyPOST/PUT /transfers/response{"transferId": "d9ce59d4359843968630581bb0","homeTransactionId": "string","from": {"displayName": "John","fspId": "PayerFSP","idType": "MSISDN","idValue": "26787654321"},"to": {"type": "CONSUMER","idType": "MSISDN","idValue": "2551234567890","displayName": "Yaro","fspId": "PayeeFSP""supportedCurrencies": [ "TZS" ]},"amountType": "SEND","currency": "BWP","amount": "300""currentState": "COMPLETED","getPartiesResponse": {<Same as the previous responses>},"conversionRequestId": "828cc75f1654415e8fcddf76cc","fxQuotesResponse": {<Same as the previous responses>},"fxQuotesResponseSource": "PayeeFSP","quoteId": "382987a875ce4037b500c475e0","quoteResponse": {<Same as the previous responses>},"quoteResponseSource": "PayeeFSP","fulfil": {"body": {"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s","transferState": "COMMITTED"},},}47Transfer was completed successfully48Commit the funds in my ledgers49Your transfer is successful \ No newline at end of file + + Phase de transfert — connecteur Mojaloop + + + Phase de transfert — connecteur Mojaloop + + DFSP payeur + + Fournisseur de change + + DFSP bénéficiaire + + + + + + + + + + + + + + + + + + + + + + John + + + John + + + + CBS payeur + + CBS payeur + + Connecteur principal + + Connecteur principal + + Connecteur Mojaloop + payeur + + Connecteur Mojaloop + payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur + FXP + + Connecteur + FXP + + API FX backend + + API FX backend + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + + Connecteur principal + + Connecteur principal + Yaro + + + Yaro + + + + + + + + + + + + + + + 1 + Poursuivre le transfert + PUT /transfers + + + {"acceptQuote": true} + + + + + 2 + D'abord, activer la conversion + + + + 3 + Merci de confirmer votre part du transfert + + + POST /fxTransfers + { + "commitRequestId": "77c9d78dc26a44748b3c99b96a", + "determiningTransferId": "d9ce59d4359843968630581bb0", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS", + "amount": "48000"}, + "condition": "GRzLaTP7DJ9t4P-a_B..." + } + + + + 4 + 202 — Je vous recontacte + + + + + 5 + OK, il s'agit d'une confirmation FX. + + + + + 6 + Existe-t-il un transfert avec determiningTransactionId ? + Non. + + + + + 7 + Contrôle de liquidité et réserve sur le compte du DFSP payeur + + + Réservations : +   + PayerFSP a une réservation de 300 BWP + + + + 8 + Merci de confirmer la partie conversion de devises du transfert + + POST /fxTransfers** + + + + 9 + 202 — Je vous recontacte + + + 10 + Réserver les fonds pour la conversion FX + + + POST /fxTransfers + { + "homeTransactionId": "string", + "commitRequestId": "77c9d78dc26a44748b3c99b96a", + "determiningTransferId": "d9ce59d4359843968630581bb0", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS", + "amount": "48000"}, + "condition": "GRzLaTP7DJ9t4P-a_B..." + } + + + 11 + Succès + + + { + "homeTransactionId": "string", + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "RESERVED" + } + + + + 12 + Confirmé. Voici l'exécution (fulfilment) + + + PUT /fxTransfers/77c9d78dc26a44748b3c99b96a + { + "fulfilment": "188909ceb6cd5c35d5c6b394f0a9e5a0571199c332fbd013dc1e6b8a2d5fff42", + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "RESERVED" + } + + + + 13 + 200 — OK + + + + + 14 + Vérifier que l'exécution correspond et annuler sinon. + + + alt + [Échec de la conversion] + + + 15 + Désolé. La conversion a échoué + + + PATCH /fxTransfers/77c9d78dc26a44748b3c99b96a + { + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "ABORTED" + } + + + 16 + Accusé de réception + + + 17 + Supprimer les réservations ou obligations + + + PUT /fxTransfers/77c9d78dc26a44748b3c99b96a + { + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "ABORTED" + } + + + 18 + Ok + + + + 19 + Désolé. La conversion a échoué + + + PUT /fxTransfers/77c9d78dc26a44748b3c99b96a/error + { + "errorCode": "9999", + "errorDescription": "Description de l'erreur (variable)" + } + + [Conversion réussie] + + + 20 + Conversion réussie sous réserve du succès du transfert + PUT /fxTransfers/77c9d78d-c26a-4474-8b3c-99b96a814bfc + + + 21 + 200 — OK + + + + + 22 + OK, tout est bon + Je peux maintenant envoyer le transfert proprement dit + + + 23 + Merci d'effectuer le transfert + POST /transfers + + + POST /transfers + { + "transferId": "d9ce59d4359843968630581bb0", + "payeeFsp": "PayeeFSP", + "payerFsp": "PayerFSP", + "amount": { + "currency": "TZS", + "amount": "48000"}, + "ilpPacket": "<Objet de transaction encodé>", + "condition": "HOr22-H3AfTDHrSkP...", + "expiration": "2016-05-24T08:38:08.699-04:00" + } + + + 24 + 202 — Je vous recontacte + + + + + 25 + Y a-t-il un transfert dépendant ? Oui + + + + + 26 + Effectuer le contrôle de liquidité et réserver les fonds + en faveur de la partie créancière du transfert dépendant + + + Réservations : +   + PayerFSP a une réservation de 300 BWP + FDH_FX a une réservation de 48000 TZS + + + 27 + Merci d'effectuer le transfert + POST /transfers + + + 28 + 202 — Je vous recontacte + + + + + 29 + Je vérifie que les conditions du transfert dépendant + correspondent à celles auxquelles j'ai souscrit + et que l'exécution et la condition concordent + + + 30 + Merci de créditer le compte de Yaro de 44000 TZS + + + POST /transfers + { + "transferId": "d9ce59d4359843968630581bb0", + "amount": "48000", + "currency": "TZS", + "amountType": "SEND", + "from": { + "displayName": "John", + "fspId": "PayerFSP", + "idType": "MSISDN", + "idValue": "26787654321"}, + "to": { + "displayName": "Yaro", + "fspId": "PayeeFSP", + "idType": "MSISDN", + "idValue": "2551234567890"}, + "quote": { + "quoteId": "382987a875ce4037b500c475e0", + "transactionId": "d9ce59d4359843968630581bb0", + "payeeFspFeeAmount": "4000", + "payeeFspFeeAmountCurrency": "TZS", + "payeeReceiveAmount": "44000", + "payeeReceiveAmountCurrency": "TZS", + "transferAmount": "48000", + "transferAmountCurrency": "TZS" + "expiration": "2021-08-25T14:17:09.663+01:00"}, + "transactionType": "TRANSFER", + "ilpPacket": {"data": <decoded ilpPacket>} + } + + + 31 + Fait + + + 32 + Vous avez reçu 44000 TZS + + + { + "homeTransactionId": "string", + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s", +      + Note: fulfilment is optional: SDK will create if not found + "transferState": "COMMITTED" + } + + + + 33 + Transfert confirmé, voici l'exécution (fulfilment) + + + PUT /transfers/77c9d78dc26a44748b3c99b96a + { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s", + "transferState": "COMMITTED" + } + + + + 34 + 200 — OK + + + + + 35 + Y a-t-il un transfert dépendant ? + Oui. + + + + + 36 + Cette dépendance concerne-t-elle + le débiteur du transfert ? + Oui. + + + + + 37 + Créer une obligation du + débiteur vers la partie nommée dans la dépendance (le FXP) + + + + + 38 + Le transfert est-il libellé dans + la devise du montant reçu par le bénéficiaire ? + Oui. + + + + + 39 + Créer une obligation de la + partie nommée dans la dépendance + vers le créancier du transfert + + + + 40 + Le transfert a réussi. + Vous pouvez le compenser dans vos livres + + + PATCH /fxTransfers/77c9d78dc26a44748b3c99b96a + { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s", + "transferState": "COMMITTED" + } + + + + + 41 + Vérifions : cela correspond-il à ce que j'ai envoyé ? + + + + + 42 + Oui. Parfait. Je compense la conversion + + + + 43 + 200 — OK + + + Ledger positions: + PayerFSP a un débit de 300 BWP + FDH_FX a un crédit de 300 BWP + FDH_FX a un débit de 48000 TZS + PayeeFSP a un crédit de 48000 TZS + + + + 44 + Transfert terminé + PUT /transfers/77c9d78dc26a44748b3c99b96a + + + 45 + 200 — OK + + + 46 + Le transfert s'est terminé avec succès + + + POST/PUT /transfers/ + response + { + "transferId": "d9ce59d4359843968630581bb0", + "homeTransactionId": "string", + "from": { + "displayName": "John", + "fspId": "PayerFSP", + "idType": "MSISDN", + "idValue": "26787654321"}, + "to": { + "type": "CONSUMER", + "idType": "MSISDN", + "idValue": "2551234567890", + "displayName": "Yaro", + "fspId": "PayeeFSP" + "supportedCurrencies": [ "TZS" ]}, + "amountType": "SEND", + "currency": "BWP", + "amount": "300" + "currentState": " + COMPLETED + ", + "getPartiesResponse": {<Same as the previous responses>}, + "conversionRequestId": "828cc75f1654415e8fcddf76cc", + "fxQuotesResponse": {<Same as the previous responses>}, + "fxQuotesResponseSource": "PayeeFSP", + "quoteId": "382987a875ce4037b500c475e0", + "quoteResponse": {<Same as the previous responses>}, + "quoteResponseSource": "PayeeFSP", + "fulfil": { + "body": { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd-BXLfeSd7-YPh46rBWRNBiTCSWjpku90s", + "transferState": "COMMITTED"},}, + } + + + 47 + Le transfert s'est terminé avec succès + + + + + 48 + Comptabiliser les fonds dans mes livres + + + 49 + Votre transfert a réussi + + diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.plantuml b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.plantuml index c50bf7548..83d1eef75 100644 --- a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.plantuml +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.plantuml @@ -42,31 +42,31 @@ !$condition = "HOr22-H3AfTDHrSkP..." -title Payer DFSP requests quote from Payee DFSP +title Le DFSP payeur demande un devis au DFSP bénéficiaire 'actor "$senderName" as A1 -box "Payer DFSP" #LightBlue - participant "Payer DFSP" as D1 +box "DFSP payeur" #LightBlue + participant "DFSP payeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -'box "FX provider" -' participant "FXP\nConnector" as FXP +'box "Fournisseur de change" +' participant "Connecteur\nFXP" as FXP 'end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 end box 'actor "$receiverName" as A2 autonumber -D1->>S1:Please quote for a transfer which sends $fxpTargetAmount $payeeCurrency.\n**POST /quotes** +D1->>S1:Veuillez coter un transfert qui envoie $fxpTargetAmount $payeeCurrency.\n**POST /quotes** deactivate D1 !if ($simplified != true) note left @@ -89,7 +89,7 @@ POST /quotes "lastName": "$receiverLastName" }, "dateOfBirth": "$receiverDOB", - "kycInformation": "" + "kycInformation": "" }, "supportedCurrencies": [ "$payeeCurrency" ] }, @@ -121,17 +121,17 @@ end note !endif activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif S1->>D2:**POST /quotes** deactivate S1 activate D2 !if ($simplified != true) -D2-->>S1:202 I'll get back to you +D2-->>S1:202 — Je vous recontacte !endif -D2->D2:OK, so I will charge $payeeFee $payeeCurrency for this.\nNow I create terms of the transfer +D2->D2:OK, je facturerai $payeeFee $payeeCurrency pour cela.\nJe crée maintenant les conditions du transfert !if ($simplified != true) note right of D2 { @@ -147,8 +147,8 @@ note right of D2 } end note !endif -D2->D2:Now I will sign the transaction object -D2->>S1:Here's the signed quote +D2->D2:Je signe maintenant l'objet de transaction +D2->>S1:Voici le devis signé note right **put /quotes/$quoteId** { @@ -162,21 +162,21 @@ note right "currency": "$payeeCurrency", "amount": "$payeeFee"}, "expiration": "$payeeQuoteExpiration", - "ilpPacket": "", + "ilpPacket": "", "condition": "$condition" } end note deactivate D2 activate S1 !if ($simplified != true) -S1-->>D2:200 Gotcha +S1-->>D2:200 — OK !endif -S1->>D1:Here's the signed quote\n**PUT /quotes/$quoteId** +S1->>D1:Voici le devis signé\n**PUT /quotes/$quoteId** deactivate S1 activate D1 !if ($simplified != true) -D1-->>S1:200 Gotcha +D1-->>S1:200 — OK !endif -D1->D1:OK, I can see that there are going to be $payeeFee $payeeCurrency in charges. +D1->D1:OK, je vois qu'il y aura $payeeFee $payeeCurrency de frais. @enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.svg b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.svg index 02cc3a5b4..1cfb07880 100644 --- a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.svg +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Agreement.svg @@ -1 +1,92 @@ -Payer DFSP requests quote from Payee DFSPPayer DFSPPayee DFSPPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchPayeeMojaloopConnectorPayeeMojaloopConnector1Please quote for a transfer which sends 48000 TZS.POST /quotes2POST /quotes3OK, so I will charge 4000 TZS for this.Now I create terms of the transfer4Now I will sign the transaction object5Here's the signed quoteput /quotes/382987a875ce4037b500c475e0{"transferAmount": {"currency": "TZS","amount": "48000"},"payeeReceiveAmount": {"currency": "TZS","amount": "44000"},"payeeFspFee": {"currency": "TZS","amount": "4000"},"expiration": "$payeeQuoteExpiration","ilpPacket": "<This is encoded transaction object.>","condition": "HOr22-H3AfTDHrSkP..."}6Here's the signed quotePUT /quotes/382987a875ce4037b500c475e07OK, I can see that there are going to be 4000 TZS in charges. \ No newline at end of file + + Le DFSP payeur demande un devis au DFSP bénéficiaire + + + Le DFSP payeur demande un devis au DFSP bénéficiaire + + DFSP payeur + + DFSP bénéficiaire + + + + + + + + DFSP payeur + + DFSP payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + + + + + + + 1 + Veuillez coter un transfert qui envoie 48000 TZS. + POST /quotes + + + + 2 + POST /quotes + + + + + 3 + OK, je facturerai 4000 TZS pour cela. + Je crée maintenant les conditions du transfert + + + + + 4 + Je signe maintenant l'objet de transaction + + + + 5 + Voici le devis signé + + + put /quotes/382987a875ce4037b500c475e0 + { + "transferAmount": { + "currency": "TZS", + "amount": "48000"}, + "payeeReceiveAmount": { + "currency": "TZS", + "amount": "44000"}, + "payeeFspFee": { + "currency": "TZS", + "amount": "4000"}, + "expiration": "$payeeQuoteExpiration", + "ilpPacket": "<Objet de transaction encodé>", + "condition": "HOr22-H3AfTDHrSkP..." + } + + + + 6 + Voici le devis signé + PUT /quotes/382987a875ce4037b500c475e0 + + + + + 7 + OK, je vois qu'il y aura 4000 TZS de frais. + + diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.plantuml b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.plantuml index 2ebc792ac..c2c9301a6 100644 --- a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.plantuml +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.plantuml @@ -41,38 +41,38 @@ !$condition = "HOr22-H3AfTDHrSkP..." -title Payer DFSP presents the terms to the Payer +title Le DFSP payeur présente les conditions au payeur actor "$senderName" as A1 -box "Payer DFSP" #LightBlue - participant "Payer DFSP" as D1 +box "DFSP payeur" #LightBlue + participant "DFSP payeur" as D1 end box -'participant "Mojaloop Switch" as S1 +'participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -'box "FX provider" -' participant "FXP\nConnector" as FXP +'box "Fournisseur de change" +' participant "Connecteur\nFXP" as FXP 'end box -'box "Payee DFSP" #LightBlue -' participant "Payee\nMojaloop\nConnector" as D2 +'box "DFSP bénéficiaire" #LightBlue +' participant "Connecteur Mojaloop\nbénéficiaire" as D2 'end box 'actor "$receiverName" as A2 autonumber -D1->A1: Present the terms of the transfer to the Payer +D1->A1: Présenter les conditions du transfert au payeur note right -Hi, $senderName: -I can do the transfer. -It'll cost you $totalChargesSourceCurrency $payerCurrency($totalChargesTargetCurrency $payeeCurrency) in fees -and $receiverName will receive $payeeReceiveAmount $payeeCurrency. -**Let me know if you want to go ahead?** +Bonjour, $senderName : +Je peux effectuer le transfert. +Cela vous coûtera $totalChargesSourceCurrency $payerCurrency ($totalChargesTargetCurrency $payeeCurrency) de frais +et $receiverName recevra $payeeReceiveAmount $payeeCurrency. +**Souhaitez-vous continuer ?** end note -A1->D1: Great! Yes please, go ahead +A1->D1: Parfait ! Oui, continuez s'il vous plaît -D1->D1: Payer has accepted the terms please proceed +D1->D1: Le payeur a accepté les conditions — merci de poursuivre @enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.svg b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.svg index b9161ef46..82d3d4244 100644 --- a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.svg +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Confirmation.svg @@ -1 +1,42 @@ -Payer DFSP presents the terms to the PayerPayer DFSPJohnJohnPayer DFSPPayer DFSP1Present the terms of the transfer to the PayerHi, John:I can do the transfer.It'll cost you 55 BWP(10000 TZS) in feesand Yaro will receive 44000 TZS.Let me know if you want to go ahead?2Great! Yes please, go ahead3Payer has accepted the terms please proceed \ No newline at end of file + + Le DFSP payeur présente les conditions au payeur + + + Le DFSP payeur présente les conditions au payeur + + DFSP payeur + + + John + + + John + + + + DFSP payeur + + DFSP payeur + + + 1 + Présenter les conditions du transfert au payeur + + + Bonjour, John : + Je peux effectuer le transfert. + Cela vous coûtera 55 BWP (10000 TZS) de frais + et Yaro recevra 44000 TZS. + Souhaitez-vous continuer ? + + + 2 + Parfait ! Oui, continuez s'il vous plaît + + + + + 3 + Le payeur a accepté les conditions — merci de poursuivre + + diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.plantuml b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.plantuml index 14b49b3e9..8a915811c 100644 --- a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.plantuml +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.plantuml @@ -42,36 +42,36 @@ !$condition = "HOr22-H3AfTDHrSkP..." -title Payer DFSP requests conversion with SEND amount +title Le DFSP payeur demande une conversion avec montant ENVOI ' actor "$senderName" as A1 -box "Payer DFSP" #LightBlue - participant "Payer DFSP" as D1 +box "DFSP payeur" #LightBlue + participant "DFSP payeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -box "FX provider" - participant "FXP\nConnector" as FXP +box "Fournisseur de change" + participant "Connecteur\nFXP" as FXP end box -'box "Payee DFSP" #LightBlue -' participant "Payee\nMojaloop\nConnector" as D2 +'box "DFSP bénéficiaire" #LightBlue +' participant "Connecteur Mojaloop\nbénéficiaire" as D2 'end box 'actor "$receiverName" as A2 autonumber -D1->D1:Hmmm. I can only send in $payerCurrency.\nI need to get some currency conversion -D1->D1: Look up the local cached FXPs\n that can provide the conversion -D1->D1:I'll ask FDH FX to perform my conversion +D1->D1:Hmm. Je ne peux envoyer qu'en $payerCurrency.\nJ'ai besoin d'une conversion de devises +D1->D1: Consulter les FXP mis en cache localement\npouvant assurer la conversion +D1->D1:Je vais demander à FDH FX d'effectuer ma conversion -D1->>S1:Here is the initial version of the transfer.\nPlease quote me for the currency conversion. +D1->>S1:Voici la version initiale du transfert.\nMerci de me coter la conversion de devises. note left **post /fxQuotes** @@ -95,18 +95,18 @@ end note deactivate D1 activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif -S1->>FXP:Here is the initial version of the transfer.\nPlease quote me for the currency conversion.\n**POST /fxQuote** +S1->>FXP:Voici la version initiale du transfert.\nMerci de me coter la conversion de devises.\n**POST /fxQuote** deactivate S1 activate FXP !if ($simplified != true) -FXP-->>S1:202 I'll get back to you +FXP-->>S1:202 — Je vous recontacte !endif note over FXP - I will add a $fxpChargesSource $payerCurrency fee for undertaking the conversion. - Now I'll set an expiry time, sign the quotation object, + J'ajouterai des frais de $fxpChargesSource $payerCurrency pour la conversion. + Je fixe maintenant une heure d'expiration et je signe l'objet de devis, end note !if ($simplified != true) note right of FXP @@ -138,19 +138,19 @@ end note !endif note over FXP - Now I'll sign the quotation object, - create an ILP prepare packet and return it in the intermediary object. - - **NOTE:** the ILP prepare packet contains the following items, all encoded: - - The amount being sent (i.e. in the source currency) - - An expiry time - - The condition - - The name of the FXP - - The content of the conversion terms + Je signe maintenant l'objet de devis, + je crée un paquet ILP prepare et le renvoie dans l'objet intermédiaire. + + **REMARQUE :** le paquet ILP prepare contient les éléments suivants, tous encodés : + - Le montant envoyé (c.-à-d. dans la devise source) + - Une heure d'expiration + - La condition + - Le nom du FXP + - Le contenu des conditions de conversion end note -FXP->>S1:Here's the signed conversion object +FXP->>S1:Voici l'objet de conversion signé note right **PUT /fxQuotes/$conversionRequestId** { @@ -182,12 +182,12 @@ end note deactivate FXP activate S1 !if ($simplified != true) -S1-->>FXP:200 Gotcha +S1-->>FXP:200 — OK !endif -S1->>D1:Here's the signed conversion object\n**PUT /fxQuotes/$conversionRequestId** +S1->>D1:Voici l'objet de conversion signé\n**PUT /fxQuotes/$conversionRequestId** deactivate S1 activate D1 !if ($simplified != true) -D1-->>S1:Gotcha +D1-->>S1:Compris !endif @enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.svg b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.svg index 8078364ed..358b27ddc 100644 --- a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.svg +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_CurrencyConversion.svg @@ -1 +1,140 @@ -Payer DFSP requests conversion with SEND amountPayer DFSPFX providerPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnector1Hmmm. I can only send in BWP.I need to get some currency conversion2Look up the local cached FXPsthat can provide the conversion3I'll ask FDH FX to perform my conversion4Here is the initial version of the transfer.Please quote me for the currency conversion.post /fxQuotes{"conversionRequestId": "828cc75f1654415e8fcddf76cc","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS"},"expiration": "2021-08-25T14:17:09.663+01:00"}}5Here is the initial version of the transfer.Please quote me for the currency conversion.POST /fxQuoteI will add a 33 BWP fee for undertaking the conversion.Now I'll set an expiry time, sign the quotation object,Now I'll sign the quotation object,create an ILP prepare packet and return it in the intermediary object. NOTE:the ILP prepare packet contains the following items, all encoded:- The amount being sent (i.e. in the source currency)- An expiry time- The condition- The name of the FXP- The content of the conversion terms6Here's the signed conversion objectPUT /fxQuotes/828cc75f1654415e8fcddf76cc{"condition": "GRzLaTP7DJ9t4P-a_B...","conversionTerms": {"conversionId": "581f68efb54f416f9161ac34e8","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"expiration": "2021-08-25T14:17:09.663+01:00""charges": [{"chargeType": "string","sourceAmount": {"currency": "BWP","amount": "33"},"targetAmount": {"currency": "TZS","amount": "6000"}}]}}7Here's the signed conversion objectPUT /fxQuotes/828cc75f1654415e8fcddf76cc \ No newline at end of file + + Le DFSP payeur demande une conversion avec montant ENVOI + + + Le DFSP payeur demande une conversion avec montant ENVOI + + DFSP payeur + + Fournisseur de change + + + + + + + + DFSP payeur + + DFSP payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur + FXP + + Connecteur + FXP + + + + + + + + 1 + Hmm. Je ne peux envoyer qu'en BWP. + J'ai besoin d'une conversion de devises + + + + + 2 + Consulter les FXP mis en cache localement + pouvant assurer la conversion + + + + + 3 + Je vais demander à FDH FX d'effectuer ma conversion + + + + 4 + Voici la version initiale du transfert. + Merci de me coter la conversion de devises. + + + post /fxQuotes + { + "conversionRequestId": "828cc75f1654415e8fcddf76cc", + "conversionTerms": { + "conversionId": "581f68efb54f416f9161ac34e8", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + } + } + + + + 5 + Voici la version initiale du transfert. + Merci de me coter la conversion de devises. + POST /fxQuote + + + J'ajouterai des frais de 33 BWP pour la conversion. + Je fixe maintenant une heure d'expiration et je signe l'objet de devis, + + + Je signe maintenant l'objet de devis, + je crée un paquet ILP prepare et le renvoie dans l'objet intermédiaire. +   + REMARQUE : + le paquet ILP prepare contient les éléments suivants, tous encodés : + - Le montant envoyé (c.-à-d. dans la devise source) + - Une heure d'expiration + - La condition + - Le nom du FXP + - Le contenu des conditions de conversion + + + + 6 + Voici l'objet de conversion signé + + + PUT /fxQuotes/828cc75f1654415e8fcddf76cc + { + "condition": "GRzLaTP7DJ9t4P-a_B...", + "conversionTerms": { + "conversionId": "581f68efb54f416f9161ac34e8", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS", + "amount": "48000"}, + "expiration": "2021-08-25T14:17:09.663+01:00" + "charges": [ + { + "chargeType": "string", + "sourceAmount": { + "currency": "BWP", + "amount": "33"}, + "targetAmount": { + "currency": "TZS", + "amount": "6000"} + }]} + } + + + + 7 + Voici l'objet de conversion signé + PUT /fxQuotes/828cc75f1654415e8fcddf76cc + + diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.plantuml b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.plantuml index bd3cb95f5..eac44a8e7 100644 --- a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.plantuml +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.plantuml @@ -41,30 +41,30 @@ !$fxCondition = "GRzLaTP7DJ9t4P-a_B..." !$condition = "HOr22-H3AfTDHrSkP..." -title Remittance Transfer using Mojaloop FX APIs POC\nPayer DFSP requests conversion with SEND amount +title Transfert de fonds POC avec les API FX Mojaloop\nLe DFSP payeur demande une conversion avec montant ENVOI actor "$senderName" as A1 -box "Payer DFSP" #LightBlue - participant "Payer DFSP" as D1 +box "DFSP payeur" #LightBlue + participant "DFSP payeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -box "FX provider" - participant "FXP\nConnector" as FXP +box "Fournisseur de change" + participant "Connecteur\nFXP" as FXP end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 end box actor "$receiverName" as A2 autonumber -D1->>S1:Please confirm your part\n of the transfer +D1->>S1:Merci de confirmer votre part\ndu transfert deactivate D1 note left **POST /fxTransfers** @@ -86,28 +86,28 @@ end note deactivate D2 activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif !if ($hideSwitchDetail != true) -S1->S1:OK, so this is an FX confirmation. -S1->S1: Is there any transfer with \ndeterminingTransactionId?\nNo, it does'nt. +S1->S1:OK, il s'agit d'une confirmation FX. +S1->S1: Existe-t-il un transfert avec\ndeterminingTransactionId ?\nNon. !endif -S1->S1: Liquidity check and reserve\n on Payer DFSP's account +S1->S1: Contrôle de liquidité et réserve\nsur le compte du DFSP payeur !if ($hideSwitchDetail != true) note over S1 -**Reservations:** +**Réservations :** -**$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency** +**$payerFSPID a une réservation de $fxpSourceAmount $payerCurrency** end note !endif -S1->>FXP:Please confirm the currency \nconversion part of the transfer\n **POST /fxTransfers** +S1->>FXP:Merci de confirmer la partie\nconversion de devises du transfert\n **POST /fxTransfers** deactivate S1 activate FXP !if ($simplified != true) -FXP-->>S1:202 I'll get back to you +FXP-->>S1:202 — Je vous recontacte !endif -FXP->FXP:Reserve funds for FX conversion -FXP->>S1:Confirmed. Here's the fulfilment +FXP->FXP:Réserver les fonds pour la conversion FX +FXP->>S1:Confirmé. Voici l'exécution (fulfilment) note right **PUT /fxTransfers/$commitRequestId** { @@ -119,12 +119,12 @@ end note deactivate FXP activate S1 !if ($simplified != true) -S1-->>FXP:200 Gotcha +S1-->>FXP:200 — OK !endif !if ($simplified != true) -S1->S1:Check fulfilment matches and cancel if not. -alt Conversion failed -S1->FXP:Sorry. Conversion failed +S1->S1:Vérifier que l'exécution correspond et annuler sinon. +alt Échec de la conversion +S1->FXP:Désolé. La conversion a échoué note left **PATCH /fxTransfers/$commitRequestId** { @@ -133,34 +133,34 @@ note left } end note activate FXP -FXP-->S1:Acknowledged -FXP->FXP:Remove any reservations or obligations +FXP-->S1:Accusé de réception +FXP->FXP:Supprimer les réservations ou obligations deactivate FXP -S1->>D1:Sorry. Conversion failed +S1->>D1:Désolé. La conversion a échoué note right **PUT /fxTransfers/$commitRequestId/error** { "errorCode": "9999", - "errorDescription": "Whatever the error was" + "errorDescription": "Description de l'erreur (variable)" } end note -else Conversion succeeded -S1->D1:Conversion succeeded subject \nto transfer success\n**PUT /fxTransfers/$commitRequestId** +else Conversion réussie +S1->D1:Conversion réussie sous réserve\ndu succès du transfert\n**PUT /fxTransfers/$commitRequestId** end !else -S1->D1:Conversion succeeded subject \nto transfer success\n**PUT /fxTransfers/$commitRequestId** +S1->D1:Conversion réussie sous réserve\ndu succès du transfert\n**PUT /fxTransfers/$commitRequestId** !endif deactivate S1 activate D1 !if ($simplified != true) -D1-->S1:200 Gotcha +D1-->S1:200 — OK !endif -D1->D1:OK, so that's all right\nNow I can send the transfer itself +D1->D1:OK, tout est bon\nJe peux maintenant envoyer le transfert proprement dit -D1->S1:Please do the transfer\n **POST /transfers** +D1->S1:Merci d'effectuer le transfert\n **POST /transfers** !if ($simplified != true) note left **POST /transfers** @@ -171,7 +171,7 @@ note left "amount": { "currency": "$payeeCurrency", "amount": "$targetAmount"}, - "ilpPacket": "", + "ilpPacket": "", "condition": "$condition", "expiration": "2016-05-24T08:38:08.699-04:00" } @@ -180,30 +180,30 @@ end note deactivate D1 activate S1 !if ($simplified != true) -S1-->D1:202 I'll get back to you +S1-->D1:202 — Je vous recontacte !endif !if ($hideSwitchDetail != true) -S1->S1:Is there a dependent transfer? \nYes +S1->S1:Y a-t-il un transfert dépendant ? \nOui !endif -S1->S1:Perform liquidity check and \nreserve funds against creditor\n party to dependent transfer +S1->S1:Effectuer le contrôle de liquidité et\nréserver les fonds contre la partie\ncréancière du transfert dépendant note over S1 -**Reservations:** +**Réservations :** -$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency -**$fxpID has a reservation of $targetAmount $payeeCurrency** +$payerFSPID a une réservation de $fxpSourceAmount $payerCurrency +**$fxpID a une réservation de $targetAmount $payeeCurrency** end note -S1->D2:Please do the transfer\n**POST /transfers** +S1->D2:Merci d'effectuer le transfert\n**POST /transfers** deactivate S1 activate D2 !if ($simplified != true) -D2-->S1:202 I'll get back to you +D2-->S1:202 — Je vous recontacte !endif -D2->D2:Let me check that the terms\n of the dependent transfer\nare the same as the ones I \nagreed to and that the \nfulfilment and condition match +D2->D2:Je vérifie que les conditions\ndu transfert dépendant\nsont les mêmes que celles\nauxquelles j'ai souscrit et que\nl'exécution et la condition correspondent -D2->A2: Hi $receiverName's, you got inbound \ntransfer $payeeReceiveAmount $payeeCurrency +D2->A2: Bonjour $receiverName, vous avez reçu un transfert entrant \nde $payeeReceiveAmount $payeeCurrency -D2->>S1:Transfer is confirmed, here's the fulfilment +D2->>S1:Transfert confirmé, voici l'exécution (fulfilment) note right **PUT /transfers/$commitRequestId** { @@ -215,25 +215,25 @@ end note deactivate D2 activate S1 !if ($simplified != true) -S1-->>D2:200 Gotcha +S1-->>D2:200 — OK !endif !if ($hideSwitchDetail != true) -S1->S1:Is there a dependent transfer?\nYes, there is. -S1->S1:Is this dependency against the\n debtor party to the transfer?\nYes, it is. -S1->S1:Create an obligation from the\n debtor party to the party named \nin the dependency (the FXP) -S1->S1:Is the transfer denominated in\n the currency of the payee \nreceive amount? Yes, it is. -S1->S1:Create an obligation from the\n party named in the\n dependency to the creditor \nparty for the transfer +S1->S1:Y a-t-il un transfert dépendant ?\nOui. +S1->S1:Cette dépendance concerne-t-elle le\ndébiteur du transfert ?\nOui. +S1->S1:Créer une obligation du\ndébiteur vers la partie nommée\ndans la dépendance (le FXP) +S1->S1:Le transfert est-il libellé dans\nla devise du montant \nreçu par le bénéficiaire ? Oui. +S1->S1:Créer une obligation de la\n partie nommée dans la\ndépendance vers le créancier\ndu transfert !else -S1->S1:Create obligations from the payer to the FXP and from FXP to the payee +S1->S1:Créer des obligations du payeur vers le FXP et du FXP vers le bénéficiaire !endif note over S1 - **Ledger positions:** - $payerFSPID has a debit of $fxpSourceAmount $payerCurrency - $fxpID has a credit of $fxpSourceAmount $payerCurrency - $fxpID has a debit of $fxpTargetAmount $payeeCurrency - $payeeFSPID has a credit of $targetAmount $payeeCurrency + **Positions du grand livre :** + $payerFSPID a un débit de $fxpSourceAmount $payerCurrency + $fxpID a un crédit de $fxpSourceAmount $payerCurrency + $fxpID a un débit de $fxpTargetAmount $payeeCurrency + $payeeFSPID a un crédit de $targetAmount $payeeCurrency end note -S1->>FXP:The transfer succeeded.\nYou can clear it in your ledgers +S1->>FXP:Le transfert a réussi.\nVous pouvez le compenser dans vos livres note left **PATCH /fxTransfers/$commitRequestId** { @@ -242,18 +242,18 @@ note left } end note activate FXP -FXP->FXP:Let's just check: does this match the stuff I sent? -FXP->FXP:It does. Great. I'll clear the conversion -FXP-->>S1:200 Gotcha +FXP->FXP:Vérifions : cela correspond-il à ce que j'ai envoyé ? +FXP->FXP:Oui. Parfait. Je compense la conversion +FXP-->>S1:200 — OK deactivate FXP -S1->>D1:Transfer is complete\n**PUT /transfers/$commitRequestId** +S1->>D1:Transfert terminé\n**PUT /transfers/$commitRequestId** deactivate S1 activate D1 !if ($simplified != true) -D1-->S1:200 Gotcha +D1-->S1:200 — OK !endif -D1->A1:Your transfer is successful +D1->A1:Votre transfert a réussi deactivate D1 @enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.svg b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.svg index e0b71bc2d..b68205a42 100644 --- a/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.svg +++ b/docs/fr/product/features/CurrencyConversion/PAYER_SEND_Transfer.svg @@ -1 +1,306 @@ -Remittance Transfer using Mojaloop FX APIs POCPayer DFSP requests conversion with SEND amountPayer DFSPFX providerPayee DFSPJohnJohnPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorPayeeMojaloopConnectorPayeeMojaloopConnectorYaroYaro1Please confirm your partof the transferPOST /fxTransfers{"commitRequestId": "77c9d78dc26...","determiningTransferId": "d9ce59d4359843...","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"condition": "GRzLaTP7DJ9t4P-a_B..."}2OK, so this is an FX confirmation.3Is there any transfer withdeterminingTransactionId?No, it does'nt.4Liquidity check and reserveon Payer DFSP's accountReservations: PayerFSP has a reservation of 300 BWP5Please confirm the currencyconversion part of the transfer POST /fxTransfers6Reserve funds for FX conversion7Confirmed. Here's the fulfilmentPUT /fxTransfers/77c9d78dc26...{"fulfilment": "188909ceb6cd5c35d..","completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "RESERVED"}8Conversion succeeded subjectto transfer successPUT /fxTransfers/77c9d78dc26...9OK, so that's all rightNow I can send the transfer itself10Please do the transfer POST /transfers11Is there a dependent transfer?Yes12Perform liquidity check andreserve funds against creditorparty to dependent transferReservations: PayerFSP has a reservation of 300 BWPFDH_FX has a reservation of 48000 TZS13Please do the transferPOST /transfers14Let me check that the termsof the dependent transferare the same as the ones Iagreed to and that thefulfilment and condition match15Hi Yaro's, you got inboundtransfer 44000 TZS16Transfer is confirmed, here's the fulfilmentPUT /transfers/77c9d78dc26...{"completedTimestamp": "2021-08-25T14:17:08...","fulfilment": "mhPUT9ZAwd-BXLfeSd...","transferState": "COMMITTED"}17Is there a dependent transfer?Yes, there is.18Is this dependency against thedebtor party to the transfer?Yes, it is.19Create an obligation from thedebtor party to the party namedin the dependency (the FXP)20Is the transfer denominated inthe currency of the payeereceive amount? Yes, it is.21Create an obligation from theparty named in thedependency to the creditorparty for the transferLedger positions:PayerFSP has a debit of 300 BWPFDH_FX has a credit of 300 BWPFDH_FX has a debit of 48000 TZSPayeeFSP has a credit of 48000 TZS22The transfer succeeded.You can clear it in your ledgersPATCH /fxTransfers/77c9d78dc26...{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","transferState": "COMMITTED"}23Let's just check: does this match the stuff I sent?24It does. Great. I'll clear the conversion25200 Gotcha26Transfer is completePUT /transfers/77c9d78dc26...27Your transfer is successful \ No newline at end of file + + Transfert de fonds POC avec les API FX Mojaloop + + + Transfert de fonds POC avec les API FX Mojaloop + Le DFSP payeur demande une conversion avec montant ENVOI + + DFSP payeur + + Fournisseur de change + + DFSP bénéficiaire + + + + + + + + + + + + + + + + John + + + John + + + + DFSP payeur + + DFSP payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur + FXP + + Connecteur + FXP + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + Yaro + + + Yaro + + + + + + + + + + + + + + + 1 + Merci de confirmer votre part + du transfert + + + POST /fxTransfers + { + "commitRequestId": "77c9d78dc26...", + "determiningTransferId": "d9ce59d4359843...", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS", + "amount": "48000"}, + "condition": "GRzLaTP7DJ9t4P-a_B..." + } + + + + + 2 + OK, il s'agit d'une confirmation FX. + + + + + 3 + Existe-t-il un transfert avec + determiningTransactionId ? + Non. + + + + + 4 + Contrôle de liquidité et réserve + sur le compte du DFSP payeur + + + Réservations : +   + PayerFSP a une réservation de 300 BWP + + + + 5 + Merci de confirmer la partie + conversion de devises du transfert +   + POST /fxTransfers + + + + + 6 + Réserver les fonds pour la conversion FX + + + + 7 + Confirmé. Voici l'exécution (fulfilment) + + + PUT /fxTransfers/77c9d78dc26... + { + "fulfilment": "188909ceb6cd5c35d..", + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "RESERVED" + } + + + 8 + Conversion réussie sous réserve + du succès du transfert + PUT /fxTransfers/77c9d78dc26... + + + + + 9 + OK, tout est bon + Je peux maintenant envoyer le transfert proprement dit + + + 10 + Merci d'effectuer le transfert +   + POST /transfers + + + + + 11 + Y a-t-il un transfert dépendant ? + Oui + + + + + 12 + Effectuer le contrôle de liquidité et + réserver les fonds contre la partie + créancière du transfert dépendant + + + Réservations : +   + PayerFSP a une réservation de 300 BWP + FDH_FX a une réservation de 48000 TZS + + + 13 + Merci d'effectuer le transfert + POST /transfers + + + + + 14 + Je vérifie que les conditions + du transfert dépendant + sont les mêmes que celles + auxquelles j'ai souscrit et que + l'exécution et la condition correspondent + + + 15 + Bonjour Yaro, vous avez reçu un transfert entrant + de 44000 TZS + + + + 16 + Transfert confirmé, voici l'exécution (fulfilment) + + + PUT /transfers/77c9d78dc26... + { + "completedTimestamp": "2021-08-25T14:17:08...", + "fulfilment": "mhPUT9ZAwd-BXLfeSd...", + "transferState": "COMMITTED" + } + + + + + 17 + Y a-t-il un transfert dépendant ? + Oui. + + + + + 18 + Cette dépendance concerne-t-elle le + débiteur du transfert ? + Oui. + + + + + 19 + Créer une obligation du + débiteur vers la partie nommée + dans la dépendance (le FXP) + + + + + 20 + Le transfert est-il libellé dans + la devise du montant + reçu par le bénéficiaire ? Oui. + + + + + 21 + Créer une obligation de la + partie nommée dans la + dépendance vers le créancier + du transfert + + + Positions du grand livre : + PayerFSP a un débit de 300 BWP + FDH_FX a un crédit de 300 BWP + FDH_FX a un débit de 48000 TZS + PayeeFSP a un crédit de 48000 TZS + + + + 22 + Le transfert a réussi. + Vous pouvez le compenser dans vos livres + + + PATCH /fxTransfers/77c9d78dc26... + { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "transferState": "COMMITTED" + } + + + + + 23 + Vérifions : cela correspond-il à ce que j'ai envoyé ? + + + + + 24 + Oui. Parfait. Je compense la conversion + + + + 25 + 200 — OK + + + + 26 + Transfert terminé + PUT /transfers/77c9d78dc26... + + + 27 + Votre transfert a réussi + + diff --git a/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.plantuml b/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.plantuml index d1fe241fd..4f688de63 100644 --- a/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.plantuml +++ b/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.plantuml @@ -42,30 +42,30 @@ !$condition = "HOr22-H3AfTDHrSkP..." -title Currency Conversion Transfer Phase ABORT flows +title Phase de transfert de conversion de devises — flux d'ABANDON actor "$senderName" as A1 -box "Payer DFSP" #LightBlue - participant "Payer DFSP" as D1 +box "DFSP payeur" #LightBlue + participant "DFSP payeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -box "FX provider" - participant "FXP\nConnector" as FXP +box "Fournisseur de change" + participant "Connecteur\nFXP" as FXP end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 end box actor "$receiverName" as A2 autonumber -D1->>S1:Please confirm your part of the transfer +D1->>S1:Merci de confirmer votre part du transfert note left **POST /fxTransfers** { @@ -85,35 +85,35 @@ note left end note activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif deactivate D2 !if ($hideSwitchDetail != true) -S1->S1:OK, so this is an FX confirmation. -S1->S1: Is there any transfer with determiningTransactionId?\nNo, it does'nt. +S1->S1:OK, il s'agit d'une confirmation FX. +S1->S1: Existe-t-il un transfert avec determiningTransactionId ?\nNon. !endif -S1->S1: Liquidity check and reserve on Payer DFSP's account +S1->S1: Contrôle de liquidité et réserve sur le compte du DFSP payeur !if ($hideSwitchDetail != true) note over S1 -Reservations: +Réservations : -**$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency** +**$payerFSPID a une réservation de $fxpSourceAmount $payerCurrency** end note !endif -S1->>FXP:Please confirm the currency\n conversion part of the transfer\n **POST /fxTransfers** +S1->>FXP:Merci de confirmer la partie\nconversion de devises du transfert\n **POST /fxTransfers** deactivate S1 activate FXP !if ($simplified != true) -FXP-->>S1:202 I'll get back to you +FXP-->>S1:202 — Je vous recontacte !endif -alt conversion failed - FXP->>S1:Failed. +alt échec de la conversion + FXP->>S1:Échec. note right **PUT /fxTransfers/$commitRequestId**/error { "errorInformation": { "errorCode": "5100", - "errorDescription": "error message"} + "errorDescription": "message d'erreur"} } ( **or** ) **PUT /fxTransfers/$commitRequestId** @@ -122,9 +122,9 @@ alt conversion failed "extensionList": {"extension": [{"key": "reason","value": "some reason"}]} } end note -else conversion success - FXP->FXP:Reserve funds for FX conversion - FXP->>S1:Confirmed. Here's the fulfilment +else conversion réussie + FXP->FXP:Réserver les fonds pour la conversion FX + FXP->>S1:Confirmé. Voici l'exécution (fulfilment) note right **PUT /fxTransfers/$commitRequestId** { @@ -134,9 +134,9 @@ else conversion success } end note deactivate FXP - S1->S1:Check fulfilment matches and cancel if not. - alt Conversion failed - S1->FXP:Sorry. Conversion failed + S1->S1:Vérifier que l'exécution correspond et annuler sinon. + alt Échec de la conversion + S1->FXP:Désolé. La conversion a échoué note left **PATCH /fxTransfers/$commitRequestId** { @@ -145,33 +145,33 @@ else conversion success } end note activate FXP - FXP-->S1:Acknowledged - FXP->FXP:Remove any reservations or obligations + FXP-->S1:Accusé de réception + FXP->FXP:Supprimer les réservations ou obligations deactivate FXP end end !if ($simplified != true) -S1-->>FXP:200 Gotcha +S1-->>FXP:200 — OK !endif deactivate FXP -alt Conversion failed - S1->S1: Abort the fxTransfer. Revert \nthe position changes involved in this\n fxTransfer. +alt Échec de la conversion + S1->S1: Abandonner le fxTransfer. Annuler \nles changements de position liés à ce\n fxTransfer. note over S1 - **Note:** - Incase of payee side conversion, there will be dependent transfer. - But do not cancel that transfer as DFSP can try currency conversion with - another FXP. But make sure that while processing the fulfilment of the original - transfer, it shouldn't pickup this fxTransfer as the dependent transfer. - (Maybe by removing the entry from watchlist) + **Remarque :** + En cas de conversion côté bénéficiaire, il y aura un transfert dépendant. + N'annulez pas ce transfert car le DFSP peut tenter une conversion avec + un autre FXP. Veillez à ce que, lors du traitement de l'exécution du transfert + d'origine, ce fxTransfer ne soit pas pris comme transfert dépendant + (par ex. en retirant l'entrée de la liste de surveillance). end note - S1->>D1:Sorry. Conversion failed + S1->>D1:Désolé. La conversion a échoué note right **PUT /fxTransfers/$commitRequestId/error** { "errorInformation": { "errorCode": "5100", - "errorDescription": "error message"} + "errorDescription": "message d'erreur"} } ( **or** ) **PUT /fxTransfers/$commitRequestId** @@ -180,17 +180,17 @@ alt Conversion failed "extensionList": {"extension": [{"key": "reason","value": "some reason"}]} } end note -else Conversion succeeded - S1->D1:Conversion succeeded subject to\n transfer success\n**PUT /fxTransfers/77c9d78dc26a...** +else Conversion réussie + S1->D1:Conversion réussie sous réserve\ndu succès du transfert\n**PUT /fxTransfers/77c9d78dc26a...** activate D1 end !if ($simplified != true) -D1-->S1:200 Gotcha +D1-->S1:200 — OK !endif -D1->D1:OK, so that's all right\nNow I can send the transfer itself +D1->D1:OK, tout est bon\nJe peux maintenant envoyer le transfert proprement dit -D1->S1:Please do the transfer\n **POST /transfers** +D1->S1:Merci d'effectuer le transfert\n **POST /transfers** deactivate D1 !if ($simplified != true) note over D1 @@ -202,7 +202,7 @@ note over D1 "amount": { "currency": "$payeeCurrency", "amount": "$targetAmount"}, - "ilpPacket": "", + "ilpPacket": "", "condition": "$condition", "expiration": "2016-05-24T08:38:08.699-04:00" } @@ -210,39 +210,39 @@ end note !endif activate S1 !if ($simplified != true) -S1-->D1:202 I'll get back to you +S1-->D1:202 — Je vous recontacte !endif deactivate D1 !if ($hideSwitchDetail != true) -S1->S1:Is there a dependent transfer? Yes +S1->S1:Y a-t-il un transfert dépendant ? Oui !endif -S1->S1:Perform liquidity check and reserve funds\nagainst creditor party to dependent transfer +S1->S1:Effectuer le contrôle de liquidité et réserver les fonds\nen faveur de la partie créancière du transfert dépendant note over S1 -Reservations: +Réservations : -$payerFSPID has a reservation of $fxpSourceAmount $payerCurrency -**$fxpID has a reservation of $targetAmount $payeeCurrency** +$payerFSPID a une réservation de $fxpSourceAmount $payerCurrency +**$fxpID a une réservation de $targetAmount $payeeCurrency** end note -S1->D2:Please do the transfer\n**POST /transfers** +S1->D2:Merci d'effectuer le transfert\n**POST /transfers** deactivate S1 activate D2 !if ($simplified != true) -D2-->S1:202 I'll get back to you +D2-->S1:202 — Je vous recontacte !endif -D2->D2:Let me check that the terms \nof the dependent transfer are \nthe same as the ones I agreed\n to and that the fulfilment and \ncondition match +D2->D2:Je vérifie que les conditions \ndu transfert dépendant sont \nles mêmes que celles acceptées\n et que l'exécution et la \ncondition correspondent -D2->A2: Hi $receiverName's, you got inbound \ntransfer $payeeReceiveAmount $payeeCurrency +D2->A2: Bonjour $receiverName, vous avez reçu un transfert entrant \nde $payeeReceiveAmount $payeeCurrency deactivate D2 -alt transfer failed - D2->>S1:Transfer is rejected +alt échec du transfert + D2->>S1:Transfert refusé note right **PUT /transfers/$commitRequestId**/error { "errorInformation": { "errorCode": "5100", - "errorDescription": "error message"} + "errorDescription": "message d'erreur"} } ( **or** ) { @@ -252,13 +252,13 @@ alt transfer failed activate S1 !if ($simplified != true) - S1-->>D2:200 Gotcha + S1-->>D2:200 — OK !endif - S1->S1: Revert the position changes \ninvolved in this transfer - S1->S1: If there are dependency fxTransfers,\n abort the fxTransfers as well and \nrevert the position changes involved \nin those fxTransfers + S1->S1: Annuler les changements de position \nliés à ce transfert + S1->S1: S'il existe des fxTransfers dépendants,\n les abandonner également et \nannuler les changements de position \nassociés à ces fxTransfers - S1->>FXP: The linked transfer is failed.\nRemove any reservations or obligations + S1->>FXP: Le transfert lié a échoué.\nSupprimer les réservations ou obligations note left **PATCH /fxTransfers/$commitRequestId** { @@ -267,19 +267,19 @@ alt transfer failed } end note activate FXP - FXP->FXP: Oops! - FXP-->>S1:200 Gotcha + FXP->FXP: Oups ! + FXP-->>S1:200 — OK deactivate FXP S1->>D1:Transfer is complete\n**PUT /transfers/$commitRequestId/error** activate D1 !if ($simplified != true) - D1-->S1:200 Gotcha + D1-->S1:200 — OK !endif deactivate S1 - D1->A1:Your transfer is failed + D1->A1:Votre transfert a échoué deactivate D1 -else transfer success - D2->>S1:Transfer is confirmed, here's the fulfilment +else transfert réussi + D2->>S1:Transfert confirmé, voici l'exécution (fulfilment) note right **PUT /transfers/$commitRequestId** { @@ -290,19 +290,19 @@ else transfer success end note activate S1 !if ($simplified != true) - S1-->>D2:200 Gotcha + S1-->>D2:200 — OK !endif !if ($hideSwitchDetail != true) - S1->S1:Is there a dependent transfer?\nYes, there is. - S1->S1:Is this dependency against the\n debtor party to the transfer?\nYes, it is. - S1->S1:Create an obligation from the \ndebtor party to the party named \nin the dependency (the FXP) - S1->S1:Is the transfer denominated in \nthe currency of the payee receive\n amount?\nYes, it is. - S1->S1:Create an obligation from the \nparty named in the dependency\nto the creditor party for the transfer + S1->S1:Y a-t-il un transfert dépendant ?\nOui. + S1->S1:Cette dépendance concerne-t-elle le\ndébiteur du transfert ?\nOui. + S1->S1:Créer une obligation du \ndébiteur vers la partie nommée \ndans la dépendance (le FXP) + S1->S1:Le transfert est-il libellé dans \nla devise du montant reçu par le\nbénéficiaire ?\nOui. + S1->S1:Créer une obligation de la \npartie nommée dans la dépendance\nvers le créancier du transfert !else - S1->S1:Create obligations from the payer to the FXP and from FXP to the payee + S1->S1:Créer des obligations du payeur vers le FXP et du FXP vers le bénéficiaire !endif - S1->>FXP:The transfer succeeded.\nYou can clear it in your ledgers + S1->>FXP:Le transfert a réussi.\nVous pouvez le compenser dans vos livres note left **PATCH /fxTransfers/$commitRequestId** { @@ -312,25 +312,25 @@ else transfer success } end note activate FXP - FXP->FXP:Let's just check: does this match the stuff I sent? - FXP->FXP:It does. Great. I'll clear the conversion - FXP-->>S1:200 Gotcha + FXP->FXP:Vérifions : cela correspond-il à ce que j'ai envoyé ? + FXP->FXP:Oui. Parfait. Je compense la conversion + FXP-->>S1:200 — OK deactivate FXP note over S1 - **Ledger positions:** - $payerFSPID has a debit of $fxpSourceAmount $payerCurrency - $fxpID has a credit of $fxpSourceAmount $payerCurrency - $fxpID has a debit of $fxpTargetAmount $payeeCurrency - $payeeFSPID has a credit of $targetAmount $payeeCurrency + **Positions du grand livre :** + $payerFSPID a un débit de $fxpSourceAmount $payerCurrency + $fxpID a un crédit de $fxpSourceAmount $payerCurrency + $fxpID a un débit de $fxpTargetAmount $payeeCurrency + $payeeFSPID a un crédit de $targetAmount $payeeCurrency end note - S1->>D1:Transfer is complete\n**PUT /transfers/$commitRequestId** + S1->>D1:Transfert terminé\n**PUT /transfers/$commitRequestId** activate D1 !if ($simplified != true) - D1-->S1:200 Gotcha + D1-->S1:200 — OK !endif deactivate S1 - D1->A1:Your transfer is successful + D1->A1:Votre transfert a réussi deactivate D1 end diff --git a/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.svg b/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.svg index 5cc482459..0c895cfb8 100644 --- a/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.svg +++ b/docs/fr/product/features/CurrencyConversion/Payer_SEND_ABORT_TransferPhase.svg @@ -1 +1,489 @@ -Remittance Transfer using Mojaloop FX APIs POCPayer DFSP requests conversion with SEND amountPayer DFSPFX providerPayee DFSPJohnJohnPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchFXPConnectorFXPConnectorPayeeMojaloopConnectorPayeeMojaloopConnectorYaroYaro1Please confirm your part of the transferPOST /fxTransfers{"commitRequestId": "77c9d78dc2...","determiningTransferId": "d9ce59d43...","initiatingFsp": "PayerFSP","counterPartyFsp": "FDH_FX","amountType": "SEND","sourceAmount": {"currency": "BWP","amount": "300"},"targetAmount": {"currency": "TZS","amount": "48000"},"condition": "GRzLaTP7DJ9t4P-a_B..."}2OK, so this is an FX confirmation.3Is there any transfer with determiningTransactionId?No, it does'nt.4Liquidity check and reserve on Payer DFSP's accountReservations: PayerFSP has a reservation of 300 BWP5Please confirm the currencyconversion part of the transfer POST /fxTransfersalt[conversion failed]6Failed.PUT /fxTransfers/77c9d78dc2.../error{"errorInformation": {"errorCode": "5100","errorDescription": "error message"}}(or)PUT /fxTransfers/77c9d78dc2...{"conversionState": "ABORTED","extensionList": {"extension": [{"key": "reason","value": "some reason"}]}}[conversion success]7Reserve funds for FX conversion8Confirmed. Here's the fulfilmentPUT /fxTransfers/77c9d78dc2...{"fulfilment": "188909ceb6cd5...","completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "RESERVED"}9Check fulfilment matches and cancel if not.alt[Conversion failed]10Sorry. Conversion failedPATCH /fxTransfers/77c9d78dc2...{"completedTimestamp": "2021-08-25T14:17:08.175+01:00","conversionState": "ABORTED"}11Acknowledged12Remove any reservations or obligationsalt[Conversion failed]13Abort the fxTransfer. Revertthe position changes involved in thisfxTransfer.Note:Incase of payee side conversion, there will be dependent transfer.But do not cancel that transfer as DFSP can try currency conversion withanother FXP. But make sure that while processing the fulfilment of the originaltransfer, it shouldn't pickup this fxTransfer as the dependent transfer.(Maybe by removing the entry from watchlist)14Sorry. Conversion failedPUT /fxTransfers/77c9d78dc2.../error{"errorInformation": {"errorCode": "5100","errorDescription": "error message"}}(or)PUT /fxTransfers/77c9d78dc2...{"conversionState": "ABORTED","extensionList": {"extension": [{"key": "reason","value": "some reason"}]}}[Conversion succeeded]15Conversion succeeded subject totransfer successPUT /fxTransfers/77c9d78dc26a...16OK, so that's all rightNow I can send the transfer itself17Please do the transfer POST /transfers18Is there a dependent transfer? Yes19Perform liquidity check and reserve fundsagainst creditor party to dependent transferReservations: PayerFSP has a reservation of 300 BWPFDH_FX has a reservation of 48000 TZS20Please do the transferPOST /transfers21Let me check that the termsof the dependent transfer arethe same as the ones I agreedto and that the fulfilment andcondition match22Hi Yaro's, you got inboundtransfer 44000 TZSalt[transfer failed]23Transfer is rejectedPUT /transfers/77c9d78dc2.../error{"errorInformation": {"errorCode": "5100","errorDescription": "error message"}}(or){"transferState": "ABORETED"}24Revert the position changesinvolved in this transfer25If there are dependency fxTransfers,abort the fxTransfers as well andrevert the position changes involvedin those fxTransfers26The linked transfer is failed.Remove any reservations or obligationsPATCH /fxTransfers/77c9d78dc2...{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","transferState": "ABORTED"}27Oops!28200 Gotcha29Transfer is completePUT /transfers/77c9d78dc2.../error30Your transfer is failed[transfer success]31Transfer is confirmed, here's the fulfilmentPUT /transfers/77c9d78dc2...{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd...","transferState": "COMMITTED"}32Is there a dependent transfer?Yes, there is.33Is this dependency against thedebtor party to the transfer?Yes, it is.34Create an obligation from thedebtor party to the party namedin the dependency (the FXP)35Is the transfer denominated inthe currency of the payee receiveamount?Yes, it is.36Create an obligation from theparty named in the dependencyto the creditor party for the transfer37The transfer succeeded.You can clear it in your ledgersPATCH /fxTransfers/77c9d78dc2...{"completedTimestamp": "2021-08-25T14:17:08.227+01:00","fulfilment": "mhPUT9ZAwd...","transferState": "COMMITTED"}38Let's just check: does this match the stuff I sent?39It does. Great. I'll clear the conversion40200 GotchaLedger positions:PayerFSP has a debit of 300 BWPFDH_FX has a credit of 300 BWPFDH_FX has a debit of 48000 TZSPayeeFSP has a credit of 48000 TZS41Transfer is completePUT /transfers/77c9d78dc2...42Your transfer is successful \ No newline at end of file + + Phase de transfert de conversion de devises — flux d'ABANDON + + + Phase de transfert de conversion de devises — flux d'ABANDON + + DFSP payeur + + Fournisseur de change + + DFSP bénéficiaire + + + + + + + + + + + + + + + + + + + + + + + John + + + John + + + + DFSP payeur + + DFSP payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur + FXP + + Connecteur + FXP + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + Yaro + + + Yaro + + + + + + + + + + + + + + + + + + 1 + Merci de confirmer votre part du transfert + + + POST /fxTransfers + { + "commitRequestId": "77c9d78dc2...", + "determiningTransferId": "d9ce59d43...", + "initiatingFsp": "PayerFSP", + "counterPartyFsp": "FDH_FX", + "amountType": "SEND", + "sourceAmount": { + "currency": "BWP", + "amount": "300"}, + "targetAmount": { + "currency": "TZS", + "amount": "48000"}, + "condition": "GRzLaTP7DJ9t4P-a_B..." + } + + + + + 2 + OK, il s'agit d'une confirmation FX. + + + + + 3 + Existe-t-il un transfert avec determiningTransactionId ? + Non. + + + + + 4 + Contrôle de liquidité et réserve sur le compte du DFSP payeur + + + Réservations : +   + PayerFSP a une réservation de 300 BWP + + + + 5 + Merci de confirmer la partie + conversion de devises du transfert +   + POST /fxTransfers + + + alt + [échec de la conversion] + + + + 6 + Échec. + + + PUT /fxTransfers/77c9d78dc2... + /error + { + "errorInformation": { + "errorCode": "5100", + "errorDescription": "message d'erreur"} + } + ( + or + ) + PUT /fxTransfers/77c9d78dc2... + { + "conversionState": "ABORTED", + "extensionList": {"extension": [{"key": "reason","value": "some reason"}]} + } + + [conversion réussie] + + + + + 7 + Réserver les fonds pour la conversion FX + + + + 8 + Confirmé. Voici l'exécution (fulfilment) + + + PUT /fxTransfers/77c9d78dc2... + { + "fulfilment": "188909ceb6cd5...", + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "RESERVED" + } + + + + + 9 + Vérifier que l'exécution correspond et annuler sinon. + + + alt + [Échec de la conversion] + + + 10 + Désolé. La conversion a échoué + + + PATCH /fxTransfers/77c9d78dc2... + { + "completedTimestamp": "2021-08-25T14:17:08.175+01:00", + "conversionState": "ABORTED" + } + + + 11 + Accusé de réception + + + + + 12 + Supprimer les réservations ou obligations + + + alt + [Échec de la conversion] + + + + + 13 + Abandonner le fxTransfer. Annuler + les changements de position liés à ce + fxTransfer. + + + Remarque : + En cas de conversion côté bénéficiaire, il y aura un transfert dépendant. + N'annulez pas ce transfert car le DFSP peut tenter une conversion avec + un autre FXP. Veillez à ce que, lors du traitement de l'exécution du transfert + d'origine, ce fxTransfer ne soit pas pris comme transfert dépendant + (par ex. en retirant l'entrée de la liste de surveillance). + + + + 14 + Désolé. La conversion a échoué + + + PUT /fxTransfers/77c9d78dc2.../error + { + "errorInformation": { + "errorCode": "5100", + "errorDescription": "message d'erreur"} + } + ( + or + ) + PUT /fxTransfers/77c9d78dc2... + { + "conversionState": "ABORTED", + "extensionList": {"extension": [{"key": "reason","value": "some reason"}]} + } + + [Conversion réussie] + + + 15 + Conversion réussie sous réserve + du succès du transfert + PUT /fxTransfers/77c9d78dc26a... + + + + + 16 + OK, tout est bon + Je peux maintenant envoyer le transfert proprement dit + + + 17 + Merci d'effectuer le transfert +   + POST /transfers + + + + + 18 + Y a-t-il un transfert dépendant ? Oui + + + + + 19 + Effectuer le contrôle de liquidité et réserver les fonds + en faveur de la partie créancière du transfert dépendant + + + Réservations : +   + PayerFSP a une réservation de 300 BWP + FDH_FX a une réservation de 48000 TZS + + + 20 + Merci d'effectuer le transfert + POST /transfers + + + + + 21 + Je vérifie que les conditions + du transfert dépendant sont + les mêmes que celles acceptées + et que l'exécution et la + condition correspondent + + + 22 + Bonjour Yaro, vous avez reçu un transfert entrant + de 44000 TZS + + + alt + [échec du transfert] + + + + 23 + Transfert refusé + + + PUT /transfers/77c9d78dc2... + /error + { + "errorInformation": { + "errorCode": "5100", + "errorDescription": "message d'erreur"} + } + ( + or + ) + { + "transferState": "ABORETED" + } + + + + + 24 + Annuler les changements de position + liés à ce transfert + + + + + 25 + S'il existe des fxTransfers dépendants, + les abandonner également et + annuler les changements de position + associés à ces fxTransfers + + + + 26 + Le transfert lié a échoué. + Supprimer les réservations ou obligations + + + PATCH /fxTransfers/77c9d78dc2... + { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "transferState": "ABORTED" + } + + + + + 27 + Oups ! + + + + 28 + 200 — OK + + + + 29 + Transfer is complete + PUT /transfers/77c9d78dc2.../error + + + 30 + Votre transfert a échoué + + [transfert réussi] + + + + 31 + Transfert confirmé, voici l'exécution (fulfilment) + + + PUT /transfers/77c9d78dc2... + { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd...", + "transferState": "COMMITTED" + } + + + + + 32 + Y a-t-il un transfert dépendant ? + Oui. + + + + + 33 + Cette dépendance concerne-t-elle le + débiteur du transfert ? + Oui. + + + + + 34 + Créer une obligation du + débiteur vers la partie nommée + dans la dépendance (le FXP) + + + + + 35 + Le transfert est-il libellé dans + la devise du montant reçu par le + bénéficiaire ? + Oui. + + + + + 36 + Créer une obligation de la + partie nommée dans la dépendance + vers le créancier du transfert + + + + 37 + Le transfert a réussi. + Vous pouvez le compenser dans vos livres + + + PATCH /fxTransfers/77c9d78dc2... + { + "completedTimestamp": "2021-08-25T14:17:08.227+01:00", + "fulfilment": "mhPUT9ZAwd...", + "transferState": "COMMITTED" + } + + + + + 38 + Vérifions : cela correspond-il à ce que j'ai envoyé ? + + + + + 39 + Oui. Parfait. Je compense la conversion + + + + 40 + 200 — OK + + + Positions du grand livre : + PayerFSP a un débit de 300 BWP + FDH_FX a un crédit de 300 BWP + FDH_FX a un débit de 48000 TZS + PayeeFSP a un crédit de 48000 TZS + + + + 41 + Transfert terminé + PUT /transfers/77c9d78dc2... + + + 42 + Votre transfert a réussi + + diff --git a/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.plantuml b/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.plantuml index d997b7c62..ed9ed99b1 100644 --- a/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.plantuml +++ b/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.plantuml @@ -41,47 +41,47 @@ !$condition = "HOr22-H3AfTDHrSkP..." -title Currency Conversion Discovery +title Découverte — conversion de devises actor "$senderName" as A1 -box "Payer DFSP" #LightBlue - participant "Payer DFSP" as D1 +box "DFSP payeur" #LightBlue + participant "DFSP payeur" as D1 end box -participant "Mojaloop Switch" as S1 +participant "Commutateur Mojaloop" as S1 -'box "Discovery Service" #LightYellow -' participant "ALS Oracle" as ALS +'box "Service de découverte" #LightYellow +' participant "Oracle ALS" as ALS 'end box -'box "FX provider" -' participant "FXP\nConnector" as FXP +'box "Fournisseur de change" +' participant "Connecteur\nFXP" as FXP 'end box -box "Payee DFSP" #LightBlue - participant "Payee\nMojaloop\nConnector" as D2 +box "DFSP bénéficiaire" #LightBlue + participant "Connecteur Mojaloop\nbénéficiaire" as D2 end box 'actor "$receiverName" as A2 autonumber -A1->D1:I'd like to pay $receiverName\n$payerSendAmount $payerCurrency, please +A1->D1:Je voudrais payer $receiverName\n$payerSendAmount $payerCurrency, s'il vous plaît activate D1 -D1->>S1:I want to send to MSISDN $payeeMSISDN\n**GET /parties/MSISDN/$payeeMSISDN** +D1->>S1:Je veux envoyer vers le MSISDN $payeeMSISDN\n**GET /parties/MSISDN/$payeeMSISDN** deactivate D1 activate S1 !if ($simplified != true) -S1-->>D1:202 I'll get back to you +S1-->>D1:202 — Je vous recontacte !endif S1->S1:Who owns MSISDN $payeeMSISDN?\nIt's $payeeFSPID -S1->>D2:Do you own MSISDN $payeeMSISDN? +S1->>D2:Le MSISDN $payeeMSISDN vous appartient-il ? deactivate S1 activate D2 !if ($simplified != true) -D2-->>S1:202 I'll get back to you +D2-->>S1:202 — Je vous recontacte !endif -D2->D2: Check Sanction list status & trigger a refresh of the status -D2->>S1:Yes, it's $receiverName. He can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +D2->D2: Vérifier le statut de liste de sanctions et déclencher une actualisation +D2->>S1:Oui, c'est $receiverName. Il peut recevoir en $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** note right **PUT /parties** { @@ -97,17 +97,17 @@ end note deactivate D2 activate S1 !if ($simplified != true) -S1-->>D2:200 Gotcha +S1-->>D2:200 — OK !endif -S1->>D1:Yes, it's $receiverName. He can receive in $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** +S1->>D1:Oui, c'est $receiverName. Il peut recevoir en $payeeCurrency\n**PUT /parties/MSISDN/$payeeMSISDN** deactivate S1 activate D1 !if ($simplified != true) -D1-->>S1:200 Gotcha +D1-->>S1:200 — OK !endif -D1->A1: Hi, $senderName: The number belongs to $receiverName \nLet me know if you want to go ahead +D1->A1: Bonjour, $senderName : le numéro appartient à $receiverName \nDites-moi si vous souhaitez continuer deactivate D1 -A1->D1: Payer has accepted the party information +A1->D1: Le payeur a accepté les informations sur la partie @enduml \ No newline at end of file diff --git a/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.svg b/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.svg index a4cc63b7f..1be2953fd 100644 --- a/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.svg +++ b/docs/fr/product/features/CurrencyConversion/Payer_SEND_Discovery.svg @@ -1 +1,106 @@ -Currency Conversion DiscoveryPayer DFSPPayee DFSPJohnJohnPayer DFSPPayer DFSPMojaloop SwitchMojaloop SwitchPayeeMojaloopConnectorPayeeMojaloopConnector1I'd like to pay Yaro300 BWP, please2I want to send to MSISDN 2551234567890GET /parties/MSISDN/25512345678903Who owns MSISDN 2551234567890?It's PayeeFSP4Do you own MSISDN 2551234567890?5Check Sanction list status & trigger a refresh of the status6Yes, it's Yaro. He can receive in TZSPUT /parties/MSISDN/2551234567890PUT /parties{"partyIdInfo": {"partyIdType": "MSISDN","partyIdentifier": "2551234567890","fspId": "PayeeFSP"},"name": "Yaro","supportedCurrencies": [ "TZS" ]}7Yes, it's Yaro. He can receive in TZSPUT /parties/MSISDN/25512345678908Hi, John: The number belongs to YaroLet me know if you want to go ahead9Payer has accepted the party information \ No newline at end of file + + Découverte — conversion de devises + + + Découverte — conversion de devises + + DFSP payeur + + DFSP bénéficiaire + + + + + + + + + + John + + + John + + + + DFSP payeur + + DFSP payeur + + Commutateur Mojaloop + + Commutateur Mojaloop + + Connecteur Mojaloop + bénéficiaire + + Connecteur Mojaloop + bénéficiaire + + + + + + + + 1 + Je voudrais payer Yaro + 300 BWP, s'il vous plaît + + + + 2 + Je veux envoyer vers le MSISDN 2551234567890 + GET /parties/MSISDN/2551234567890 + + + + + 3 + Who owns MSISDN 2551234567890? + It's PayeeFSP + + + + 4 + Le MSISDN 2551234567890 vous appartient-il ? + + + + + 5 + Vérifier le statut de liste de sanctions et déclencher une actualisation + + + + 6 + Oui, c'est Yaro. Il peut recevoir en TZS + PUT /parties/MSISDN/2551234567890 + + + PUT /parties + { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "2551234567890", + "fspId": "PayeeFSP"}, + "name": "Yaro", + "supportedCurrencies": [ "TZS" ] + } + + + + 7 + Oui, c'est Yaro. Il peut recevoir en TZS + PUT /parties/MSISDN/2551234567890 + + + 8 + Bonjour, John : le numéro appartient à Yaro + Dites-moi si vous souhaitez continuer + + + 9 + Le payeur a accepté les informations sur la partie + + diff --git a/docs/fr/product/features/Interscheme/Interscheme-Agreement.plantuml b/docs/fr/product/features/Interscheme/Interscheme-Agreement.plantuml index 96faa68f5..7b48dc683 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-Agreement.plantuml +++ b/docs/fr/product/features/Interscheme/Interscheme-Agreement.plantuml @@ -1,70 +1,70 @@ @startuml Interscheme-Agreement -title Interscheme - Agreement +title Inter-schéma — accord -participant "Payer DFSP" as payerDFSP -box Scheme A #LightBlue - participant "Mojaloop\nScheme A" as schemeA - participant "Proxy Cache\nScheme A" as pc_A +participant "DFSP payeur" as payerDFSP +box Schéma A #LightBlue + participant "Mojaloop\nSchéma A" as schemeA + participant "Cache proxy\nSchéma A" as pc_A end box participant "Proxy AB" as xnp -box Scheme B #d1e0c3 - participant "Mojaloop\nScheme B" as schemeB - participant "Proxy Cache\nScheme B" as pc_B +box Schéma B #d1e0c3 + participant "Mojaloop\nSchéma B" as schemeB + participant "Cache proxy\nSchéma B" as pc_B end box -participant "Payee DFS" as payeeDFSP +participant "DFSP bénéficiaire" as payeeDFSP autonumber 1 "[0]" payerDFSP ->> schemeA: POST /quotes schemeA -->> payerDFSP: 202 OK note left -header - source: payerDFSP - destination: payeeDFSP -JWS signed by payerDFSP +en-tête + source : payerDFSP + destination : payeeDFSP +JWS signé par payerDFSP end note -schemeA -> pc_A: Destination not in Scheme\n Lookup proxy for payeeDFSP = Proxy AB +schemeA -> pc_A: Destination hors schéma\n Recherche du proxy pour payeeDFSP = Proxy AB schemeA ->> xnp: POST /quotes -xnp ->> schemeB: POST /quotes\nmessage unmodified +xnp ->> schemeB: POST /quotes\nmessage non modifié note left -header - source: payerDFSP - destination: payeeDFSP +en-tête + source : payerDFSP + destination : payeeDFSP fxpiop-proxy: proxyAB -JWS signed by payerDFSP +JWS signé par payerDFSP end note schemeB -->> xnp: 202 OK xnp -->> schemeA: 202 OK schemeB->>payeeDFSP: POST /quotes payeeDFSP-->>schemeB: 202 OK note right -Checks JWS signed by payerDFSP +Vérifie le JWS signé par payerDFSP end note payeeDFSP->>schemeB: PUT /quotes note right -header - source: payeeDFSP - destination: payerDFSP -JWS signed by payeeDFSP +en-tête + source : payeeDFSP + destination : payerDFSP +JWS signé par payeeDFSP end note schemeB-->>payeeDFSP: 200 OK -schemeB -> pc_B: Destination not in Scheme\n Lookup proxy for payerDFSP = Proxy AB +schemeB -> pc_B: Destination hors schéma\n Recherche du proxy pour payerDFSP = Proxy AB schemeB->>xnp: PUT /quotes -xnp->>schemeA: PUT /quotes\nmessage unmodified +xnp->>schemeA: PUT /quotes\nmessage non modifié note right -header - source: payeeDFSP - destination: payerDFSP +en-tête + source : payeeDFSP + destination : payerDFSP fxpiop-proxy: proxyAB -JWS signed by payeeDFSP +JWS signé par payeeDFSP end note schemeA-->>xnp: 200 OK xnp-->>schemeB: 200 OK schemeA->>payerDFSP: PUT /quotes note left -Checks JWS signed by payeeDFSP +Vérifie le JWS signé par payeeDFSP end note payerDFSP -->> schemeA: 200 OK diff --git a/docs/fr/product/features/Interscheme/Interscheme-Agreement.svg b/docs/fr/product/features/Interscheme/Interscheme-Agreement.svg index 73a3e83e4..74ddc35be 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-Agreement.svg +++ b/docs/fr/product/features/Interscheme/Interscheme-Agreement.svg @@ -1 +1,178 @@ -Interscheme - AgreementScheme AScheme BPayer DFSPPayer DFSPMojaloopScheme AMojaloopScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABMojaloopScheme BMojaloopScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFS[1]POST /quotes[2]202 OKheadersource: payerDFSPdestination: payeeDFSPJWS signed by payerDFSP[3]Destination not in SchemeLookup proxy for payeeDFSP = Proxy AB[4]POST /quotes[5]POST /quotesmessage unmodifiedheadersource: payerDFSPdestination: payeeDFSPfxpiop-proxy: proxyABJWS signed by payerDFSP[6]202 OK[7]202 OK[8]POST /quotes[9]202 OKChecks JWS signed by payerDFSP[10]PUT /quotesheadersource: payeeDFSPdestination: payerDFSPJWS signed by payeeDFSP[11]200 OK[12]Destination not in SchemeLookup proxy for payerDFSP = Proxy AB[13]PUT /quotes[14]PUT /quotesmessage unmodifiedheadersource: payeeDFSPdestination: payerDFSPfxpiop-proxy: proxyABJWS signed by payeeDFSP[15]200 OK[16]200 OK[17]PUT /quotesChecks JWS signed by payeeDFSP[18]200 OK \ No newline at end of file + + Inter-schéma — accord + + + Inter-schéma — accord + + Schéma A + + Schéma B + + + + + + + + + DFSP payeur + + DFSP payeur + + Mojaloop + Schéma A + + Mojaloop + Schéma A + + Cache proxy + Schéma A + + Cache proxy + Schéma A + + Proxy AB + + Proxy AB + + Mojaloop + Schéma B + + Mojaloop + Schéma B + + Cache proxy + Schéma B + + Cache proxy + Schéma B + + DFSP bénéficiaire + + DFSP bénéficiaire + + + + [1] + POST /quotes + + + + [2] + 202 OK + + + en-tête + source : payerDFSP + destination : payeeDFSP + JWS signé par payerDFSP + + + [3] + Destination hors schéma + Recherche du proxy pour payeeDFSP = Proxy AB + + + + [4] + POST /quotes + + + + [5] + POST /quotes + message non modifié + + + en-tête + source : payerDFSP + destination : payeeDFSP + fxpiop-proxy: proxyAB + JWS signé par payerDFSP + + + + [6] + 202 OK + + + + [7] + 202 OK + + + + [8] + POST /quotes + + + + [9] + 202 OK + + + Vérifie le JWS signé par payerDFSP + + + + [10] + PUT /quotes + + + en-tête + source : payeeDFSP + destination : payerDFSP + JWS signé par payeeDFSP + + + + [11] + 200 OK + + + [12] + Destination hors schéma + Recherche du proxy pour payerDFSP = Proxy AB + + + + [13] + PUT /quotes + + + + [14] + PUT /quotes + message non modifié + + + en-tête + source : payeeDFSP + destination : payerDFSP + fxpiop-proxy: proxyAB + JWS signé par payeeDFSP + + + + [15] + 200 OK + + + + [16] + 200 OK + + + + [17] + PUT /quotes + + + Vérifie le JWS signé par payeeDFSP + + + + [18] + 200 OK + + diff --git a/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.plantuml b/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.plantuml index d77655558..4316cfb8d 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.plantuml +++ b/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.plantuml @@ -1,69 +1,69 @@ @startuml Interscheme-ErrorCases -title Interscheme - Error Cases +title Inter-schéma — cas d'erreur -participant "Payer DFSP" as payerDFSP -box "Scheme A" #LightBlue - participant "ALS\nScheme A" as schemeA - participant "Proxy Cache\nScheme A" as pc_A +participant "DFSP payeur" as payerDFSP +box "Schéma A" #LightBlue + participant "ALS\nSchéma A" as schemeA + participant "Cache proxy\nSchéma A" as pc_A end box participant "Proxy AB" as xnp -box "Scheme B" #d1e0c3 - participant "ALS\nScheme B" as schemeB - participant "Proxy Cache\nScheme B" as pc_B +box "Schéma B" #d1e0c3 + participant "ALS\nSchéma B" as schemeB + participant "Cache proxy\nSchéma B" as pc_B end box -participant "Payee DFS" as payeeDFSP +participant "DFSP bénéficiaire" as payeeDFSP autonumber 1 "[0]" -== POST == +== Phase POST == payerDFSP ->> schemeA: POST/GET/PATCH/PUT /xxx note left -header - source: payerDFSP - destination: payeeDFSP +en-tête + source : payerDFSP + destination : payeeDFSP end note -alt if OpenAPI Error - schemeA -->> payerDFSP: 400 Bad Request +alt en cas d'erreur OpenAPI + schemeA -->> payerDFSP: 400 requête incorrecte end schemeA-->>payerDFSP: 202 OK - alt if error in schemeA + alt en cas d'erreur dans schémaA schemeA ->> payerDFSP: PUT /xxx/{ID}/error note right - Error Codes: 2xxx, 3xxx, 4xxx, 5xxx + Codes d'erreur : 2xxx, 3xxx, 4xxx, 5xxx end note payerDFSP -->> schemeA: 200 OK end - schemeA -> pc_A: lookup proxy for payeeDFSP = Proxy AB - alt if not in proxy cache + schemeA -> pc_A: recherche du proxy pour payeeDFSP = Proxy AB + alt si absent du cache proxy schemeA ->> payerDFSP: PUT /xxx/{ID}/error note right - Error Code: 3201 + Code d'erreur : 3201 end note payerDFSP -->> schemeA: 200 OK end schemeA ->> xnp: POST/GET/PATCH/PUT /xxx - alt if error in xnp + alt en cas d'erreur dans le proxy xnp xnp -->> schemeA: 503 { ErrorCode: 3100} xnp ->> schemeA: PUT /xxx/{ID}/error note right - header - source: Proxy AB - destination: payerDFSP - JWS Signed by Proxy AB - Error Codes: 3100 + en-tête + source : Proxy AB + destination : payerDFSP + JWS signé par Proxy AB + Codes d'erreur : 3100 end note schemeA -->> xnp: 200 OK schemeA ->> payerDFSP: PUT /xxx/{ID}/error payerDFSP -->> schemeA: 200 OK end - xnp->xnp: Add header + xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note @@ -72,12 +72,12 @@ schemeA-->>payerDFSP: 202 OK schemeB -->> xnp: 202 OK xnp -->> schemeA: 202 OK - alt if error in schemeB + alt en cas d'erreur dans schémaB schemeB ->> xnp: PUT /xxx/{ID}/error note right - Error Codes: 2xxx, 3xxx, 4xxx, 5xxx + Codes d'erreur : 2xxx, 3xxx, 4xxx, 5xxx end note - xnp->xnp: Add header + xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note @@ -91,16 +91,16 @@ schemeA-->>payerDFSP: 202 OK schemeB ->> payeeDFSP: POST/GET/PATCH/PUT /xxx payeeDFSP -->> schemeB: 200 OK - alt if error in payeeDFSP + alt en cas d'erreur dans payeeDFSP payeeDFSP->> schemeB: PUT /xxx/{ID}/error note right - header destination: PayerDFSP - Error Codes: 5xxx + en-tête destination : PayerDFSP + Codes d'erreur : 5xxx end note schemeB -->> payeeDFSP: 200 OK - schemeB -> schemeB: Lookup proxy for payerDFSP = Proxy AB + schemeB -> schemeB: Recherche du proxy pour payerDFSP = Proxy AB schemeB ->> xnp: PUT /xxx/{ID}/error - xnp->xnp: Add header + xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note diff --git a/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.svg b/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.svg index 8c6b3db2c..757be21e5 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.svg +++ b/docs/fr/product/features/Interscheme/Interscheme-ErrorCases.svg @@ -1 +1,311 @@ -Interscheme - Error CasesScheme AScheme BPayer DFSPPayer DFSPALSScheme AALSScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABALSScheme BALSScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFSPOST[1]POST/GET/PATCH/PUT /xxxheadersource: payerDFSPdestination: payeeDFSPalt[if OpenAPI Error][2]400 Bad Request[3]202 OKalt[if error in schemeA][4]PUT /xxx/{ID}/errorError Codes: 2xxx, 3xxx, 4xxx, 5xxx[5]200 OK[6]lookup proxy for payeeDFSP = Proxy ABalt[if not in proxy cache][7]PUT /xxx/{ID}/errorError Code: 3201[8]200 OK[9]POST/GET/PATCH/PUT /xxxalt[if error in xnp][10]503 { ErrorCode: 3100}[11]PUT /xxx/{ID}/errorheadersource: Proxy ABdestination: payerDFSPJWS Signed by Proxy ABError Codes: 3100[12]200 OK[13]PUT /xxx/{ID}/error[14]200 OK[15]Add headerfxpiop-proxy = "Proxy AB"[16]POST/GET/PATCH/PUT /xxx[17]202 OK[18]202 OKalt[if error in schemeB][19]PUT /xxx/{ID}/errorError Codes: 2xxx, 3xxx, 4xxx, 5xxx[20]Add headerfxpiop-proxy = "Proxy AB"[21]PUT /xxx/{ID}/error[22]200 OK[23]200 OK[24]PUT /xxx/{ID}/error[25]200 OK[26]POST/GET/PATCH/PUT /xxx[27]200 OKalt[if error in payeeDFSP][28]PUT /xxx/{ID}/errorheader destination: PayerDFSPError Codes: 5xxx[29]200 OK[30]Lookup proxy for payerDFSP = Proxy AB[31]PUT /xxx/{ID}/error[32]Add headerfxpiop-proxy = "Proxy AB"[33]PUT /xxx/{ID}/error[34]200 OK[35]200 OK[36]PUT /xxx/{ID}/error[37]200 OK \ No newline at end of file + + Inter-schéma — cas d'erreur + + + Inter-schéma — cas d'erreur + + Schéma A + + Schéma B + + + + + + + + + + + + + + + DFSP payeur + + DFSP payeur + + ALS + Schéma A + + ALS + Schéma A + + Cache proxy + Schéma A + + Cache proxy + Schéma A + + Proxy AB + + Proxy AB + + ALS + Schéma B + + ALS + Schéma B + + Cache proxy + Schéma B + + Cache proxy + Schéma B + + DFSP bénéficiaire + + DFSP bénéficiaire + + + + + Phase POST + + + + [1] + POST/GET/PATCH/PUT /xxx + + + en-tête + source : payerDFSP + destination : payeeDFSP + + + alt + [en cas d'erreur OpenAPI] + + + + [2] + 400 requête incorrecte + + + + [3] + 202 OK + + + alt + [en cas d'erreur dans schémaA] + + + + [4] + PUT /xxx/{ID}/error + + + Codes d'erreur : 2xxx, 3xxx, 4xxx, 5xxx + + + + [5] + 200 OK + + + [6] + recherche du proxy pour payeeDFSP = Proxy AB + + + alt + [si absent du cache proxy] + + + + [7] + PUT /xxx/{ID}/error + + + Code d'erreur : 3201 + + + + [8] + 200 OK + + + + [9] + POST/GET/PATCH/PUT /xxx + + + alt + [en cas d'erreur dans le proxy xnp] + + + + [10] + 503 { ErrorCode: 3100} + + + + [11] + PUT /xxx/{ID}/error + + + en-tête + source : Proxy AB + destination : payerDFSP + JWS signé par Proxy AB + Codes d'erreur : 3100 + + + + [12] + 200 OK + + + + [13] + PUT /xxx/{ID}/error + + + + [14] + 200 OK + + + + + [15] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + + [16] + POST/GET/PATCH/PUT /xxx + + + + [17] + 202 OK + + + + [18] + 202 OK + + + alt + [en cas d'erreur dans schémaB] + + + + [19] + PUT /xxx/{ID}/error + + + Codes d'erreur : 2xxx, 3xxx, 4xxx, 5xxx + + + + + [20] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + + [21] + PUT /xxx/{ID}/error + + + + [22] + 200 OK + + + + [23] + 200 OK + + + + [24] + PUT /xxx/{ID}/error + + + + [25] + 200 OK + + + + [26] + POST/GET/PATCH/PUT /xxx + + + + [27] + 200 OK + + + alt + [en cas d'erreur dans payeeDFSP] + + + + [28] + PUT /xxx/{ID}/error + + + en-tête destination : PayerDFSP + Codes d'erreur : 5xxx + + + + [29] + 200 OK + + + + + [30] + Recherche du proxy pour payerDFSP = Proxy AB + + + + [31] + PUT /xxx/{ID}/error + + + + + [32] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + + [33] + PUT /xxx/{ID}/error + + + + [34] + 200 OK + + + + [35] + 200 OK + + + + [36] + PUT /xxx/{ID}/error + + + + [37] + 200 OK + + diff --git a/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.plantuml b/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.plantuml index f29ce2212..b447143a5 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.plantuml +++ b/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.plantuml @@ -1,55 +1,55 @@ @startuml Interscheme-GETTransfer -title Interscheme - GET Transfers +title Inter-schéma — GET /transfers -participant "Payer DFSP" as payerDFSP -box Scheme A #LightBlue - participant "Mojaloop\nScheme A" as schemeA - participant "Proxy Cache\nScheme A" as pc_A +participant "DFSP payeur" as payerDFSP +box Schéma A #LightBlue + participant "Mojaloop\nSchéma A" as schemeA + participant "Cache proxy\nSchéma A" as pc_A end box participant "Proxy AB" as xnp -box Scheme B #d1e0c3 - participant "Mojaloop\nScheme B" as schemeB - participant "Proxy Cache\nScheme B" as pc_B +box Schéma B #d1e0c3 + participant "Mojaloop\nSchéma B" as schemeB + participant "Cache proxy\nSchéma B" as pc_B end box -participant "Payee DFS" as payeeDFSP +participant "DFSP bénéficiaire" as payeeDFSP autonumber 1 "[0]" payerDFSP ->> schemeA: GET /transfers/1234 note left -header - source: payerDFSP - destination: payeeDFSP -JWS signed by payerDFSP +en-tête + source : payerDFSP + destination : payeeDFSP +JWS signé par payerDFSP end note schemeA -->> payerDFSP: 202 OK -schemeA -> schemeA: Load transfer information +schemeA -> schemeA: Charger les informations du transfert schemeA->>payerDFSP: PUT /transfers/1234 note right -header - source: schemeB - destination: payerDFSP -JWS signed by schemeB +en-tête + source : schemeB + destination : payerDFSP +JWS signé par schémaB end note payerDFSP -->> schemeA: 200 OK payeeDFSP->>schemeB: GET /transfers/1234 note right -header - source: scheme A -JWS signed by schemeA +en-tête + source : scheme A +JWS signé par schémaA end note schemeB -->> payeeDFSP: 202 OK -schemeB -> schemeB: Load transfer informtaion\nand check if payeeDFSP is in scheme -schemeB->>payeeDFSP: Yes; return information\nPUT /transfers/1234 +schemeB -> schemeB: Charger les informations du transfert\net vérifier si payeeDFSP est dans le schéma +schemeB->>payeeDFSP: Oui ; renvoi des informations\nPUT /transfers/1234 note left -header - source: schemeB - destination: payeeDFSP -JWS signed by schemeB +en-tête + source : schemeB + destination : payeeDFSP +JWS signé par schémaB end note schemeB -->> payeeDFSP: 200 OK diff --git a/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.svg b/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.svg index d332a1cc5..bd40545e0 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.svg +++ b/docs/fr/product/features/Interscheme/Interscheme-GETTransfer.svg @@ -1 +1,131 @@ -Interscheme - GET TransfersScheme AScheme BPayer DFSPPayer DFSPMojaloopScheme AMojaloopScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABMojaloopScheme BMojaloopScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFS[1]GET /transfers/1234headersource: payerDFSPdestination: payeeDFSPJWS signed by payerDFSP[2]202 OK[3]Load transfer information[4]PUT /transfers/1234headersource: schemeBdestination: payerDFSPJWS signed by schemeB[5]200 OK[6]GET /transfers/1234headersource: scheme AJWS signed by schemeA[7]202 OK[8]Load transfer informtaionand check if payeeDFSP is in scheme[9]Yes; return informationPUT /transfers/1234headersource: schemeBdestination: payeeDFSPJWS signed by schemeB[10]200 OK \ No newline at end of file + + Inter-schéma — GET /transfers + + + Inter-schéma — GET /transfers + + Schéma A + + Schéma B + + + + + + + + + DFSP payeur + + DFSP payeur + + Mojaloop + Schéma A + + Mojaloop + Schéma A + + Cache proxy + Schéma A + + Cache proxy + Schéma A + + Proxy AB + + Proxy AB + + Mojaloop + Schéma B + + Mojaloop + Schéma B + + Cache proxy + Schéma B + + Cache proxy + Schéma B + + DFSP bénéficiaire + + DFSP bénéficiaire + + + + [1] + GET /transfers/1234 + + + en-tête + source : payerDFSP + destination : payeeDFSP + JWS signé par payerDFSP + + + + [2] + 202 OK + + + + + [3] + Charger les informations du transfert + + + + [4] + PUT /transfers/1234 + + + en-tête + source : schemeB + destination : payerDFSP + JWS signé par schémaB + + + + [5] + 200 OK + + + + [6] + GET /transfers/1234 + + + en-tête + source : scheme A + JWS signé par schémaA + + + + [7] + 202 OK + + + + + [8] + Charger les informations du transfert + et vérifier si payeeDFSP est dans le schéma + + + + [9] + Oui ; renvoi des informations + PUT /transfers/1234 + + + en-tête + source : schemeB + destination : payeeDFSP + JWS signé par schémaB + + + + [10] + 200 OK + + diff --git a/docs/fr/product/features/Interscheme/Interscheme-Happypath.plantuml b/docs/fr/product/features/Interscheme/Interscheme-Happypath.plantuml index 84e0b4ebe..eaed780da 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-Happypath.plantuml +++ b/docs/fr/product/features/Interscheme/Interscheme-Happypath.plantuml @@ -1,83 +1,83 @@ @startuml Interscheme-Happypath -title Interscheme - General Pattern +title Inter-schéma — schéma général -participant "Payer DFSP" as payerDFSP -box "Scheme A" #LightBlue - participant "Handler\nScheme A" as schemeA - participant "Proxy Cache\nScheme A" as pc_A +participant "DFSP payeur" as payerDFSP +box "Schéma A" #LightBlue + participant "Gestionnaire\nSchéma A" as schemeA + participant "Cache proxy\nSchéma A" as pc_A end box participant "Proxy AB" as xnp -box "Scheme B" #d1e0c3 - participant "Handler\nScheme B" as schemeB - participant "Proxy Cache\nScheme B" as pc_B +box "Schéma B" #d1e0c3 + participant "Gestionnaire\nSchéma B" as schemeB + participant "Cache proxy\nSchéma B" as pc_B end box -participant "Payee DFS" as payeeDFSP +participant "DFSP bénéficiaire" as payeeDFSP autonumber 1 "[0]" -== POST == +== Phase POST == payerDFSP ->> schemeA: POST /xxx note left -header - source: payerDFSP - destination: payeeDFSP -body +en-tête + source : payerDFSP + destination : payeeDFSP +corps {ID: 1234} end note -schemeA-->>payerDFSP: http 202 response -schemeA -> pc_A: Destination not in scheme:\n payeeDFSP has a proxy mapped\n need to send to 'Proxy AB' +schemeA-->>payerDFSP: réponse HTTP 202 +schemeA -> pc_A: Destination hors schéma :\n payeeDFSP a un proxy mappé\n envoyer vers « Proxy AB » schemeA ->> xnp: POST /xxx -xnp->xnp: Add header +xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note xnp ->> schemeB: POST /xxx note left -Message if forwarded to schemeB unmodified +Message transmis à schéma B sans modification end note schemeB -->> xnp: 202 OK xnp -->> schemeA: 202 OK schemeB ->> payeeDFSP: POST /xxx -payeeDFSP-->>schemeB: http 202 response +payeeDFSP-->>schemeB: réponse HTTP 202 -== GET == -payerDFSP -> schemeA: GET /xxx/{ID} \nwithout destination +== Phase GET == +payerDFSP -> schemeA: GET /xxx/{ID} \nsans destination note left - source: payerDFSP + source : payerDFSP end note -schemeA-->>payerDFSP: http 202 response +schemeA-->>payerDFSP: réponse HTTP 202 -schemeA->schemeA: lookup if ID result and triggers put +schemeA->schemeA: recherche du résultat par ID et déclenchement du PUT -payerDFSP -> schemeA: GET /xxx/{ID} \nwith destination +payerDFSP -> schemeA: GET /xxx/{ID} \navec destination note left - source: payerDFSP - destination: payeeDFSP + source : payerDFSP + destination : payeeDFSP end note -schemeA-->>payerDFSP: http 202 response +schemeA-->>payerDFSP: réponse HTTP 202 -schemeA -> pc_A: Destination not in scheme:\n payeeDFSP has a proxy mapped\n need to send to 'Proxy AB' +schemeA -> pc_A: Destination hors schéma :\n payeeDFSP a un proxy mappé\n envoyer vers « Proxy AB » schemeA ->> xnp: GET /xxx -xnp->xnp: Add header +xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note xnp ->> schemeB: GET /xxx note left -Message if forwarded to schemeB unmodified +Message transmis à schéma B sans modification end note schemeB -->> xnp: 202 OK xnp -->> schemeA: 202 OK schemeB ->> payeeDFSP: GET /xxx -payeeDFSP-->>schemeB: http 202 response +payeeDFSP-->>schemeB: réponse HTTP 202 -== PUT == +== Phase PUT == payeeDFSP -> schemeB: PUT /xxx @@ -85,22 +85,22 @@ note right source: payeeDFSP destination: payerDFSP end note -schemeB-->>payeeDFSP: http 200 response +schemeB-->>payeeDFSP: réponse HTTP 200 -schemeB -> pc_B: Destination not in scheme:\n payerDFSP has a proxy mapped\n need to send to 'Proxy AB' +schemeB -> pc_B: Destination hors schéma :\n payerDFSP a un proxy mappé\n envoyer vers « Proxy AB » schemeB -> xnp: PUT /xxx -xnp->xnp: Add header +xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note xnp -> schemeA: PUT /xxx note right -Message if forwarded to schemeA unmodified +Message transmis à schéma A sans modification end note schemeA -->> xnp: 200 OK xnp -->> schemeB: 200 OK schemeA -> payerDFSP: PUT /xxx -payerDFSP-->>schemeA: http 200 response +payerDFSP-->>schemeA: réponse HTTP 200 @enduml \ No newline at end of file diff --git a/docs/fr/product/features/Interscheme/Interscheme-Happypath.svg b/docs/fr/product/features/Interscheme/Interscheme-Happypath.svg index 2af53e645..0b2218090 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-Happypath.svg +++ b/docs/fr/product/features/Interscheme/Interscheme-Happypath.svg @@ -1 +1,273 @@ -Interscheme - General PatternScheme AScheme BPayer DFSPPayer DFSPHandlerScheme AHandlerScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABHandlerScheme BHandlerScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFSPOST[1]POST /xxxheadersource: payerDFSPdestination: payeeDFSPbody{ID: 1234}[2]http 202 response[3]Destination not in scheme:payeeDFSP has a proxy mappedneed to send to 'Proxy AB'[4]POST /xxx[5]Add headerfxpiop-proxy = "Proxy AB"[6]POST /xxxMessage if forwarded to schemeB unmodified[7]202 OK[8]202 OK[9]POST /xxx[10]http 202 responseGET[11]GET /xxx/{ID}without destinationsource: payerDFSP[12]http 202 response[13]lookup if ID result and triggers put[14]GET /xxx/{ID}with destinationsource: payerDFSPdestination: payeeDFSP[15]http 202 response[16]Destination not in scheme:payeeDFSP has a proxy mappedneed to send to 'Proxy AB'[17]GET /xxx[18]Add headerfxpiop-proxy = "Proxy AB"[19]GET /xxxMessage if forwarded to schemeB unmodified[20]202 OK[21]202 OK[22]GET /xxx[23]http 202 responsePUT[24]PUT /xxxsource: payeeDFSPdestination: payerDFSP[25]http 200 response[26]Destination not in scheme:payerDFSP has a proxy mappedneed to send to 'Proxy AB'[27]PUT /xxx[28]Add headerfxpiop-proxy = "Proxy AB"[29]PUT /xxxMessage if forwarded to schemeA unmodified[30]200 OK[31]200 OK[32]PUT /xxx[33]http 200 response \ No newline at end of file + + Inter-schéma — schéma général + + + Inter-schéma — schéma général + + Schéma A + + Schéma B + + + + + + + + + DFSP payeur + + DFSP payeur + + Gestionnaire + Schéma A + + Gestionnaire + Schéma A + + Cache proxy + Schéma A + + Cache proxy + Schéma A + + Proxy AB + + Proxy AB + + Gestionnaire + Schéma B + + Gestionnaire + Schéma B + + Cache proxy + Schéma B + + Cache proxy + Schéma B + + DFSP bénéficiaire + + DFSP bénéficiaire + + + + + Phase POST + + + + [1] + POST /xxx + + + en-tête + source : payerDFSP + destination : payeeDFSP + corps + {ID: 1234} + + + + [2] + réponse HTTP 202 + + + [3] + Destination hors schéma : + payeeDFSP a un proxy mappé + envoyer vers « Proxy AB » + + + + [4] + POST /xxx + + + + + [5] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + + [6] + POST /xxx + + + Message transmis à schéma B sans modification + + + + [7] + 202 OK + + + + [8] + 202 OK + + + + [9] + POST /xxx + + + + [10] + réponse HTTP 202 + + + + + Phase GET + + + [11] + GET /xxx/{ID} + sans destination + + + source : payerDFSP + + + + [12] + réponse HTTP 202 + + + + + [13] + recherche du résultat par ID et déclenchement du PUT + + + [14] + GET /xxx/{ID} + avec destination + + + source : payerDFSP + destination : payeeDFSP + + + + [15] + réponse HTTP 202 + + + [16] + Destination hors schéma : + payeeDFSP a un proxy mappé + envoyer vers « Proxy AB » + + + + [17] + GET /xxx + + + + + [18] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + + [19] + GET /xxx + + + Message transmis à schéma B sans modification + + + + [20] + 202 OK + + + + [21] + 202 OK + + + + [22] + GET /xxx + + + + [23] + réponse HTTP 202 + + + + + Phase PUT + + + [24] + PUT /xxx + + + source: payeeDFSP + destination: payerDFSP + + + + [25] + réponse HTTP 200 + + + [26] + Destination hors schéma : + payerDFSP a un proxy mappé + envoyer vers « Proxy AB » + + + [27] + PUT /xxx + + + + + [28] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + [29] + PUT /xxx + + + Message transmis à schéma A sans modification + + + + [30] + 200 OK + + + + [31] + 200 OK + + + [32] + PUT /xxx + + + + [33] + réponse HTTP 200 + + diff --git a/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.plantuml b/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.plantuml index 43daf9c05..cd3bc25c6 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.plantuml +++ b/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.plantuml @@ -1,44 +1,44 @@ @startuml Interscheme-OnDemandDiscovery -title Interscheme - On Demand Discovery +title Inter-schéma — découverte à la demande -participant "Payer DFSP" as payerDFSP -box "Scheme A" #LightBlue - participant "ALS\nScheme A" as ALS_A - participant "Proxy Cache\nScheme A" as pc_A - participant "Oracle\nScheme A" as Oracle_A +participant "DFSP payeur" as payerDFSP +box "Schéma A" #LightBlue + participant "ALS\nSchéma A" as ALS_A + participant "Cache proxy\nSchéma A" as pc_A + participant "Oracle\nSchéma A" as Oracle_A end box -participant "other Proxies" as dfspsA +participant "autres proxys" as dfspsA participant "Proxy AB" as xnp -box "Scheme B" #d1e0c3 - participant "ALS\nScheme B" as ALS_B - participant "Proxy Cache\nScheme B" as pc_B - participant "Oracle\nScheme B" as Oracle_B +box "Schéma B" #d1e0c3 + participant "ALS\nSchéma B" as ALS_B + participant "Cache proxy\nSchéma B" as pc_B + participant "Oracle\nSchéma B" as Oracle_B end box -participant "Payee DFS" as payeeDFSP +participant "DFSP bénéficiaire" as payeeDFSP autonumber 1 "[0]" payerDFSP ->> ALS_A: GET /parties/{Type}/{ID} note left - header source = payerDFSP + en-tête source = payerDFSP end note ALS_A -->> payerDFSP: 202 OK ALS_A-> Oracle_A: GET /participant/{ID} -alt if not found in Oracle +alt si introuvable dans Oracle -Oracle_A--> ALS_A: no dfsp found -ALS_A ->> ALS_A: Are there any proxies\n in Scheme A? - ALS_A ->> ALS_A: Cache Proxies that \nwill receive messages +Oracle_A--> ALS_A: aucun dfsp trouvé +ALS_A ->> ALS_A: Y a-t-il des proxys\n dans le schéma A ? + ALS_A ->> ALS_A: Mettre en cache les proxys\nqui recevront les messages note left SentToProxies[{ID}] = {['Proxy AB', 'Proxy CD', 'Proxy EF']} end note - loop for all Proxys in Scheme A and not source - alt if Proxy AB + loop pour chaque proxy du schéma A (hors source) + alt si Proxy AB ALS_A ->> xnp: GET /parties/{Type}/{ID} - xnp->xnp: Add header + xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note @@ -46,25 +46,25 @@ ALS_A ->> ALS_A: Are there any proxies\n in Scheme A? xnp ->> ALS_B: GET /parties/{Type}/{ID} ALS_B -->> xnp: 202 OK xnp -->> ALS_A: 202 OK - ALS_B -> pc_B: Source not in Scheme: \nfxpiop-proxy = "Proxy AB"\nAdd 'Payer DFSP' to\n 'Proxy AB' mapping - pc_B -> pc_B: Add new mapping \nto cache + ALS_B -> pc_B: Source hors schéma : \nfxpiop-proxy = "Proxy AB"\nAjouter « DFSP payeur » au\nmappage « Proxy AB » + pc_B -> pc_B: Ajouter un nouveau mappage\nau cache note left - Payer DFSP : Proxy AB + DFSP payeur : Proxy AB end note ALS_B-> Oracle_B: GET /participant/{ID} - Oracle_B--> ALS_B: dfps = payeeDFSP + Oracle_B--> ALS_B: dfsp = payeeDFSP ALS_B ->> payeeDFSP: GET /parties/{Type}/{ID} payeeDFSP -->> ALS_B: 202 OK payeeDFSP ->> ALS_B: PUT /parties/{ID} note right - header destination = payerDFSP + en-tête destination = payerDFSP source = payeeDFSP end note - ALS_B -->> payeeDFSP: 200 Ok - ALS_B -> pc_B: Lookup payerDFSP proxy + ALS_B -->> payeeDFSP: 200 OK + ALS_B -> pc_B: Recherche du proxy payerDFSP ALS_B ->> xnp: PUT /parties/{ID} - xnp->xnp: Add header + xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note @@ -72,44 +72,44 @@ ALS_A ->> ALS_A: Are there any proxies\n in Scheme A? xnp ->> ALS_A: PUT /parties/{ID} ALS_A -->> xnp: 200 OK xnp -->> ALS_B: 200 OK - ALS_A -> pc_A: Source not in Scheme: \nfxpiop-proxy = "Proxy AB"\nAdd 'Payee DFSP' to \n'Proxy AB' mapping - pc_A -> pc_A: New mapping\nCheck JWS \nsignature &\n Add to cache + ALS_A -> pc_A: Source hors schéma : \nfxpiop-proxy = "Proxy AB"\nAjouter « DFSP bénéficiaire » au\nmappage « Proxy AB » + pc_A -> pc_A: Nouveau mappage\nVérifier la signature JWS\net ajouter au cache note left - Payee DFSP : Proxy AB + DFSP bénéficiaire : Proxy AB end note - ALS_A -> Oracle_A: Update Oracle with mapping\n**POST /participants/{Type}/{ID}** \n{{"fspId": "Payee DFSP"}} - Oracle_A--> ALS_A: return + ALS_A -> Oracle_A: Mettre à jour Oracle avec le mappage\n**POST /participants/{Type}/{ID}** \n{{"fspId": "DFSP bénéficiaire"}} + Oracle_A--> ALS_A: retour ALS_A ->> payerDFSP: PUT /parties/{ID} payerDFSP -->> ALS_A: 200 OK - else if other Proxy in Scheme A + else si autre proxy dans le schéma A ALS_A ->> dfspsA: GET /parties/{Type}/{ID} dfspsA -->> ALS_A: 202 OK dfspsA ->> ALS_A: PUT /parties/{ID}/error ALS_A -->> dfspsA: 200 OK - ALS_A ->> ALS_A: Mark message as \nreceived from proxy + ALS_A ->> ALS_A: Marquer le message comme\nreçu du proxy note left - remove other Proxy from - list SentToProxies[{ID}] + retirer l'autre proxy de + liste SentToProxies[{ID}] end note - alt if SentToProxies[{ID}] is empty + alt si SentToProxies[{ID}] est vide ALS_A ->> payerDFSP: PUT /parties/{ID}/error note right - SentToProxies[{ID}] is empty + SentToProxies[{ID}] est vide end note payerDFSP -->> ALS_A: 200 OK end end end loop -else if found in Oracle +else si trouvé dans Oracle Oracle_A--> ALS_A: dfsp = payeeDFSP - ALS_A->ALS_A: Payee DFSP is \nnot in scheme A - ALS_A-> pc_A: Lookup proxy for\n Payee DFSP - alt if header source is a member of Scheme A - ALS_A->ALS_A: Add destination to header + ALS_A->ALS_A: Le DFSP bénéficiaire n'est\npas dans le schéma A + ALS_A-> pc_A: Recherche du proxy pour\nle DFSP bénéficiaire + alt si la source de l'en-tête est membre du schéma A + ALS_A->ALS_A: Ajouter la destination à l'en-tête note left - destination dfsp: Payee DFSP + dfsp destination : DFSP bénéficiaire end note ALS_A ->> xnp: GET /parties/{Type}/{ID} @@ -117,21 +117,21 @@ else if found in Oracle ALS_B -->> xnp: 202 OK xnp -->> ALS_A: 202 OK end - ALS_B->ALS_B: Forward to destination + ALS_B->ALS_B: Transférer vers la destination ALS_B ->> payeeDFSP: GET /parties/{Type}/{ID} payeeDFSP -->> ALS_B: 202 OK payeeDFSP ->> ALS_B: PUT /parties/{ID} note right - header destination = payerDFSP + en-tête destination = payerDFSP end note - ALS_B -->> payeeDFSP: 200 Ok - ALS_B -> pc_B: Lookup payerDFSP proxy + ALS_B -->> payeeDFSP: 200 OK + ALS_B -> pc_B: Recherche du proxy payerDFSP ALS_B ->> xnp: PUT /parties/{ID} xnp ->> ALS_A: PUT /parties/{ID} ALS_A -->> xnp: 200 OK xnp -->> ALS_B: 200 OK - ALS_A -> pc_A: Source not in Scheme: \nAdd 'Payee DFSP' to\n 'Proxy AB' mapping - pc_A -> pc_A: Got Mapping + ALS_A -> pc_A: Source hors schéma : \nAjouter « DFSP bénéficiaire » au\nmappage « Proxy AB » + pc_A -> pc_A: Mappage obtenu ALS_A ->> payerDFSP: PUT /parties/{ID} payerDFSP -->> ALS_A: 200 OK end diff --git a/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.svg b/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.svg index a73a08b38..d725826b2 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.svg +++ b/docs/fr/product/features/Interscheme/Interscheme-OnDemandDiscovery.svg @@ -1 +1,458 @@ -Interscheme - On Demand DiscoveryScheme AScheme BPayer DFSPPayer DFSPALSScheme AALSScheme AProxy CacheScheme AProxy CacheScheme AOracleScheme AOracleScheme Aother Proxiesother ProxiesProxy ABProxy ABALSScheme BALSScheme BProxy CacheScheme BProxy CacheScheme BOracleScheme BOracleScheme BPayee DFSPayee DFS[1]GET /parties/{Type}/{ID}header source = payerDFSP[2]202 OK[3]GET /participant/{ID}alt[if not found in Oracle][4]no dfsp found[5]Are there any proxiesin Scheme A?[6]Cache Proxies thatwill receive messagesSentToProxies[{ID}] ={['Proxy AB', 'Proxy CD', 'Proxy EF']}loop[for all Proxys in Scheme A and not source]alt[if Proxy AB][7]GET /parties/{Type}/{ID}[8]Add headerfxpiop-proxy = "Proxy AB"[9]GET /parties/{Type}/{ID}[10]202 OK[11]202 OK[12]Source not in Scheme:fxpiop-proxy = "Proxy AB"Add 'Payer DFSP' to'Proxy AB' mapping[13]Add new mappingto cachePayer DFSP : Proxy AB[14]GET /participant/{ID}[15]dfps = payeeDFSP[16]GET /parties/{Type}/{ID}[17]202 OK[18]PUT /parties/{ID}header destination = payerDFSPsource = payeeDFSP[19]200 Ok[20]Lookup payerDFSP proxy[21]PUT /parties/{ID}[22]Add headerfxpiop-proxy = "Proxy AB"[23]PUT /parties/{ID}[24]200 OK[25]200 OK[26]Source not in Scheme:fxpiop-proxy = "Proxy AB"Add 'Payee DFSP' to'Proxy AB' mapping[27]New mappingCheck JWSsignature &Add to cachePayee DFSP : Proxy AB[28]Update Oracle with mappingPOST /participants/{Type}/{ID} {{"fspId": "Payee DFSP"}}[29]return[30]PUT /parties/{ID}[31]200 OK[if other Proxy in Scheme A][32]GET /parties/{Type}/{ID}[33]202 OK[34]PUT /parties/{ID}/error[35]200 OK[36]Mark message asreceived from proxyremove other Proxy fromlist SentToProxies[{ID}]alt[if SentToProxies[{ID}] is empty][37]PUT /parties/{ID}/errorSentToProxies[{ID}] is empty[38]200 OK[if found in Oracle][39]dfsp = payeeDFSP[40]Payee DFSP isnot in scheme A[41]Lookup proxy forPayee DFSPalt[if header source is a member of Scheme A][42]Add destination to headerdestination dfsp: Payee DFSP[43]GET /parties/{Type}/{ID}[44]GET /parties/{Type}/{ID}[45]202 OK[46]202 OK[47]Forward to destination[48]GET /parties/{Type}/{ID}[49]202 OK[50]PUT /parties/{ID}header destination = payerDFSP[51]200 Ok[52]Lookup payerDFSP proxy[53]PUT /parties/{ID}[54]PUT /parties/{ID}[55]200 OK[56]200 OK[57]Source not in Scheme:Add 'Payee DFSP' to'Proxy AB' mapping[58]Got Mapping[59]PUT /parties/{ID}[60]200 OK \ No newline at end of file + + Inter-schéma — découverte à la demande + + + Inter-schéma — découverte à la demande + + Schéma A + + Schéma B + + + + + + + + + + + + + + + + + DFSP payeur + + DFSP payeur + + ALS + Schéma A + + ALS + Schéma A + + Cache proxy + Schéma A + + Cache proxy + Schéma A + + Oracle + Schéma A + + Oracle + Schéma A + + autres proxys + + autres proxys + + Proxy AB + + Proxy AB + + ALS + Schéma B + + ALS + Schéma B + + Cache proxy + Schéma B + + Cache proxy + Schéma B + + Oracle + Schéma B + + Oracle + Schéma B + + DFSP bénéficiaire + + DFSP bénéficiaire + + + + [1] + GET /parties/{Type}/{ID} + + + en-tête source = payerDFSP + + + + [2] + 202 OK + + + [3] + GET /participant/{ID} + + + alt + [si introuvable dans Oracle] + + + [4] + aucun dfsp trouvé + + + + + + [5] + Y a-t-il des proxys + dans le schéma A ? + + + + + + [6] + Mettre en cache les proxys + qui recevront les messages + + + SentToProxies[{ID}] = + {['Proxy AB', 'Proxy CD', 'Proxy EF']} + + + loop + [pour chaque proxy du schéma A (hors source)] + + + alt + [si Proxy AB] + + + + [7] + GET /parties/{Type}/{ID} + + + + + [8] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + + [9] + GET /parties/{Type}/{ID} + + + + [10] + 202 OK + + + + [11] + 202 OK + + + [12] + Source hors schéma : + fxpiop-proxy = "Proxy AB" + Ajouter « DFSP payeur » au + mappage « Proxy AB » + + + + + [13] + Ajouter un nouveau mappage + au cache + + + DFSP payeur : Proxy AB + + + [14] + GET /participant/{ID} + + + [15] + dfsp = payeeDFSP + + + + [16] + GET /parties/{Type}/{ID} + + + + [17] + 202 OK + + + + [18] + PUT /parties/{ID} + + + en-tête destination = payerDFSP + source = payeeDFSP + + + + [19] + 200 OK + + + [20] + Recherche du proxy payerDFSP + + + + [21] + PUT /parties/{ID} + + + + + [22] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + + [23] + PUT /parties/{ID} + + + + [24] + 200 OK + + + + [25] + 200 OK + + + [26] + Source hors schéma : + fxpiop-proxy = "Proxy AB" + Ajouter « DFSP bénéficiaire » au + mappage « Proxy AB » + + + + + [27] + Nouveau mappage + Vérifier la signature JWS + et ajouter au cache + + + DFSP bénéficiaire : Proxy AB + + + [28] + Mettre à jour Oracle avec le mappage + POST /participants/{Type}/{ID} +   + {{"fspId": "DFSP bénéficiaire"}} + + + [29] + retour + + + + [30] + PUT /parties/{ID} + + + + [31] + 200 OK + + [si autre proxy dans le schéma A] + + + + [32] + GET /parties/{Type}/{ID} + + + + [33] + 202 OK + + + + [34] + PUT /parties/{ID}/error + + + + [35] + 200 OK + + + + + + [36] + Marquer le message comme + reçu du proxy + + + retirer l'autre proxy de + liste SentToProxies[{ID}] + + + alt + [si SentToProxies[{ID}] est vide] + + + + [37] + PUT /parties/{ID}/error + + + SentToProxies[{ID}] est vide + + + + [38] + 200 OK + + [si trouvé dans Oracle] + + + [39] + dfsp = payeeDFSP + + + + + [40] + Le DFSP bénéficiaire n'est + pas dans le schéma A + + + [41] + Recherche du proxy pour + le DFSP bénéficiaire + + + alt + [si la source de l'en-tête est membre du schéma A] + + + + + [42] + Ajouter la destination à l'en-tête + + + dfsp destination : DFSP bénéficiaire + + + + [43] + GET /parties/{Type}/{ID} + + + + [44] + GET /parties/{Type}/{ID} + + + + [45] + 202 OK + + + + [46] + 202 OK + + + + + [47] + Transférer vers la destination + + + + [48] + GET /parties/{Type}/{ID} + + + + [49] + 202 OK + + + + [50] + PUT /parties/{ID} + + + en-tête destination = payerDFSP + + + + [51] + 200 OK + + + [52] + Recherche du proxy payerDFSP + + + + [53] + PUT /parties/{ID} + + + + [54] + PUT /parties/{ID} + + + + [55] + 200 OK + + + + [56] + 200 OK + + + [57] + Source hors schéma : + Ajouter « DFSP bénéficiaire » au + mappage « Proxy AB » + + + + + [58] + Mappage obtenu + + + + [59] + PUT /parties/{ID} + + + + [60] + 200 OK + + diff --git a/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.plantuml b/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.plantuml index 934c98a7d..a503c3a98 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.plantuml +++ b/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.plantuml @@ -1,87 +1,87 @@ @startuml Interscheme-StalePartyIdentifierCache -title Stale Party Identifier Cache +title Cache d'identifiants de partie obsolètes -participant "Payer DFSP" as payerDFSP -box "Scheme A" #LightBlue - participant "ALS\nScheme A" as ALS_A - participant "Oracle\nScheme A" as Oracle_A - participant "Proxy Cache\nScheme A" as pc_A +participant "DFSP payeur" as payerDFSP +box "Schéma A" #LightBlue + participant "ALS\nSchéma A" as ALS_A + participant "Oracle\nSchéma A" as Oracle_A + participant "Cache proxy\nSchéma A" as pc_A end box participant "Proxy AB" as xnp -box "Scheme B" #d1e0c3 - participant "ALS\nScheme B" as ALS_B - participant "Oracle\nScheme A" as Oracle_B - participant "Proxy Cache\nScheme B" as pc_B +box "Schéma B" #d1e0c3 + participant "ALS\nSchéma B" as ALS_B + participant "Oracle\nSchéma B" as Oracle_B + participant "Cache proxy\nSchéma B" as pc_B end box -participant "Payee DFS" as payeeDFSP +participant "DFSP bénéficiaire" as payeeDFSP autonumber 1 "[0]" payerDFSP ->> ALS_A: **GET** /parties/{Type}/{ID} note left - header source = payerDFSP + en-tête source = payerDFSP end note ALS_A-> Oracle_A: **GET** /participant/{ID} - Oracle_A--> ALS_A: found DFSP = payeeDFSP - ALS_A ->> ALS_A: DFSP not in scheme - ALS_A -> pc_A: Who is payee DFSP's proxy? - alt proxy representative not found - pc_A --> ALS_A: Proxy not found - ALS_A -> Oracle_A: Remove mapping in Oracle\n **DELETE** \participants\{Type}\{ID} + Oracle_A--> ALS_A: DFSP trouvé = payeeDFSP + ALS_A ->> ALS_A: DFSP absent du schéma + ALS_A -> pc_A: Quel est le proxy du DFSP bénéficiaire ? + alt représentant du proxy introuvable + pc_A --> ALS_A: Proxy introuvable + ALS_A -> Oracle_A: Supprimer le mappage dans Oracle\n **DELETE** \participants\{Type}\{ID} note left - **Self heal** if proxy - reference is not found + **Autoréparation** si le proxy + de référence est introuvable end note - ALS_A ->> ALS_A: Restart the ALS get parties process + ALS_A ->> ALS_A: Redémarrer le processus ALS get parties else - pc_A --> ALS_A: forward to Proxy AB + pc_A --> ALS_A: transmettre vers Proxy AB end ALS_A ->> xnp: **GET** /parties/{Type}/{ID} - xnp->xnp: Add header + xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note xnp ->> ALS_B: **GET** /parties/{Type}/{ID} - ALS_B ->> pc_B: Source not in Scheme: \nfxpiop-proxy = "Proxy AB"\nAdd 'Payer DFSP' to 'Proxy AB' mapping -alt not MVP - pc_B -> pc_B: Check JWS signature + ALS_B ->> pc_B: Source hors schéma : \nfxpiop-proxy = "Proxy AB"\nAjouter « DFSP payeur » au mappage « Proxy AB » +alt hors périmètre MVP + pc_B -> pc_B: Vérifier la signature JWS end - pc_B -> pc_B: Add new mapping to cache + pc_B -> pc_B: Ajouter un nouveau mappage au cache note left -Payer DFSP : Proxy AB +DFSP payeur : Proxy AB end note ALS_B-> Oracle_B: **GET** /participant/{ID} - Oracle_B--> ALS_B: dfps = payeeDFSP - alt if dfsp is a member of Scheme B + Oracle_B--> ALS_B: dfsp = payeeDFSP + alt si le dfsp est membre du schéma B ALS_B ->> payeeDFSP: **GET** /parties/{Type}/{ID} payeeDFSP ->> ALS_B: **PUT** /parties/{ID}/error note right - header desitination = payerDFSP + en-tête destination = payerDFSP end note end - ALS_B -> pc_B: Lookup payerDFSP proxy + ALS_B -> pc_B: Recherche du proxy payerDFSP ALS_B ->> xnp: **PUT** /parties/{ID}/error - xnp->xnp: Add header + xnp->xnp: Ajouter l'en-tête note left fxpiop-proxy = "Proxy AB" end note xnp ->> ALS_A: **PUT** /parties/{ID}/error - alt message from proxy & error & no proxy message cache + alt message du proxy et erreur et pas de cache de message proxy note left ALS_A - **Self heal** if error in routing + **Autoréparation** en cas d'erreur de routage fxpiop-proxy = "Proxy AB" PUT /parties error SentToProxies[{ID}] list undefined end note - ALS_A -> Oracle_A: Remove mapping in Oracle\n **DELETE** \participants\{Type}\{ID} + ALS_A -> Oracle_A: Supprimer le mappage dans Oracle\n **DELETE** \participants\{Type}\{ID} ALS_A ->> payerDFSP: **PUT** /parties/{ID}/error note right {ErrorCode: "2003"} - (Service Unavailable) + (Service indisponible) end note else ALS_A->>payerDFSP: **PUT** /parties/{ID}/error diff --git a/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.svg b/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.svg index cd5ae6924..37e3c97c4 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.svg +++ b/docs/fr/product/features/Interscheme/Interscheme-StalePartyIdentifierCache.svg @@ -1 +1,268 @@ -Stale Party Identifier CacheScheme AScheme BPayer DFSPPayer DFSPALSScheme AALSScheme AOracleScheme AOracleScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABALSScheme BALSScheme BOracleScheme AOracleScheme AProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFS[1]GET/parties/{Type}/{ID}header source = payerDFSP[2]GET/participant/{ID}[3]found DFSP = payeeDFSP[4]DFSP not in scheme[5]Who is payee DFSP's proxy?alt[proxy representative not found][6]Proxy not found[7]Remove mapping in Oracle DELETE\participants\{Type}\{ID}Self healif proxyreference is not found[8]Restart the ALS get parties process[9]forward to Proxy AB[10]GET/parties/{Type}/{ID}[11]Add headerfxpiop-proxy = "Proxy AB"[12]GET/parties/{Type}/{ID}[13]Source not in Scheme:fxpiop-proxy = "Proxy AB"Add 'Payer DFSP' to 'Proxy AB' mappingalt[not MVP][14]Check JWS signature[15]Add new mapping to cachePayer DFSP : Proxy AB[16]GET/participant/{ID}[17]dfps = payeeDFSPalt[if dfsp is a member of Scheme B][18]GET/parties/{Type}/{ID}[19]PUT/parties/{ID}/errorheader desitination = payerDFSP[20]Lookup payerDFSP proxy[21]PUT/parties/{ID}/error[22]Add headerfxpiop-proxy = "Proxy AB"[23]PUT/parties/{ID}/erroralt[message from proxy & error & no proxy message cache]Self healif error in routingfxpiop-proxy = "Proxy AB"PUT /parties errorSentToProxies[{ID}] list undefined[24]Remove mapping in Oracle DELETE\participants\{Type}\{ID}[25]PUT/parties/{ID}/error{ErrorCode: "2003"}(Service Unavailable)[26]PUT/parties/{ID}/error \ No newline at end of file + + Cache d'identifiants de partie obsolètes + + + Cache d'identifiants de partie obsolètes + + Schéma A + + Schéma B + + + + + + + + + + + + + + + DFSP payeur + + DFSP payeur + + ALS + Schéma A + + ALS + Schéma A + + Oracle + Schéma A + + Oracle + Schéma A + + Cache proxy + Schéma A + + Cache proxy + Schéma A + + Proxy AB + + Proxy AB + + ALS + Schéma B + + ALS + Schéma B + + Oracle + Schéma B + + Oracle + Schéma B + + Cache proxy + Schéma B + + Cache proxy + Schéma B + + DFSP bénéficiaire + + DFSP bénéficiaire + + + + [1] + GET + /parties/{Type}/{ID} + + + en-tête source = payerDFSP + + + [2] + GET + /participant/{ID} + + + [3] + DFSP trouvé = payeeDFSP + + + + + + [4] + DFSP absent du schéma + + + [5] + Quel est le proxy du DFSP bénéficiaire ? + + + alt + [représentant du proxy introuvable] + + + [6] + Proxy introuvable + + + [7] + Supprimer le mappage dans Oracle +   + DELETE + \participants\{Type}\{ID} + + + Autoréparation + si le proxy + de référence est introuvable + + + + + + [8] + Redémarrer le processus ALS get parties + + + + [9] + transmettre vers Proxy AB + + + + [10] + GET + /parties/{Type}/{ID} + + + + + [11] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + + [12] + GET + /parties/{Type}/{ID} + + + + [13] + Source hors schéma : + fxpiop-proxy = "Proxy AB" + Ajouter « DFSP payeur » au mappage « Proxy AB » + + + alt + [hors périmètre MVP] + + + + + [14] + Vérifier la signature JWS + + + + + [15] + Ajouter un nouveau mappage au cache + + + DFSP payeur : Proxy AB + + + [16] + GET + /participant/{ID} + + + [17] + dfsp = payeeDFSP + + + alt + [si le dfsp est membre du schéma B] + + + + [18] + GET + /parties/{Type}/{ID} + + + + [19] + PUT + /parties/{ID}/error + + + en-tête destination = payerDFSP + + + [20] + Recherche du proxy payerDFSP + + + + [21] + PUT + /parties/{ID}/error + + + + + [22] + Ajouter l'en-tête + + + fxpiop-proxy = "Proxy AB" + + + + [23] + PUT + /parties/{ID}/error + + + alt + [message du proxy et erreur et pas de cache de message proxy] + + + Autoréparation + en cas d'erreur de routage + fxpiop-proxy = "Proxy AB" + PUT /parties error + SentToProxies[{ID}] list undefined + + + [24] + Supprimer le mappage dans Oracle +   + DELETE + \participants\{Type}\{ID} + + + + [25] + PUT + /parties/{ID}/error + + + {ErrorCode: "2003"} + (Service indisponible) + + + + + [26] + PUT + /parties/{ID}/error + + diff --git a/docs/fr/product/features/Interscheme/Interscheme-Transfer.plantuml b/docs/fr/product/features/Interscheme/Interscheme-Transfer.plantuml index 9fda3da00..6878fa4ad 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-Transfer.plantuml +++ b/docs/fr/product/features/Interscheme/Interscheme-Transfer.plantuml @@ -1,79 +1,79 @@ @startuml Interscheme-Transfer -title Interscheme - Transfer +title Inter-schéma — transfert -participant "Payer DFSP" as payerDFSP -box Scheme A #LightBlue - participant "Mojaloop\nScheme A" as schemeA - participant "Proxy Cache\nScheme A" as pc_A +participant "DFSP payeur" as payerDFSP +box Schéma A #LightBlue + participant "Mojaloop\nSchéma A" as schemeA + participant "Cache proxy\nSchéma A" as pc_A end box participant "Proxy AB" as xnp -box Scheme B #d1e0c3 - participant "Mojaloop\nScheme B" as schemeB - participant "Proxy Cache\nScheme B" as pc_B +box Schéma B #d1e0c3 + participant "Mojaloop\nSchéma B" as schemeB + participant "Cache proxy\nSchéma B" as pc_B end box -participant "Payee DFS" as payeeDFSP +participant "DFSP bénéficiaire" as payeeDFSP autonumber 1 "[0]" payerDFSP ->> schemeA: POST /transfers note left -header - source: payerDFSP - destination: payeeDFSP -JWS signed by payerDFSP -body +en-tête + source : payerDFSP + destination : payeeDFSP +JWS signé par payerDFSP +corps transferId: 1234 end note schemeA -->> payerDFSP: 202 OK -schemeA -> schemeA: Payer DFSP\n - Checks limits\n - Updates position -schemeA -> pc_A: Destination not in Scheme\nLookup proxy for payeeDFSP = Proxy AB +schemeA -> schemeA: DFSP payeur\n - Contrôle des limites\n - Mise à jour de la position +schemeA -> pc_A: Destination hors schéma\nRecherche du proxy pour payeeDFSP = Proxy AB schemeA ->> xnp: POST /transfers xnp ->> schemeB: POST /transfers note left -header - source: payerDFSP - destination: payeeDFSP +en-tête + source : payerDFSP + destination : payeeDFSP fxpiop-proxy: proxyAB -JWS signed by payerDFSP -body +JWS signé par payerDFSP +corps transferId: 1234 end note schemeB -->> xnp: 202 OK xnp -->> schemeA: 202 OK -schemeA -> schemeA: Disable timeout +schemeA -> schemeA: Désactiver le délai d'expiration -schemeB -> schemeB: Proxy AB\n **- No limit check**\n - Updates position +schemeB -> schemeB: Proxy AB\n **- Pas de contrôle de limite**\n - Mise à jour de la position schemeB->>payeeDFSP: POST /transfers note right -Checks JWS signed by payerDFSP +Vérifie le JWS signé par payerDFSP end note payeeDFSP->>schemeB: PUT /transfers \n{fulfilment: "xyz", transferState: "RESERVED"} note right -header - source: payeeDFSP - destination: payerDFSP -JWS signed by payeeDFSP +en-tête + source : payeeDFSP + destination : payerDFSP +JWS signé par payeeDFSP end note -schemeB -> schemeB: Payer DFSP\n - Updates position -schemeB -> pc_B: Lookup proxy for payerDFSP = Proxy AB +schemeB -> schemeB: DFSP payeur\n - Mise à jour de la position +schemeB -> pc_B: Recherche du proxy pour payerDFSP = Proxy AB schemeB->>xnp: PUT /transfers xnp->>schemeA: PUT /transfers note right -header - source: payeeDFSP - destination: payerDFSP +en-tête + source : payeeDFSP + destination : payerDFSP fxpiop-proxy: proxyAB -JWS signed by payeeDFSP +JWS signé par payeeDFSP end note schemeA-->>xnp: 200 OK xnp-->>schemeB: 200 OK schemeB->>payeeDFSP: PATCH /transfers \n{transferState: "COMMITTED"} payeeDFSP-->>schemeB: 200 OK -schemeA -> schemeA: NX Proxy\n - Updates position +schemeA -> schemeA: Proxy NX\n - Mise à jour de la position schemeA->>payerDFSP: PUT /transfers note left -Checks JWS signed by payeeDFSP +Vérifie le JWS signé par payeeDFSP end note payerDFSP -->> schemeA: 200 OK diff --git a/docs/fr/product/features/Interscheme/Interscheme-Transfer.svg b/docs/fr/product/features/Interscheme/Interscheme-Transfer.svg index 65bb79a94..a6608f2f5 100644 --- a/docs/fr/product/features/Interscheme/Interscheme-Transfer.svg +++ b/docs/fr/product/features/Interscheme/Interscheme-Transfer.svg @@ -1 +1,218 @@ -Interscheme - TransferScheme AScheme BPayer DFSPPayer DFSPMojaloopScheme AMojaloopScheme AProxy CacheScheme AProxy CacheScheme AProxy ABProxy ABMojaloopScheme BMojaloopScheme BProxy CacheScheme BProxy CacheScheme BPayee DFSPayee DFS[1]POST /transfersheadersource: payerDFSPdestination: payeeDFSPJWS signed by payerDFSPbodytransferId: 1234[2]202 OK[3]Payer DFSP- Checks limits- Updates position[4]Destination not in SchemeLookup proxy for payeeDFSP = Proxy AB[5]POST /transfers[6]POST /transfersheadersource: payerDFSPdestination: payeeDFSPfxpiop-proxy: proxyABJWS signed by payerDFSPbodytransferId: 1234[7]202 OK[8]202 OK[9]Disable timeout[10]Proxy AB - No limit check- Updates position[11]POST /transfersChecks JWS signed by payerDFSP[12]PUT /transfers{fulfilment: "xyz", transferState: "RESERVED"}headersource: payeeDFSPdestination: payerDFSPJWS signed by payeeDFSP[13]Payer DFSP- Updates position[14]Lookup proxy for payerDFSP = Proxy AB[15]PUT /transfers[16]PUT /transfersheadersource: payeeDFSPdestination: payerDFSPfxpiop-proxy: proxyABJWS signed by payeeDFSP[17]200 OK[18]200 OK[19]PATCH /transfers{transferState: "COMMITTED"}[20]200 OK[21]NX Proxy- Updates position[22]PUT /transfersChecks JWS signed by payeeDFSP[23]200 OK \ No newline at end of file + + Inter-schéma — transfert + + + Inter-schéma — transfert + + Schéma A + + Schéma B + + + + + + + + + DFSP payeur + + DFSP payeur + + Mojaloop + Schéma A + + Mojaloop + Schéma A + + Cache proxy + Schéma A + + Cache proxy + Schéma A + + Proxy AB + + Proxy AB + + Mojaloop + Schéma B + + Mojaloop + Schéma B + + Cache proxy + Schéma B + + Cache proxy + Schéma B + + DFSP bénéficiaire + + DFSP bénéficiaire + + + + [1] + POST /transfers + + + en-tête + source : payerDFSP + destination : payeeDFSP + JWS signé par payerDFSP + corps + transferId: 1234 + + + + [2] + 202 OK + + + + + [3] + DFSP payeur + - Contrôle des limites + - Mise à jour de la position + + + [4] + Destination hors schéma + Recherche du proxy pour payeeDFSP = Proxy AB + + + + [5] + POST /transfers + + + + [6] + POST /transfers + + + en-tête + source : payerDFSP + destination : payeeDFSP + fxpiop-proxy: proxyAB + JWS signé par payerDFSP + corps + transferId: 1234 + + + + [7] + 202 OK + + + + [8] + 202 OK + + + + + [9] + Désactiver le délai d'expiration + + + + + [10] + Proxy AB +   + - Pas de contrôle de limite + - Mise à jour de la position + + + + [11] + POST /transfers + + + Vérifie le JWS signé par payerDFSP + + + + [12] + PUT /transfers + {fulfilment: "xyz", transferState: "RESERVED"} + + + en-tête + source : payeeDFSP + destination : payerDFSP + JWS signé par payeeDFSP + + + + + [13] + DFSP payeur + - Mise à jour de la position + + + [14] + Recherche du proxy pour payerDFSP = Proxy AB + + + + [15] + PUT /transfers + + + + [16] + PUT /transfers + + + en-tête + source : payeeDFSP + destination : payerDFSP + fxpiop-proxy: proxyAB + JWS signé par payeeDFSP + + + + [17] + 200 OK + + + + [18] + 200 OK + + + + [19] + PATCH /transfers + {transferState: "COMMITTED"} + + + + [20] + 200 OK + + + + + [21] + Proxy NX + - Mise à jour de la position + + + + [22] + PUT /transfers + + + Vérifie le JWS signé par payeeDFSP + + + + [23] + 200 OK + + diff --git a/docs/fr/product/features/Interscheme/SettingUpProxys.plantuml b/docs/fr/product/features/Interscheme/SettingUpProxys.plantuml index 4d1ddb131..d19ab0936 100644 --- a/docs/fr/product/features/Interscheme/SettingUpProxys.plantuml +++ b/docs/fr/product/features/Interscheme/SettingUpProxys.plantuml @@ -1,14 +1,14 @@ @startuml SettingUpProxys -title Central Ledger API / Admin API +title API du grand livre central / API d'administration -participant "Onboarding Script" as script -participant "Mojaloop\nScheme A" as schemeA -participant "XN Proxy" as xnp -participant "Mojaloop\nScheme B" as schemeB +participant "Script d'intégration" as script +participant "Mojaloop\nSchéma A" as schemeA +participant "Proxy XN" as xnp +participant "Mojaloop\nSchéma B" as schemeB autonumber 1 "[0]" -== Create Participant Types == +== Création des types de participants == script -> schemeA: POST /participants note left diff --git a/docs/fr/product/features/Interscheme/SettingUpProxys.svg b/docs/fr/product/features/Interscheme/SettingUpProxys.svg index f29814093..567d67523 100644 --- a/docs/fr/product/features/Interscheme/SettingUpProxys.svg +++ b/docs/fr/product/features/Interscheme/SettingUpProxys.svg @@ -1 +1,60 @@ -Central Ledger API / Admin APIOnboarding ScriptOnboarding ScriptMojaloopScheme AMojaloopScheme AXN ProxyXN ProxyMojaloopScheme BMojaloopScheme BCreate Participant Types[1]POST /participants{"name": "XN Proxy","currency": "USD",  "isProxy": true}[2]POST /participants{"name": "XN Proxy","currency": "USD",  "isProxy": true} \ No newline at end of file + + API du grand livre central / API d'administration + + + API du grand livre central / API d'administration + + + + + + Script d'intégration + + Script d'intégration + + Mojaloop + Schéma A + + Mojaloop + Schéma A + + Proxy XN + + Proxy XN + + Mojaloop + Schéma B + + Mojaloop + Schéma B + + + + + Création des types de participants + + + [1] + POST /participants + + + { + "name": "XN Proxy", + "currency": "USD", +    + "isProxy": true + } + + + [2] + POST /participants + + + { + "name": "XN Proxy", + "currency": "USD", +    + "isProxy": true + } + + diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.plantuml index 175ce5d06..d79b2330f 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.plantuml +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.plantuml @@ -1,17 +1,17 @@ @startuml -Title Discovery ISO 20022 Message Flow -participant PayerDFSP as "Payer DFSP" +Title Accord (devis) — flux de messages ISO 20022 +participant PayerDFSP as "DFSP payeur" participant Mojaloop as "Mojaloop" -participant PayeeDFSP as "Payee DFSP" +participant PayeeDFSP as "DFSP bénéficiaire" autonumber PayerDFSP -> Mojaloop: POST /quotes note left **pacs.081.001.01** -**Financial Institution to Financial Institution** -**Customer Credit Transfer Quote Request** +**D'une institution financière à une autre** +**Demande de devis de transfert de crédit client** { "GrpHdr": { "MsgId": "01JBVM19DJQ96BS9X6VA5AMW2Y", @@ -39,13 +39,13 @@ note left } end note Mojaloop -> PayeeDFSP: POST /quotes -PayeeDFSP -> PayeeDFSP: Check to see if Payee can receive the payment. -alt if Payee can receive the payment +PayeeDFSP -> PayeeDFSP: Vérifier si le bénéficiaire peut recevoir le paiement. +alt si le bénéficiaire peut recevoir le paiement PayeeDFSP -> Mojaloop: PUT /quotes/{ID} note right **pacs.082.001.01** -**Financial Institution to Financial Institution** -**Customer Credit Transfer Quote Response** +**D'une institution financière à une autre** +**Réponse de devis de transfert de crédit client** "GrpHdr": { "MsgId": "01JBVM19SPQAQV9EEP0QC1RNAD", "CreDtTm": "2024-11-04T12:57:42.455Z", @@ -82,8 +82,8 @@ else PayeeDFSP -> Mojaloop: PUT/quotes/{ID}/error note right **pacs.002.001.15** -**Financial Institution to Financial Institution** -**Payment Status Report** +**D'une institution financière à une autre** +**Rapport d'état de paiement** "GrpHdr": { "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", "CreDtTm":"2024-11-04T12:57:45.228Z"}, diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.svg index bce7b2a4e..f8544ea5d 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.svg +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Agreement.svg @@ -1 +1,133 @@ -Discovery ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopPayee DFSPPayee DFSP1POST /quotespacs.081.001.01Financial Institution to Financial Institution Customer Credit Transfer Quote Request{"GrpHdr": {"MsgId": "01JBVM19DJQ96BS9X6VA5AMW2Y","CreDtTm": "2024-11-04T12:57:42.066Z","NbOfTxs": "1","PmtInstrXpryDtTm": "2024-11-04T12:58:42.063Z","SttlmInf": { "SttlmMtd": "CLRG" }},"CdtTrfTxInf": {"PmtId": {"TxId": "01JBVM19DFKNRWC21FGJNTHRAT","EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF"},"Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" },"Id": "16665551002" }}}},"CdtrAgt": { "FinInstnId": { "Othr": { "Id": "test-mwk-dfsp" }}},"Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" },"Id": "16135551001" }}},"Name": "Joe Blogs"},"DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp" }}},"IntrBkSttlmAmt": {"Ccy": "MWK","ActiveCurrencyAndAmount": "1080"},"Purp": { "Prtry": "TRANSFER"},"ChrgBr": "CRED"}}2POST /quotes3Check to see if Payee can receive the payment.alt[if Payee can receive the payment]4PUT /quotes/{ID}pacs.082.001.01Financial Institution to Financial Institution Customer Credit Transfer Quote Response"GrpHdr": {"MsgId": "01JBVM19SPQAQV9EEP0QC1RNAD","CreDtTm": "2024-11-04T12:57:42.455Z","NbOfTxs": "1","SttlmInf": { "SttlmMtd": "CLRG" },"PmtInstrXpryDtTm": "2024-11-04T12:58:42.450Z"},"CdtTrfTxInf": { "PmtId": { "TxId": "01JBVM19DFKNRWC21FGJNTHRAT" },"Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" },"Id": "16135551001"} } },"Name": "Payer Joe" },"DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp"} } },"Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" },"Id": "16665551002"} } },"CdtrAgt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"} } },"ChrgBr": "CRED","IntrBkSttlmAmt": {"Ccy": "MWK","ActiveCurrencyAndAmount": "1080" },"InstdAmt": {"Ccy": "MWK","ActiveOrHistoricCurrencyAndAmount": "1080" },"ChrgsInf": {"Amt": { "Ccy": "MWK","ActiveOrHistoricCurrencyAndAmount": "0" },"Agt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"} } } },"VrfctnOfTerms": { "IlpV4PrepPacket": "DIICzQAAAA..." } }}5PUT/quotes/{ID}6PUT/quotes/{ID}/errorpacs.002.001.15Financial Institution to Financial Institution Payment Status Report"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}}7PUT/quotes/{ID}/error \ No newline at end of file + + Accord (devis) — flux de messages ISO 20022 + + + Accord (devis) — flux de messages ISO 20022 + + + + + + DFSP payeur + + DFSP payeur + + Mojaloop + + Mojaloop + + DFSP bénéficiaire + + DFSP bénéficiaire + + + 1 + POST /quotes + + + pacs.081.001.01 + D'une institution financière à une autre +   + Demande de devis de transfert de crédit client + { + "GrpHdr": { + "MsgId": "01JBVM19DJQ96BS9X6VA5AMW2Y", + "CreDtTm": "2024-11-04T12:57:42.066Z", + "NbOfTxs": "1", + "PmtInstrXpryDtTm": "2024-11-04T12:58:42.063Z", + "SttlmInf": { "SttlmMtd": "CLRG" } + }, + "CdtTrfTxInf": { + "PmtId": { + "TxId": "01JBVM19DFKNRWC21FGJNTHRAT", + "EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF"}, + "Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16665551002" }}}}, + "CdtrAgt": { "FinInstnId": { "Othr": { "Id": "test-mwk-dfsp" }}}, + "Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16135551001" }}}, + "Name": "Joe Blogs"}, + "DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp" }}}, + "IntrBkSttlmAmt": { + "Ccy": "MWK", + "ActiveCurrencyAndAmount": "1080"}, + "Purp": { "Prtry": "TRANSFER"}, + "ChrgBr": "CRED"} + } + + + 2 + POST /quotes + + + + + 3 + Vérifier si le bénéficiaire peut recevoir le paiement. + + + alt + [si le bénéficiaire peut recevoir le paiement] + + + 4 + PUT /quotes/{ID} + + + pacs.082.001.01 + D'une institution financière à une autre +   + Réponse de devis de transfert de crédit client + "GrpHdr": { + "MsgId": "01JBVM19SPQAQV9EEP0QC1RNAD", + "CreDtTm": "2024-11-04T12:57:42.455Z", + "NbOfTxs": "1", + "SttlmInf": { "SttlmMtd": "CLRG" }, + "PmtInstrXpryDtTm": "2024-11-04T12:58:42.450Z" + }, + "CdtTrfTxInf": { "PmtId": { "TxId": "01JBVM19DFKNRWC21FGJNTHRAT" }, + "Dbtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16135551001"} } }, + "Name": "Payer Joe" }, + "DbtrAgt": { "FinInstnId": { "Othr": { "Id": "payer-dfsp"} } }, + "Cdtr": { "Id": { "PrvtId": { "Othr": { "SchmeNm": { "Prtry": "MSISDN" }, + "Id": "16665551002"} } }, + "CdtrAgt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"} } }, + "ChrgBr": "CRED", + "IntrBkSttlmAmt": { + "Ccy": "MWK", + "ActiveCurrencyAndAmount": "1080" }, + "InstdAmt": { + "Ccy": "MWK", + "ActiveOrHistoricCurrencyAndAmount": "1080" }, + "ChrgsInf": { + "Amt": { "Ccy": "MWK", + "ActiveOrHistoricCurrencyAndAmount": "0" }, + "Agt": { "FinInstnId": { "Othr": { "Id": "payee-dfsp"} } } }, + "VrfctnOfTerms": { "IlpV4PrepPacket": "DIICzQAAAA..." } } + } + + + 5 + PUT/quotes/{ID} + + + + 6 + PUT/quotes/{ID}/error + + + pacs.002.001.15 + D'une institution financière à une autre +   + Rapport d'état de paiement + "GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, + "TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} + + + 7 + PUT/quotes/{ID}/error + + diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.plantuml index f41bee1ce..40a1991ab 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.plantuml +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.plantuml @@ -1,16 +1,16 @@ @startuml -Title Agreement phase on providing liquidity ISO 20022 Message Flow -participant PayerDFSP as "Payer DFSP" +Title Phase d'accord sur l'apport de liquidité — flux de messages ISO 20022 +participant PayerDFSP as "DFSP payeur" participant Mojaloop as "Mojaloop" -participant FXP as "Foreign Exchange Provider" +participant FXP as "Fournisseur de change" autonumber PayerDFSP -> Mojaloop: POST /fxQuotes note left **pacs.091.001.01** -**Financial Institution Credit Transfer Quote Request** +**Demande de devis de transfert de crédit interinstitutions** "GrpHdr": { "MsgId": "01JBVM16V3Q4MSV8KTG0BRJGZ2", "CreDtTm": "2024-11-04T12:57:39.427Z", @@ -38,12 +38,12 @@ note left } end note Mojaloop -> FXP: POST /fxQuotes -FXP -> FXP: Check to see if liqidity can be provided \n and provide rates. -alt if FXP can provide the payment liquidity +FXP -> FXP: Vérifier si la liquidité peut être fournie \n et fournir les taux. +alt si le FXP peut fournir la liquidité du paiement FXP -> Mojaloop: PUT /fxQuotes/{ID} note right **pacs.092.001.01** -**Financial Institution Credit Transfer Quote Response** +**Réponse de devis de transfert de crédit interinstitutions** { "GrpHdr": { "MsgId": "01JBVM176FTHB9F2ZQJJ7AFCN8", @@ -76,8 +76,8 @@ else FXP -> Mojaloop: PUT /fxQuotes/{ID}/error note right **pacs.002.001.15** -**Financial Institution to Financial Institution** -**Payment Status Report** +**D'une institution financière à une autre** +**Rapport d'état de paiement** { "GrpHdr": { "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.svg index 13041e821..bc6e70152 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.svg +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/AgreementConversion.svg @@ -1 +1,156 @@ -Agreement phase on providing liquidity ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopForeign Exchange ProviderForeign Exchange Provider1POST /fxQuotespacs.091.001.01Financial Institution Credit Transfer Quote Request"GrpHdr": {"MsgId": "01JBVM16V3Q4MSV8KTG0BRJGZ2","CreDtTm": "2024-11-04T12:57:39.427Z","NbOfTxs": "1","SttlmInf": { "SttlmMtd": "CLRG" },"PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z"},"CdtTrfTxInf": {"PmtId": {"TxId": "01JBVM16V1ZXP2DM34BQT40NW9","InstrId": "01JBVM16V1ZXP2DM34BQT40NWA","EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF" },"Dbtr": { "FinInstnId": { "Othr": { "Id":"payer-dfsp"} } },"UndrlygCstmrCdtTrf": {"Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}},"DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}},"Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}},"CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}},"InstdAmt": {"Ccy":"ZMW","ActiveOrHistoricCurrencyAndAmount":"21"}},"Cdtr": {"FinInstnId": {"Othr": {"Id":"fxp"}}},"IntrBkSttlmAmt": { "Ccy":"MWK","ActiveCurrencyAndAmount": "0"},"InstrForCdtrAgt": {"InstrInf":"SEND"}}}2POST /fxQuotes3Check to see if liqidity can be providedand provide rates.alt[if FXP can provide the payment liquidity]4PUT /fxQuotes/{ID}pacs.092.001.01Financial Institution Credit Transfer Quote Response{"GrpHdr": {"MsgId": "01JBVM176FTHB9F2ZQJJ7AFCN8","CreDtTm": "2024-11-04T12:57:39.791Z","NbOfTxs": "1","SttlmInf": { "SttlmMtd": "CLRG" },"PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z"},"CdtTrfTxInf": {"VrfctnOfTerms": {"Sh256Sgntr":"KVHFmdTD6A..."},"PmtId": {"InstrId": "01JBVM16V1ZXP2DM34BQT40NWA","TxId": "01JBVM13SQYP507JB1DYBZVCMF"},"Dbtr": {"FinInstnId": {"Othr": {"Id":"payer-dfsp"}}},"UndrlygCstmrCdtTrf": {"Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}},"DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}},"Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}},"CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}},"InstdAmt": { "Ccy":"ZMW","ActiveOrHistoricCurrencyAndAmount":"21"}},"Cdtr": {"FinInstnId": {"Othr": {"Id":"fxp"}}},"IntrBkSttlmAmt": {"Ccy":"MWK","ActiveCurrencyAndAmount":"1080"},"InstrForCdtrAgt": {"InstrInf":"SEND"}}}5PUT /fxQuotes/{ID}6PUT /fxQuotes/{ID}/errorpacs.002.001.15Financial Institution to Financial Institution Payment Status Report{"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}}}7PUT /fxQuotes/{ID}/error \ No newline at end of file + + Phase d'accord sur l'apport de liquidité — flux de messages ISO 20022 + + + Phase d'accord sur l'apport de liquidité — flux de messages ISO 20022 + + + + + + DFSP payeur + + DFSP payeur + + Mojaloop + + Mojaloop + + Fournisseur de change + + Fournisseur de change + + + 1 + POST /fxQuotes + + + pacs.091.001.01 + Demande de devis de transfert de crédit interinstitutions + "GrpHdr": { + "MsgId": "01JBVM16V3Q4MSV8KTG0BRJGZ2", + "CreDtTm": "2024-11-04T12:57:39.427Z", + "NbOfTxs": "1", + "SttlmInf": { "SttlmMtd": "CLRG" }, + "PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z" + }, + "CdtTrfTxInf": { + "PmtId": { + "TxId": "01JBVM16V1ZXP2DM34BQT40NW9", + "InstrId": "01JBVM16V1ZXP2DM34BQT40NWA", + "EndToEndId": "01JBVM13SQYP507JB1DYBZVCMF" }, + "Dbtr": { "FinInstnId": { "Othr": { "Id": + "payer-dfsp" + } } }, + "UndrlygCstmrCdtTrf": { + "Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}}, + "DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}}, + "Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}}, + "CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}}, + "InstdAmt": {"Ccy": + "ZMW" + , + "ActiveOrHistoricCurrencyAndAmount": + "21" + }}, + "Cdtr": {"FinInstnId": {"Othr": {"Id": + "fxp" + }}}, + "IntrBkSttlmAmt": { "Ccy": + "MWK" + , + "ActiveCurrencyAndAmount": "0"}, + "InstrForCdtrAgt": {"InstrInf": + "SEND" + }} + } + + + 2 + POST /fxQuotes + + + + + 3 + Vérifier si la liquidité peut être fournie + et fournir les taux. + + + alt + [si le FXP peut fournir la liquidité du paiement] + + + 4 + PUT /fxQuotes/{ID} + + + pacs.092.001.01 + Réponse de devis de transfert de crédit interinstitutions + { + "GrpHdr": { + "MsgId": "01JBVM176FTHB9F2ZQJJ7AFCN8", + "CreDtTm": "2024-11-04T12:57:39.791Z", + "NbOfTxs": "1", + "SttlmInf": { "SttlmMtd": "CLRG" }, + "PmtInstrXpryDtTm": "2024-11-04T12:58:39.425Z"}, + "CdtTrfTxInf": { + "VrfctnOfTerms": {"Sh256Sgntr": + "KVHFmdTD6A..." + }, + "PmtId": {"InstrId": "01JBVM16V1ZXP2DM34BQT40NWA", + "TxId": "01JBVM13SQYP507JB1DYBZVCMF"}, + "Dbtr": {"FinInstnId": {"Othr": {"Id": + "payer-dfsp" + }}}, + "UndrlygCstmrCdtTrf": { + "Dbtr": {"Id": {"OrgId": {"Othr": {"Id": "payer-dfsp"}}}}, + "DbtrAgt": {"FinInstnId": {"Othr": {"Id": "payer-dfsp"}}}, + "Cdtr": {"Id": {"OrgId": {"Othr": {"Id": "fxp"}}}}, + "CdtrAgt": {"FinInstnId": {"Othr": {"Id": "fxp"}}}, + "InstdAmt": { "Ccy": + "ZMW" + , + "ActiveOrHistoricCurrencyAndAmount": + "21" + }}, + "Cdtr": {"FinInstnId": {"Othr": {"Id": + "fxp" + }}}, + "IntrBkSttlmAmt": {"Ccy": + "MWK" + , + "ActiveCurrencyAndAmount": + "1080" + }, + "InstrForCdtrAgt": {"InstrInf": + "SEND" + }} + } + + + 5 + PUT /fxQuotes/{ID} + + + + 6 + PUT /fxQuotes/{ID}/error + + + pacs.002.001.15 + D'une institution financière à une autre +   + Rapport d'état de paiement + { + "GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, + "TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} + } + + + 7 + PUT /fxQuotes/{ID}/error + + diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.plantuml index a617ecf3f..ade4eb3f3 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.plantuml +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.plantuml @@ -1,16 +1,16 @@ @startuml -Title Committing to providing Liquidity ISO 20022 Message Flow -participant PayerDFSP as "Payer DFSP" +Title Engagement à fournir de la liquidité — flux de messages ISO 20022 +participant PayerDFSP as "DFSP payeur" participant Mojaloop as "Mojaloop" -participant FXP as "Foreign Exchange Provider" +participant FXP as "Fournisseur de change" autonumber PayerDFSP -> Mojaloop: POST /fxTransfers note left **pacs.009.001.12** -**Execute Financial Institution Credit Transfer** +**Exécution du transfert de crédit interinstitutions** { "GrpHdr":{ "MsgId":"01JBVM1BW4J0RJZSQ539QB9TKT", @@ -36,13 +36,13 @@ note left } end note Mojaloop -> FXP: POST /fxTransfers -FXP -> FXP: Check to see liquidity for the transfer can still be provided. -alt if FXP can provide the payment liquidity +FXP -> FXP: Vérifier si la liquidité pour le transfert peut encore être fournie. +alt si le FXP peut fournir la liquidité du paiement FXP -> Mojaloop: PUT /fxTransfers/{ID} note right **pacs.002.001.15** -**Financial Institution to Financial Institution** -**Payment Status Report** +**D'une institution financière à une autre** +**Rapport d'état de paiement** { "GrpHdr": { "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", @@ -60,8 +60,8 @@ else FXP -> Mojaloop: PUT /fxTransfers/{ID}/error note right **pacs.002.001.15** -**Financial Institution to Financial Institution** -**Payment Status Report** +**D'une institution financière à une autre** +**Rapport d'état de paiement** "GrpHdr": { "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", "CreDtTm":"2024-11-04T12:57:45.228Z"}, @@ -70,13 +70,13 @@ end note Mojaloop -> PayerDFSP: PUT /fxTransfer/{ID}/error end -Mojaloop -> Mojaloop: When the determining transfer is committed, \n the FX conversion is committed. +Mojaloop -> Mojaloop: Lorsque le transfert déterminant est engagé, \n la conversion de devises est engagée. Mojaloop->FXP: PATCH /fxTransfers/{ID} note left **pacs.002.001.15** -**Financial Institution to Financial Institution** -**Payment Status Report** +**D'une institution financière à une autre** +**Rapport d'état de paiement** "GrpHdr":{ "MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976", "CreDtTm":"2024-11-04T12:57:46.828Z"}, diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.svg index 5d8929a8c..26282a44a 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.svg +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/ConversionTransfer.svg @@ -1 +1,132 @@ -Committing to providing Liquidity ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopForeign Exchange ProviderForeign Exchange Provider1POST /fxTransferspacs.009.001.12Execute Financial Institution Credit Transfer{"GrpHdr":{"MsgId":"01JBVM1BW4J0RJZSQ539QB9TKT","CreDtTm":"2024-11-04T12:57:44.580Z","NbOfTxs":"1","SttlmInf":{"SttlmMtd":"CLRG"},"PmtInstrXpryDtTm":"2024-11-04T12:58:44.579Z"},"CdtTrfTxInf":{"PmtId":{"TxId":"01JBVM16V1ZXP2DM34BQT40NWA","EndToEndId":"01JBVM13SQYP507JB1DYBZVCMF"},"Dbtr":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}},"UndrlygCstmrCdtTrf":{"Dbtr":{"Id":{"OrgId":{"Othr":{"Id":"payer-dfsp"}}}},"DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}},"Cdtr":{"Id":{"OrgId":{"Othr":{"Id":"fxp"}}}},"CdtrAgt":{"FinInstnId":{"Othr":{"Id":"fxp"}}},"InstdAmt":{"Ccy":"ZMW","ActiveOrHistoricCurrencyAndAmount":"21"}},"Cdtr":{"FinInstnId":{"Othr":{"Id":"fxp"}}},"IntrBkSttlmAmt":{"Ccy":"MWK","ActiveCurrencyAndAmount":"1080"},"VrfctnOfTerms":{"Sh256Sgntr":"KVHFmdTD6A..."}}}2POST /fxTransfers3Check to see liquidity for the transfer can still be provided.alt[if FXP can provide the payment liquidity]4PUT /fxTransfers/{ID}pacs.002.001.15Financial Institution to Financial Institution Payment Status Report{"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"ExctnConf":"ou1887jmG-l...","PrcgDt":{"DtTm":"2024-11-04T12:57:45.213Z"},"TxSts":"RESV"}}5PUT /fxTransfers/{ID}6PUT /fxTransfers/{ID}/errorpacs.002.001.15Financial Institution to Financial Institution Payment Status Report"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}7PUT /fxTransfer/{ID}/error8When the determining transfer is committed,the FX conversion is committed.9PATCH /fxTransfers/{ID}pacs.002.001.15Financial Institution to Financial InstitutionPayment Status Report"GrpHdr":{"MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976","CreDtTm":"2024-11-04T12:57:46.828Z"},"TxInfAndSts":{"PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"},"TxSts":"COMM"}}" \ No newline at end of file + + Engagement à fournir de la liquidité — flux de messages ISO 20022 + + + Engagement à fournir de la liquidité — flux de messages ISO 20022 + + + + + + DFSP payeur + + DFSP payeur + + Mojaloop + + Mojaloop + + Fournisseur de change + + Fournisseur de change + + + 1 + POST /fxTransfers + + + pacs.009.001.12 + Exécution du transfert de crédit interinstitutions + { + "GrpHdr":{ + "MsgId":"01JBVM1BW4J0RJZSQ539QB9TKT", + "CreDtTm":"2024-11-04T12:57:44.580Z", + "NbOfTxs":"1", + "SttlmInf":{"SttlmMtd":"CLRG"}, + "PmtInstrXpryDtTm":"2024-11-04T12:58:44.579Z"}, + "CdtTrfTxInf":{ + "PmtId":{"TxId":"01JBVM16V1ZXP2DM34BQT40NWA", + "EndToEndId":"01JBVM13SQYP507JB1DYBZVCMF"}, + "Dbtr":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}}, + "UndrlygCstmrCdtTrf":{ + "Dbtr":{"Id":{"OrgId":{"Othr":{"Id":"payer-dfsp"}}}}, + "DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}}, + "Cdtr":{"Id":{"OrgId":{"Othr":{"Id":"fxp"}}}}, + "CdtrAgt":{"FinInstnId":{"Othr":{"Id":"fxp"}}}, + "InstdAmt":{"Ccy":"ZMW", + "ActiveOrHistoricCurrencyAndAmount":"21"}}, + "Cdtr":{"FinInstnId":{"Othr":{"Id":"fxp"}}}, + "IntrBkSttlmAmt":{"Ccy":"MWK", + "ActiveCurrencyAndAmount":"1080"}, + "VrfctnOfTerms":{"Sh256Sgntr":"KVHFmdTD6A..."}} + } + + + 2 + POST /fxTransfers + + + + + 3 + Vérifier si la liquidité pour le transfert peut encore être fournie. + + + alt + [si le FXP peut fournir la liquidité du paiement] + + + 4 + PUT /fxTransfers/{ID} + + + pacs.002.001.15 + D'une institution financière à une autre +   + Rapport d'état de paiement + { + "GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, + "TxInfAndSts":{ + "ExctnConf":"ou1887jmG-l...", + "PrcgDt":{"DtTm":"2024-11-04T12:57:45.213Z"}, + "TxSts":"RESV"} + } + + + 5 + PUT /fxTransfers/{ID} + + + + 6 + PUT /fxTransfers/{ID}/error + + + pacs.002.001.15 + D'une institution financière à une autre +   + Rapport d'état de paiement + "GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, + "TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}} + + + 7 + PUT /fxTransfer/{ID}/error + + + + + 8 + Lorsque le transfert déterminant est engagé, + la conversion de devises est engagée. + + + 9 + PATCH /fxTransfers/{ID} + + + pacs.002.001.15 + D'une institution financière à une autre + Rapport d'état de paiement + "GrpHdr":{ + "MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976", + "CreDtTm":"2024-11-04T12:57:46.828Z"}, + "TxInfAndSts":{"PrcgDt":{ + "DtTm":"2024-11-04T12:57:46.812Z"}, + "TxSts":"COMM"}}" + + diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.plantuml index e74db7ddd..07136e2e9 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.plantuml +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.plantuml @@ -1,20 +1,20 @@ @startuml -Title Discovery ISO 20022 Message Flow -participant PayerDFSP as "Payer DFSP" +Title Découverte — flux de messages ISO 20022 +participant PayerDFSP as "DFSP payeur" participant Mojaloop as "Mojaloop" -participant PayeeDFSP as "Payee DFSP" +participant PayeeDFSP as "DFSP bénéficiaire" autonumber PayerDFSP -> Mojaloop: GET /parties/{type}/{PartyIdentifier} Mojaloop -> PayeeDFSP: GET /parties/{type}/{PartyIdentifier} -PayeeDFSP -> PayeeDFSP: Validate payees account status. -alt if account active -PayeeDFSP -> Mojaloop: PUT /parties/{type}/{PartyIdentifier} \n Returns supported currencies and account owner details. +PayeeDFSP -> PayeeDFSP: Valider l'état du compte du bénéficiaire. +alt si le compte est actif +PayeeDFSP -> Mojaloop: PUT /parties/{type}/{PartyIdentifier} \n Renvoie les devises prises en charge et les détails du titulaire du compte. note right **acmt.024.001.04** -**Account Identification Verification Report** +**Rapport de vérification d'identification de compte** { "Assgnmt": { "MsgId": "01JBVM14S6SC453EY9XB9GXQB5", @@ -33,12 +33,12 @@ note right end note Mojaloop -> PayerDFSP: PUT /parties/{type}/{PartyIdentifier} -else if account inactive +else si le compte est inactif -PayeeDFSP -> Mojaloop: PUT /parties/{type}/{PartyIdentifier}/error \n Returns error code 3204 Party not found. +PayeeDFSP -> Mojaloop: PUT /parties/{type}/{PartyIdentifier}/error \n Renvoie le code d'erreur 3204 — partie introuvable. note right **acmt.024.001.04** -**Account Identification Verification Report** +**Rapport de vérification d'identification de compte** { "Assgnmt": { "Id": 123, diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.svg index a4d5d4587..e0a9a91f6 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.svg +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Discovery.svg @@ -1 +1,120 @@ -Discovery ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopPayee DFSPPayee DFSP1GET /parties/{type}/{PartyIdentifier}2GET /parties/{type}/{PartyIdentifier}3Validate payees account status.alt[if account active]4PUT /parties/{type}/{PartyIdentifier}Returns supported currencies and account owner details.acmt.024.001.04Account Identification Verification Report{"Assgnmt": {"MsgId": "01JBVM14S6SC453EY9XB9GXQB5","CreDtTm": "2024-11-04T12:57:37.318Z","Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id":"payee-dfps"}}}},"Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id":"payer-dfsp"}}}}}"Rpt": {"Vrfctn": true,"OrgnlId":"MSISDN/16665551002","UpdtdPtyAndAcctId": {"Pty": {"Id": {"PrvtId": {"Othr": {"SchmeNm": {"Prtry":"MSISDN"},"Id":"16665551002"}}},"Nm":"Chikondi Banda"},"Agt": { "FinInstnId": { "Othr": { "Id":"payee-dfsp"}}},"Acct": { "Ccy":"MWK"}}}5PUT /parties/{type}/{PartyIdentifier}[if account inactive]6PUT /parties/{type}/{PartyIdentifier}/errorReturns error code 3204 Party not found.acmt.024.001.04Account Identification Verification Report{"Assgnmt": {"Id": 123,"CreDtTm": "2013-03-07T16:30:00","Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id":"payee-dfsp"}}}},"Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id":"payer-dfsp"}}}}},"Rpt": {"Vrfctn": false,"OrgnlId":"MSISDN/16665551002","CreDtTm": "2013-03-07T16:30:00","Rsn": { "Prtry":3204}}}7PUT /parties/{type}/{PartyIdentifier}/error \ No newline at end of file + + Découverte — flux de messages ISO 20022 + + + Découverte — flux de messages ISO 20022 + + + + + + DFSP payeur + + DFSP payeur + + Mojaloop + + Mojaloop + + DFSP bénéficiaire + + DFSP bénéficiaire + + + 1 + GET /parties/{type}/{PartyIdentifier} + + + 2 + GET /parties/{type}/{PartyIdentifier} + + + + + 3 + Valider l'état du compte du bénéficiaire. + + + alt + [si le compte est actif] + + + 4 + PUT /parties/{type}/{PartyIdentifier} + Renvoie les devises prises en charge et les détails du titulaire du compte. + + + acmt.024.001.04 + Rapport de vérification d'identification de compte + { + "Assgnmt": { + "MsgId": "01JBVM14S6SC453EY9XB9GXQB5", + "CreDtTm": "2024-11-04T12:57:37.318Z", + "Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id": + "payee-dfps" + }}}}, + "Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id": + "payer-dfsp" + }}}}} + "Rpt": { + "Vrfctn": true, + "OrgnlId": + "MSISDN/16665551002" + , + "UpdtdPtyAndAcctId": {"Pty": {"Id": {"PrvtId": {"Othr": {"SchmeNm": {"Prtry": + "MSISDN" + }, + "Id": + "16665551002" + }}}, + "Nm": + "Chikondi Banda" + }, + "Agt": { "FinInstnId": { "Othr": { "Id": + "payee-dfsp" + }}}, + "Acct": { "Ccy": + "MWK" + }} + } + + + 5 + PUT /parties/{type}/{PartyIdentifier} + + [si le compte est inactif] + + + 6 + PUT /parties/{type}/{PartyIdentifier}/error + Renvoie le code d'erreur 3204 — partie introuvable. + + + acmt.024.001.04 + Rapport de vérification d'identification de compte + { + "Assgnmt": { + "Id": 123, + "CreDtTm": "2013-03-07T16:30:00", + "Assgnr": { "Agt": { "FinInstnId": { "Othr": { "Id": + "payee-dfsp" + }}}}, + "Assgne": { "Agt": { "FinInstnId": { "Othr": { "Id": + "payer-dfsp" + }}}}}, + "Rpt": { + "Vrfctn": false, + "OrgnlId": + "MSISDN/16665551002" + , + "CreDtTm": "2013-03-07T16:30:00", + "Rsn": { "Prtry": + 3204 + }} + } + + + 7 + PUT /parties/{type}/{PartyIdentifier}/error + + diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.plantuml b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.plantuml index aafcc570b..f5d7b7d99 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.plantuml +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.plantuml @@ -1,17 +1,17 @@ @startuml -Title Transfer - ISO 20022 Message Flow -participant PayerDFSP as "Payer DFSP" +Title Transfert — flux de messages ISO 20022 +participant PayerDFSP as "DFSP payeur" participant Mojaloop as "Mojaloop" -participant PayeeDFSP as "Payee DFSP" +participant PayeeDFSP as "DFSP bénéficiaire" autonumber PayerDFSP -> Mojaloop: POST /transfers note left **pacs.008.001.13** -**Financial Institution to Financial Institution** -**Customer Credit Transfer** +**D'une institution financière à une autre** +**Transfert de crédit client** { "GrpHdr":{ "MsgId":"01JBVM1D2MR6D4WBWWYY3ZHGMM", @@ -35,13 +35,13 @@ note left } end note Mojaloop -> PayeeDFSP: POST /transfers -PayeeDFSP -> PayeeDFSP: Check to see if Payee can receive the payment. -alt if Payee can receive the payment +PayeeDFSP -> PayeeDFSP: Vérifier si le bénéficiaire peut recevoir le paiement. +alt si le bénéficiaire peut recevoir le paiement PayeeDFSP -> Mojaloop: PUT /transfers/{ID} note right **pacs.002.001.15** -**Financial Institution to Financial Institution** -**Payment Status Report** +**D'une institution financière à une autre** +**Rapport d'état de paiement** { "GrpHdr":{ "MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976", @@ -59,8 +59,8 @@ else Mojaloop -> PayerDFSP: PUT/transfers/{ID}/error note right **pacs.002.001.15** -**Financial Institution to Financial Institution** -**Payment Status Report** +**D'une institution financière à une autre** +**Rapport d'état de paiement** { "GrpHdr": { "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", @@ -70,13 +70,13 @@ note right end note end -Mojaloop->Mojaloop: If transfer fails, is timed-out,\n or is reserved PUT /transfers message. +Mojaloop->Mojaloop: Si le transfert échoue, expire \n ou est réservé — message PUT /transfers. Mojaloop->PayeeDFSP: PATCH /transfers/{ID} note left **pacs.002.001.15** -**Financial Institution to Financial Institution** -**Payment Status Report** +**D'une institution financière à une autre** +**Rapport d'état de paiement** { "GrpHdr":{ "MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976", diff --git a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.svg b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.svg index 1358e9c60..0f800b082 100644 --- a/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.svg +++ b/docs/fr/product/features/Iso20022/v1.0/SequenceDiagrams/Transfer.svg @@ -1 +1,131 @@ -Transfer - ISO 20022 Message FlowPayer DFSPPayer DFSPMojaloopMojaloopPayee DFSPPayee DFSP1POST /transferspacs.008.001.13Financial Institution to Financial Institution Customer Credit Transfer{"GrpHdr":{"MsgId":"01JBVM1D2MR6D4WBWWYY3ZHGMM","CreDtTm":"2024-11-04T12:57:45.812Z","NbOfTxs":"1","SttlmInf":{"SttlmMtd":"CLRG"},"PmtInstrXpryDtTm":"2024-11-04T12:58:45.810Z"},"CdtTrfTxInf":{"PmtId":{"TxId":"01JBVM13SQYP507JB1DYBZVCMF"},"ChrgBr":"CRED","Cdtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"},"Id":"16665551002"}}}},"Dbtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"},"Id":"16135551001"}}},"Name":"Joe Blogs"},"CdtrAgt":{"FinInstnId":{"Othr":{"Id":"payee-dfsp"}}},"DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}},"IntrBkSttlmAmt":{"Ccy":"MWK","ActiveCurrencyAndAmount":"1080"},"VrfctnOfTerms":{"IlpV4PrepPacket":"DIICzQAAAAAAAaX..."}}}2POST /transfers3Check to see if Payee can receive the payment.alt[if Payee can receive the payment]4PUT /transfers/{ID}pacs.002.001.15Financial Institution to Financial Institution Payment Status Report{"GrpHdr":{"MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976","CreDtTm":"2024-11-04T12:57:46.828Z"},"TxInfAndSts":{"ExctnConf":"-rL3liKeLrsNy7GHJaKgAzeDL_8IVnvER5zUlP1YAoc","PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"},"TxSts":"COMM"}}5PUT/transfers/{ID}6PUT/transfers/{ID}/errorpacs.002.001.15Financial Institution to Financial Institution Payment Status Report{"GrpHdr": {"MsgId":"01JBVM1CGC5A18XQVYYRF68FD1","CreDtTm":"2024-11-04T12:57:45.228Z"},"TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}}}7If transfer fails, is timed-out,or is reserved PUT /transfers message.8PATCH /transfers/{ID}pacs.002.001.15Financial Institution to Financial InstitutionPayment Status Report{"GrpHdr":{"MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976","CreDtTm":"2024-11-04T12:57:46.828Z"},"TxInfAndSts":{"PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"},"TxSts":"COMM"}}"} \ No newline at end of file + + Transfert — flux de messages ISO 20022 + + + Transfert — flux de messages ISO 20022 + + + + + + DFSP payeur + + DFSP payeur + + Mojaloop + + Mojaloop + + DFSP bénéficiaire + + DFSP bénéficiaire + + + 1 + POST /transfers + + + pacs.008.001.13 + D'une institution financière à une autre +   + Transfert de crédit client + { + "GrpHdr":{ + "MsgId":"01JBVM1D2MR6D4WBWWYY3ZHGMM", + "CreDtTm":"2024-11-04T12:57:45.812Z", + "NbOfTxs":"1", + "SttlmInf":{"SttlmMtd":"CLRG"}, + "PmtInstrXpryDtTm":"2024-11-04T12:58:45.810Z"}, + "CdtTrfTxInf":{ + "PmtId":{"TxId":"01JBVM13SQYP507JB1DYBZVCMF"}, + "ChrgBr":"CRED", + "Cdtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"}, + "Id":"16665551002"}}}}, + "Dbtr":{"Id":{"PrvtId":{"Othr":{"SchmeNm":{"Prtry":"MSISDN"}, + "Id":"16135551001"}}}, + "Name":"Joe Blogs"}, + "CdtrAgt":{"FinInstnId":{"Othr":{"Id":"payee-dfsp"}}}, + "DbtrAgt":{"FinInstnId":{"Othr":{"Id":"payer-dfsp"}}}, + "IntrBkSttlmAmt":{"Ccy":"MWK", + "ActiveCurrencyAndAmount":"1080"}, + "VrfctnOfTerms":{"IlpV4PrepPacket":"DIICzQAAAAAAAaX..."}} + } + + + 2 + POST /transfers + + + + + 3 + Vérifier si le bénéficiaire peut recevoir le paiement. + + + alt + [si le bénéficiaire peut recevoir le paiement] + + + 4 + PUT /transfers/{ID} + + + pacs.002.001.15 + D'une institution financière à une autre +   + Rapport d'état de paiement + { + "GrpHdr":{ + "MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976", + "CreDtTm":"2024-11-04T12:57:46.828Z"}, + "TxInfAndSts":{ + "ExctnConf":"-rL3liKeLrsNy7GHJaKgAzeDL_8IVnvER5zUlP1YAoc", + "PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"}, + "TxSts":"COMM"} + } + + + 5 + PUT/transfers/{ID} + + + + 6 + PUT/transfers/{ID}/error + + + pacs.002.001.15 + D'une institution financière à une autre +   + Rapport d'état de paiement + { + "GrpHdr": { + "MsgId":"01JBVM1CGC5A18XQVYYRF68FD1", + "CreDtTm":"2024-11-04T12:57:45.228Z"}, + "TxInfAndSts":{"StsRsnInf":{"Rsn": {"Prtry":"ErrorCode"}}} + } + + + + + 7 + Si le transfert échoue, expire + ou est réservé — message PUT /transfers. + + + 8 + PATCH /transfers/{ID} + + + pacs.002.001.15 + D'une institution financière à une autre + Rapport d'état de paiement + { + "GrpHdr":{ + "MsgId":"01JBVM1E2CRWFZFPN7W4AZJ976", + "CreDtTm":"2024-11-04T12:57:46.828Z"}, + "TxInfAndSts":{"PrcgDt":{"DtTm":"2024-11-04T12:57:46.812Z"}, + "TxSts":"COMM"}}" + } + + From 6209892a28bea1c56986fbb8f0fd0c0fe6da35d0 Mon Sep 17 00:00:00 2001 From: kayiganwa04 Date: Thu, 26 Mar 2026 13:08:13 +0200 Subject: [PATCH 3/7] feat: mdae configuration of french language and translated adoption section --- docs/.vuepress/config.js | 140 +++- docs/.vuepress/enhanceApp.js | 33 +- docs/.vuepress/theme/layouts/404.vue | 37 +- .../Onboarding/business-onboarding.md | 20 + .../Onboarding/onboarding-introduction.md | 5 + .../Onboarding/technical-onboarding.md | 247 +++++++ .../Portalv2/accessing-the-portal.md | 92 +++ .../Portalv2/busops-portal-introduction.md | 23 + .../Portalv2/checking-settlement-details.md | 52 ++ .../enabling-disabling-transactions.md | 27 + .../Portalv2/managing-windows.md | 50 ++ .../monitoring-dfsp-financial-details.md | 24 + .../Portalv2/recording-funds-in-out.md | 31 + .../Portalv2/searching-for-transfer-data.md | 189 +++++ .../Portalv2/settlement-business-process.md | 68 ++ .../HubOperations/Portalv2/settling.md | 67 ++ .../HubOperations/Portalv2/updating-ndc.md | 22 + .../RBAC/Role-based-access-control.md | 311 ++++++++ .../Settlement/ledgers-in-the-hub.md | 367 +++++++++ .../Settlement/settlement-basic-concepts.md | 129 ++++ .../settlement-management-introduction.md | 7 + .../TechOps/change-management.md | 388 ++++++++++ .../HubOperations/TechOps/defect-triage.md | 93 +++ .../incident-management-escalation-matrix.md | 51 ++ .../TechOps/incident-management.md | 695 ++++++++++++++++++ .../HubOperations/TechOps/key-terms-kpis.md | 80 ++ .../TechOps/problem-management.md | 131 ++++ .../TechOps/release-management.md | 108 +++ .../TechOps/service-level-agreements.md | 35 + .../TechOps/tech-ops-introduction.md | 31 + .../Scheme/platform-operating-guideline.md | 553 ++++++++++++++ .../adoption/Scheme/scheme-business-rules.md | 525 +++++++++++++ docs/fr/adoption/Scheme/scheme-key-choices.md | 407 ++++++++++ .../Scheme/scheme-participation-agreement.md | 76 ++ .../Scheme/scheme-uniform-glossary.md | 299 ++++++++ .../guides/Role-based-access-control.md | 297 ++++++++ docs/fr/adoption/index.md | 42 ++ .../Iso20022/v1.0/MarketPracticeDocument.md | 67 +- 38 files changed, 5749 insertions(+), 70 deletions(-) create mode 100644 docs/fr/adoption/HubOperations/Onboarding/business-onboarding.md create mode 100644 docs/fr/adoption/HubOperations/Onboarding/onboarding-introduction.md create mode 100644 docs/fr/adoption/HubOperations/Onboarding/technical-onboarding.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/accessing-the-portal.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/busops-portal-introduction.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/checking-settlement-details.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/enabling-disabling-transactions.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/managing-windows.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/monitoring-dfsp-financial-details.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/recording-funds-in-out.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/searching-for-transfer-data.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/settlement-business-process.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/settling.md create mode 100644 docs/fr/adoption/HubOperations/Portalv2/updating-ndc.md create mode 100644 docs/fr/adoption/HubOperations/RBAC/Role-based-access-control.md create mode 100644 docs/fr/adoption/HubOperations/Settlement/ledgers-in-the-hub.md create mode 100644 docs/fr/adoption/HubOperations/Settlement/settlement-basic-concepts.md create mode 100644 docs/fr/adoption/HubOperations/Settlement/settlement-management-introduction.md create mode 100644 docs/fr/adoption/HubOperations/TechOps/change-management.md create mode 100644 docs/fr/adoption/HubOperations/TechOps/defect-triage.md create mode 100644 docs/fr/adoption/HubOperations/TechOps/incident-management-escalation-matrix.md create mode 100644 docs/fr/adoption/HubOperations/TechOps/incident-management.md create mode 100644 docs/fr/adoption/HubOperations/TechOps/key-terms-kpis.md create mode 100644 docs/fr/adoption/HubOperations/TechOps/problem-management.md create mode 100644 docs/fr/adoption/HubOperations/TechOps/release-management.md create mode 100644 docs/fr/adoption/HubOperations/TechOps/service-level-agreements.md create mode 100644 docs/fr/adoption/HubOperations/TechOps/tech-ops-introduction.md create mode 100644 docs/fr/adoption/Scheme/platform-operating-guideline.md create mode 100644 docs/fr/adoption/Scheme/scheme-business-rules.md create mode 100644 docs/fr/adoption/Scheme/scheme-key-choices.md create mode 100644 docs/fr/adoption/Scheme/scheme-participation-agreement.md create mode 100644 docs/fr/adoption/Scheme/scheme-uniform-glossary.md create mode 100644 docs/fr/adoption/guides/Role-based-access-control.md create mode 100644 docs/fr/adoption/index.md diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 5ca3259ad..1e177a305 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -52,31 +52,42 @@ module.exports = { sidebarDepth: 2, lastUpdated: true, footerCopyright: 'Apache 2.0 Licensed | Copyright © 2020 - 2024 Mojaloop Foundation', - // PR Preview configuration isPrPreview: isPrPreview, prNumber: process.env.VUEPRESS_PR_NUMBER || '', - nav: [ - { - text: 'Adoption', - link: '/adoption/', - }, - { - text: 'Community', - link: '/community/' - }, - { - text: 'Technical', - link: '/technical/' + locales: { + '/': { + selectText: 'Languages', + label: 'English', + editLinkText: 'Edit this page on GitHub', + lastUpdated: 'Last Updated', + nav: [ + { text: 'Adoption', link: '/adoption/' }, + { text: 'Community', link: '/community/' }, + { text: 'Technical', link: '/technical/' }, + { text: 'Product', link: '/product/' }, + { text: 'Training Program', link: 'https://mojaloop.io/mojaloop-training-program/' } + ], }, - { - text: 'Product', - link: '/product/' - }, - - { - text: 'Training Program', - link: 'https://mojaloop.io/mojaloop-training-program/' + '/fr/': { + selectText: 'Langues', + label: 'Français', + editLinkText: 'Modifier cette page sur GitHub', + lastUpdated: 'Dernière mise à jour', + nav: [ + { text: 'Adoption', link: '/fr/adoption/' }, + { text: 'Communauté', link: '/fr/community/' }, + { text: 'Technique', link: '/fr/technical/' }, + { text: 'Produit', link: '/fr/product/' }, + { text: 'Programme de formation', link: 'https://mojaloop.io/mojaloop-training-program/' } + ], } + }, + nav: [ + { text: 'Adoption', link: '/adoption/' }, + { text: 'Community', link: '/community/' }, + { text: 'Technical', link: '/technical/' }, + { text: 'Product', link: '/product/' }, + { text: 'Training Program', link: 'https://mojaloop.io/mojaloop-training-program/' } ], // Ref: https://vuepress.vuejs.org/theme/default-theme-config.html#sidebar sidebar: { @@ -1162,6 +1173,89 @@ module.exports = { ['features/invariants', 'Invariants'], ['features/development', 'Continuous Development']] } + ], + '/fr/adoption/': [ + { + title: 'Guide du Schéma', + collapsable: false, + sidebarDepth: 2, + children: [ + ['Scheme/platform-operating-guideline', 'Modèle de Directive Opérationnelle de la Plateforme'], + ['Scheme/scheme-business-rules', 'Modèle de Règles Commerciales du Schéma'], + ['Scheme/scheme-key-choices', 'Choix Clés du Schéma'], + ['Scheme/scheme-participation-agreement', 'Modèle d\'Accord de Participation au Schéma'], + ['Scheme/scheme-uniform-glossary', 'Modèle de Glossaire Uniforme'], + ] + }, + { + title: 'Guide des Opérations du Hub', + collapsable: false, + sidebarDepth: 1, + children: [ + { + title: 'Guide des Opérations Techniques', + collapsable: true, + sidebarDepth: 2, + children: [ + 'HubOperations/TechOps/tech-ops-introduction', + 'HubOperations/TechOps/incident-management', + 'HubOperations/TechOps/problem-management', + 'HubOperations/TechOps/change-management', + 'HubOperations/TechOps/release-management', + 'HubOperations/TechOps/defect-triage', + 'HubOperations/TechOps/key-terms-kpis', + 'HubOperations/TechOps/incident-management-escalation-matrix', + 'HubOperations/TechOps/service-level-agreements' + ] + }, + { + title: 'Guide de Gestion des Règlements', + collapsable: true, + sidebarDepth: 2, + children: [ + 'HubOperations/Settlement/settlement-management-introduction', + 'HubOperations/Settlement/settlement-basic-concepts', + 'HubOperations/Settlement/ledgers-in-the-hub', + ] + }, + { + title: 'Guide du Portail Finance v2', + collapsable: true, + sidebarDepth: 2, + children: [ + 'HubOperations/Portalv2/busops-portal-introduction', + 'HubOperations/Portalv2/settlement-business-process', + 'HubOperations/Portalv2/accessing-the-portal', + 'HubOperations/Portalv2/managing-windows', + 'HubOperations/Portalv2/settling', + 'HubOperations/Portalv2/checking-settlement-details', + 'HubOperations/Portalv2/monitoring-dfsp-financial-details', + 'HubOperations/Portalv2/enabling-disabling-transactions', + 'HubOperations/Portalv2/recording-funds-in-out', + 'HubOperations/Portalv2/updating-ndc', + 'HubOperations/Portalv2/searching-for-transfer-data' + ] + }, + { + title: 'Contrôle d\'Accès Basé sur les Rôles', + collapsable: true, + sidebarDepth: 2, + children: [ + 'HubOperations/RBAC/Role-based-access-control' + ] + }, + { + title: 'Guide d\'Intégration pour l\'Opérateur du Hub', + collapsable: true, + sidebarDepth: 2, + children: [ + 'HubOperations/Onboarding/onboarding-introduction', + 'HubOperations/Onboarding/business-onboarding', + 'HubOperations/Onboarding/technical-onboarding', + ] + } + ] + } ] } }, @@ -1183,8 +1277,8 @@ module.exports = { }, '/fr/': { lang: 'fr-FR', - title: 'Mojaloop Documentation', - description: '', + title: 'Documentation Mojaloop', + description: 'Documentation officielle du projet Mojaloop', }, }, }; diff --git a/docs/.vuepress/enhanceApp.js b/docs/.vuepress/enhanceApp.js index 8452a8689..be9e13dfe 100644 --- a/docs/.vuepress/enhanceApp.js +++ b/docs/.vuepress/enhanceApp.js @@ -4,11 +4,34 @@ * https://v1.vuepress.vuejs.org/guide/basic-config.html#app-level-enhancements */ +const LOCALE_STORAGE_KEY = 'mojaloop-docs-locale-redirected' + +function getBrowserLang () { + if (typeof navigator === 'undefined') return 'en' + const lang = navigator.language || navigator.userLanguage || '' + return lang.toLowerCase().split('-')[0] +} + export default ({ - Vue, // the version of Vue being used in the VuePress app - options, // the options for the root Vue instance - router, // the router instance for the app - siteData // site metadata + Vue, + options, + router, + siteData, + isServer }) => { - // ...apply enhancements for the site. + if (isServer) return + + router.afterEach((to) => { + const alreadyRedirected = sessionStorage.getItem(LOCALE_STORAGE_KEY) + if (alreadyRedirected) return + + sessionStorage.setItem(LOCALE_STORAGE_KEY, '1') + + const browserLang = getBrowserLang() + const isOnFrenchPage = to.path.startsWith('/fr/') + + if (browserLang === 'fr' && !isOnFrenchPage) { + return router.replace('/fr' + to.path) + } + }) } diff --git a/docs/.vuepress/theme/layouts/404.vue b/docs/.vuepress/theme/layouts/404.vue index 4eef36d34..35c65f870 100644 --- a/docs/.vuepress/theme/layouts/404.vue +++ b/docs/.vuepress/theme/layouts/404.vue @@ -3,23 +3,44 @@

404

{{ getMsg() }}
- Take me home. + {{ homeLinkText }}