1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
| <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!--
##########################
### Template Général ###
##########################
-->
<xsl:template match="T_SEPA_HEADER">
<!-- <Document xmlns="urn:iso:xsd:$pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="urn:iso:xsd:$pain.008.001.02.xsd"> -->
<Document xmlns="urn:iso:xsd:$pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="urn:iso:xsd:$pain.008.001.02.xsd">
<CstmrDrctDbtInitn>
<xsl:call-template name="Header"/>
<xsl:apply-templates select="T_SEPA_PMTINF"/>
</CstmrDrctDbtInitn>
</Document>
</xsl:template>
<!--
========================================
| Mise en forme de l'entête de message |
========================================
-->
<xsl:template name="Header">
<GrpHdr>
<MsgId><xsl:value-of select="MsgId"/></MsgId> <!-- Identifiant du message. Maxi 35 caractères -->
<CreDtTm><xsl:value-of select="CreDtTm"/></CreDtTm> <!-- Date de création du message -->
<NbOfTxs><xsl:value-of select="NbOfTxsGlobal"/></NbOfTxs> <!-- Nombre de transactions dans le message -->
<CtrlSum><xsl:value-of select="CtrlSumGlobal"/></CtrlSum> <!-- Montant total des transactions du message -->
<InitgPty>
<Nm><xsl:value-of select="InitgPtyNm"/></Nm> <!-- Nom de l'émetteur du message -->
</InitgPty>
</GrpHdr>
</xsl:template>
<!--
=======================================
| Mise en forme des paramètres de lot |
=======================================
-->
<xsl:template match="T_SEPA_PMTINF">
<PmtInf>
<PmtInfId><xsl:value-of select="PmtInfId"/></PmtInfId> <!-- Identifiant de la remise. Maxi 35 caractères -->
<PmtInfMtd>DD</PmtInfMtd> <!-- Valeur Imposée par l'iso -->
<BtchBookg><xsl:if test="BtchBookg = 0">false</xsl:if><xsl:if test="BtchBookg != 0">true</xsl:if></BtchBookg> <!-- Si "true" comptabilisation globale des remises, si "false" comptabilisation unitaire -->
<NbOfTxs><xsl:value-of select="NbOfTxsLot"/></NbOfTxs> <!-- Nombre de transactions dans le lot -->
<CtrlSum><xsl:value-of select="CtrlSumLot"/></CtrlSum> <!-- Montant total du lot -->
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd> <!-- Valeur Imposée par l'iso -->
</SvcLvl>
<LclInstrm>
<Cd><xsl:value-of select="LclInstrmCd"/></Cd> <!-- En fonction du débiteur : "CORE" si particulier, "B2B" si entreprise -->
</LclInstrm>
<SeqTp><xsl:value-of select="SeqTp"/></SeqTp> <!-- Type de lot : "FRST", "RCUR", "FNAL", "OOFF" (ce dernier=ponctuel) -->
</PmtTpInf>
<ReqdColltnDt><xsl:value-of select="ReqdColltnDt"/></ReqdColltnDt> <!-- Echéance des prélèvement du lot -->
<Cdtr>
<Nm><xsl:value-of select="CdtrNm"/></Nm> <!-- Nom du créancier - 140 caractères maxi. -->
</Cdtr> <!-- Informations sur le créancier -->
<CdtrAcct> <!-- Informations sur le compte du créancier -->
<Id>
<IBAN><xsl:value-of select="CdtrIBAN"/></IBAN> <!-- IBAN du créancier - 34 caractères maxi. -->
</Id>
</CdtrAcct>
<CdtrAgt> <!-- Informations sur la banque du créancier -->
<xsl:if test="string-length(CdtrBIC) > 0">
<FinInstnId>
<BIC><xsl:value-of select="CdtrBIC"/></BIC> <!-- BIC du créancier - aussi appelé "Code SWIFT", 8 ou 11 caractères. -->
</FinInstnId>
</xsl:if>
<xsl:if test="string-length(CdtrBIC) < 1">
<Othr>
<Id>NOTPROVIDED</Id> <!-- Valeur imposée si le BIC n'est pas fourni -->
</Othr>
</xsl:if>
</CdtrAgt>
<ChrgBr>SLEV</ChrgBr> <!-- Réparticion des frais. Valeur Imposée par l'iso -->
<CdtrSchmeId>
<Id>
<PrvtId>
<Othr>
<Id><xsl:value-of select="CdtrId"/></Id> <!-- ICS (Identificateur Créancier SEPA) - 13 caractères -->
<SchmeNm>
<Prtry>SEPA</Prtry> <!-- Valeur imposée par l'iso -->
</SchmeNm>
</Othr>
</PrvtId>
</Id>
</CdtrSchmeId>
<xsl:for-each select="T_SEPA_DRCTDBT">
<xsl:apply-templates select="."/>
</xsl:for-each>
</PmtInf>
</xsl:template>
<!--
===============================================
| Mise en forme des paramètres de transaction |
===============================================
-->
<xsl:template match="//T_SEPA_DRCTDBT">
<DrctDbtTxInf> <!-- Eléments de la transaction -->
<PmtId> <!-- Références de l'opération -->
<InstrId><xsl:value-of select="InstrId"/></InstrId> <!-- Optionel : Référence comptable. Si renseignée, supplante EndToEndId ci-dessous. 35 caractères maxi. -->
<EndToEndId><xsl:value-of select="EndToEndId"/></EndToEndId> <!-- "Référence Bout en Bout" obligatoire car restituée telle quelle au débiteur -->
</PmtId>
<InstdAmt Ccy="EUR"><xsl:value-of select="InstdAmt"/></InstdAmt> <!-- Montant en Euros du prélèvement SEPA -->
<DrctDbtTx> <!-- Eléments du mandat-->
<MndtRltdInf> <!-- Informations relatives au mandat. -->
<MndtId><xsl:value-of select="MndtId"/></MndtId> <!-- Référence unique du mandat. 35 caractères maxi. -->
<DtOfSgntr><xsl:value-of select="DtOfSgntr"/></DtOfSgntr> <!-- Date de signature du mandat de prelevement -->
<xsl:if test="AmdmntInd != 0"> <!-- Partie conditionnelle : apparaît uniquement en cas de modification du mandat -->
<xsl:call-template name="ModificationMandat"/>
</xsl:if>
</MndtRltdInf>
</DrctDbtTx>
<DbtrAgt> <!-- Banque du débiteur -->
<FinInstnId>
<xsl:if test="string-length(DbtrBIC) > 0">
<BIC><xsl:value-of select="DbtrBIC"/></BIC> <!-- BIC du créancier - aussi appelé "Code SWIFT", 8 ou 11 caractères. -->
</xsl:if>
<xsl:if test="string-length(DbtrBIC) < 1">
<Othr>
<Id>NOTPROVIDED</Id> <!-- Valeur imposée si le BIC n'est pas fourni -->
</Othr>
</xsl:if>
</FinInstnId>
</DbtrAgt>
<Dbtr> <!-- débiteur titulaire du compte à débiter -->
<Nm><xsl:value-of select="DbtrNm"/></Nm> <!-- Nom ou Raison Sociale du débité - 140 caractères maxi. -->
</Dbtr>
<DbtrAcct>
<Id>
<IBAN><xsl:value-of select="DbtrIBAN"/></IBAN> <!-- IBAN du débiteur - 34 caractères maxi. -->
</Id>
</DbtrAcct>
<RmtInf> <!-- Motif de paiement -->
<xsl:if test="string-length(StrdRef) < 1">
<Ustrd><xsl:value-of select="Ustrd"/></Ustrd> <!-- Motif du paiement (Cotisation, Don, Abonnement,
) - 140 caractères maxi. -->
</xsl:if>
<xsl:if test="string-length(StrdRef) > 0">
<Strd>
<CdtrRefInf>
<Tp>
<CdOrPrtry>
<CD>SCOR</CD>
</CdOrPrtry>
</Tp>
<Ref><xsl:value-of select="StrdRef"/></Ref> <!-- Si elle existe, référence structurée de la transaction - 35 caractères maxi. -->
</CdtrRefInf>
</Strd>
</xsl:if>
</RmtInf>
</DrctDbtTxInf>
</xsl:template>
<!--
................................................................
... Sous-templates utilisés en cas de modification de mandat ...
................................................................
-->
<!-- Template général pour les modifications de mandat -->
<xsl:template name="ModificationMandat">
<AmdmntInd>true</AmdmntInd> <!-- En cas de modification du mandat, doit apparaître avec la valeur 'true' -->
<AmdmntInfDtls>
<xsl:if test="string-length(OrgnlMndtId) > 0">
<OrgnlMndtId><xsl:value-of select="OrgnlMndtId"/></OrgnlMndtId> <!-- Identifiant original du mandat. Obligatoire en cas de changement, interdit sinon - 35 caractères maxi. -->
</xsl:if>
<xsl:if test="string-length(OrgnlCdtrNm) > 0 or string-length(AncienIdSepaCdtr) > 0">
<xsl:call-template name="ModificationsCreancier"/>
</xsl:if>
<xsl:if test="string-length(OrgnlDbtrIBAN) > 0">
<xsl:call-template name="ModificationCompteDebiteur"/>
</xsl:if>
<xsl:if test="ChangementBanqueDebiteur != 0"> <!-- Booléen créé pour la programmation. N'existe pas dans le SEPA -->
<xsl:call-template name="ModificationBanqueDebiteur"/>
</xsl:if>
</AmdmntInfDtls>
</xsl:template>
<!-- Template pour les changements relatifs au créancier -->
<xsl:template name="ModificationsCreancier">
<OrgnlCdtrSchemeId> <!-- Anciennes données relatives au créancier. N'utiliser que si nécessaire. -->
<xsl:if test="string-length(OrgnlCdtrNm) > 0">
<Nm><xsl:value-of select="OrgnlCdtrNm"/></Nm> <!-- Ancien nom du créancier. Obligatoire si changement de nom du créancier, interdit sinon - 140 caractères maxi. -->
</xsl:if>
<xsl:if test="string-length(AncienIdSepaCdtr) > 0">
<Id> <!-- A utiliser soit lors d'un changement d'ICS, soit suite à la migration du prélèvement national vers le SEPA -->
<PrvtId>
<Othr>
<Id><xsl:value-of select="AncienIdSepaCdtr"/></Id> <!-- Ancien ICS du créancier, ou 'NNE' en cas de migration du virement national vers le prélèvement SEPA - 13 caractères maxi. -->
<xsl:if test="AncienIdSepaCdtr != 'NNE'">
<SchmeNm> <!-- Obligatoire si l'ancien identifiant du créancier était un ICS, ne pas utiliser si NNE -->
<Prtry>SEPA</Prtry> <!-- Valeur 'SEPA' imposée par l'iso -->
</SchmeNm>
</xsl:if>
</Othr>
</PrvtId>
</Id>
</xsl:if>
</OrgnlCdtrSchemeId>
</xsl:template>
<!-- Template pour les changements de numéro de compte débiteur -->
<xsl:template name="ModificationCompteDebiteur">
<OrgnlDbtrAcct>
<Id>
<IBAN><xsl:value-of select="OrgnlDbtrIBAN"/></IBAN> <!-- Ancien numéro de compte débiteur. Interdit si pas de changement. Seul l'IBAN est autorisé - 34 caractères maxi. -->
</Id>
</OrgnlDbtrAcct>
</xsl:template>
<xsl:template name="ModificationBanqueDebiteur">
<OrgnlDbtrAgt> <!-- A n'utiliser qu'en cas de changement de banque du débiteur -->
<FinInstnId>
<Othr>
<Id>SMNDA</Id> <!-- Valeur imposée (Same Mandat New Debtor Agent) -->
</Othr>
</FinInstnId>
</OrgnlDbtrAgt>
</xsl:template>
</xsl:stylesheet> |
Partager