Adeudos Directos SEPA en euros Esquema B2B

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby fgondi » Mon Oct 14, 2013 2:51 pm

Esta es la función que uso para calcular el iban:
Hay que pasar 2 parametros: el pais y la cuenta bancaria.

Code: Select all  Expand view  RUN
func Iban( cPais, cCCC)
*--- Calcular c¢digo Iban de una cuenta
local i, cAux := cCCC

cPais := Upper( cPais)
i := asc( substr( cPais, 1, 1)) - 55   // A := 10, B := 11, E := 14, ...
cAux := cCcc + Str( i, 2)
i := asc( substr( cPais, 2, 1)) - 55
cAux += Str( i, 2)+'00'
i := 98 - RestoDiv( cAux, 97)
return cPais+Padl( i, 2, '0')+cCCC
 


En cuanto a los Swift/Bic os dejo un pdf con los codigos de cada entidad
http://www.bde.es/f/webbde/SPA/sispago/t2/TARGET2_BE_BIC.pdf
Con esto tendríamos casi todo, quedaría si alguna sucursal tiene su propio código (usan los 3 ultimos signos, "XXX", para identificarse)

¿Alguien tiene un fichero xml que nos sirva a modo de ejemplo para poder construir los soportes magnéticos?
Por ahora no consigo dar con ninguno, y las aplicaciones de los bancos o bien son On-line o lo que generan es un archivo de texto plano.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby Joaquim Ferrer » Mon Oct 14, 2013 3:37 pm

Buenas

Recuperando funciones que pueden servir
https://github.com/QuimFerrer/sepa

Saludos
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista
User avatar
Joaquim Ferrer
 
Posts: 105
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby mastintin » Mon Oct 14, 2013 3:42 pm

codigo javscript para el bic .... un array con los bancos ( sustituible por un Hash ) y una funcion que se puede pasar a harbour ...

Code: Select all  Expand view  RUN

var BIC = new Array()
BIC[30]='ESPCESMMXXX';
BIC[73]='OPENESMMXXX';
BIC[83]='RENBESMMXXX';
BIC[122]='CITIES2XXXX';
BIC[186]='BFIVESBBXXX';
BIC[200]='PRVBESB1XXX';
BIC[224]='SCFBESMMXXX';
BIC[1545]='AGRIESMMXXX';
BIC[49]='BSCHESMMXXX';
BIC[36]='SABNESMMXXX';
BIC[86]='NORTESMMXXX';
BIC[61]='BMARES2MXXX';
BIC[65]='BARCESMMXXX';
BIC[75]='POPUESMMXXX';
BIC[3]='BDEPESM1XXX';
BIC[72]='PSTRESMMXXX';
BIC[216]='POHIESMMXXX';
BIC[229]='POPLESMMXXX';
BIC[233]='POPIESMMXXX';
BIC[1459]='PRABESMMXXX';
BIC[81]='BSABESBBXXX';
BIC[231]='DSBLESMMXXX';
BIC[93]='VALEESVVXXX';
BIC[128]='BKBKESMMXXX';
BIC[182]='BBVAESMMXXX';
BIC[57]='BVADESMMXXX';
BIC[58]='BNPAESMMXXX';
BIC[130]='CGDIESMMXXX';
BIC[136]='AREBESMMXXX';
BIC[149]='BNPAESMSXXX';
BIC[196]='WELAESMMXXX';
BIC[219]='BMCEESMMXXX';
BIC[220]='FIOFESM1XXX';
BIC[227]='UNOEESM1XXX';
BIC[236]='LOYIESMMXXX';
BIC[1460]='CRESESMMXXX';
BIC[1534]='KBLXESMMXXX';
BIC[1544]='BACAESMMXXX';
BIC[2107]='BBVAESMM107';
BIC[198]='BCOEESMMXXX';
BIC[94]='BVALESMMXXX';
BIC[184]='BEDFESM1XXX';
BIC[188]='ALCLESMMXXX';
BIC[235]='PICHESMMXXX';
BIC[1490]='SELFESMMXXX';
BIC[1491]='TRIOESMMXXX';
BIC[3001]='BCOEESMM001';
BIC[3005]='BCOEESMM005';
BIC[3007]='BCOEESMM007';
BIC[3008]='BCOEESMM008';
BIC[3009]='BCOEESMM009';
BIC[3016]='BCOEESMM016';
BIC[3017]='BCOEESMM017';
BIC[3018]='BCOEESMM018';
BIC[3020]='BCOEESMM020';
BIC[3023]='BCOEESMM023';
BIC[3059]='BCOEESMM059';
BIC[3060]='BCOEESMM060';
BIC[3063]='BCOEESMM063';
BIC[3067]='BCOEESMM067';
BIC[3070]='BCOEESMM070';
BIC[3076]='BCOEESMM076';
BIC[3080]='BCOEESMM080';
BIC[3081]='BCOEESMM081';
BIC[3085]='BCOEESMM085';
BIC[3089]='BCOEESMM089';
BIC[3096]='BCOEESMM096';
BIC[3098]='BCOEESMM098';
BIC[3104]='BCOEESMM104';
BIC[3111]='BCOEESMM111';
BIC[3113]='BCOEESMM113';
BIC[3115]='BCOEESMM115';
BIC[3116]='BCOEESMM116';
BIC[3117]='BCOEESMM117';
BIC[3127]='BCOEESMM127';
BIC[3130]='BCOEESMM130';
BIC[3134]='BCOEESMM134';
BIC[3138]='BCOEESMM138';
BIC[3144]='BCOEESMM144';
BIC[3146]='CCCVESM1XXX';
BIC[3150]='BCOEESMM150';
BIC[3159]='BCOEESMM159';
BIC[3162]='BCOEESMM162';
BIC[3166]='BCOEESMM166';
BIC[3174]='BCOEESMM174';
BIC[3187]='BCOEESMM187';
BIC[3190]='BCOEESMM190';
BIC[3191]='BCOEESMM191';
BIC[2000]='CECAESMMXXX';
BIC[125]='BAOFESM1XXX';
BIC[138]='BKOAES22XXX';
BIC[211]='PROAESMMXXX';
BIC[487]='GBMNESMMXXX';
BIC[1474]='CITIESMXXXX';
BIC[1480]='VOWAES21XXX';
BIC[2010]='CECAESMM010';
BIC[2017]='CECAESMM017';
BIC[2031]='CECAESMM031';
BIC[2043]='CECAESMM043';
BIC[2045]='CECAESMM045';
BIC[2048]='CECAESMM048';
BIC[2051]='CECAESMM051';
BIC[2056]='CECAESMM056';
BIC[2066]='CECAESMM066';
BIC[2080]='CAGLESMMXXX';
BIC[2081]='CECAESMM081';
BIC[2086]='CECAESMM086';
BIC[2096]='CSPAES2LXXX';
BIC[2099]='CECAESMM099';
BIC[2103]='UCJAES2MXXX';
BIC[2104]='CSSOES2SXXX';
BIC[2105]='CECAESMM105';
BIC[2013]='CESCESBBXXX';
BIC[2038]='CAHMESMMXXX';
BIC[99]='AHCRESVVXXX';
BIC[232]='INVLESMMXXX';
BIC[2085]='CAZRES2ZXXX';
BIC[2095]='BASKES2BXXX';
BIC[59]='MADRESMMXXX';
BIC[237]='CSURES2CXXX';
BIC[2100]='CAIXESBBXXX';
BIC[133]='MIKBESB1XXX';
BIC[3058]='CCRIES2AXXX';
BIC[46]='GALEES2GXXX';
BIC[31]='ETCHES2GXXX';
BIC[78]='BAPUES22XXX';
BIC[160]='BOTKESMXXXX';
BIC[234]='CCOCESMMXXX';
BIC[1465]='INGDESMMXXX';
BIC[1475]='CCSEESM1XXX';
BIC[3025]='CDENESBBXXX';
BIC[3029]='CCRIES2A029';
BIC[3035]='CLPEES2MXXX';
BIC[3045]='CCRIES2A045';
BIC[3084]='CVRVES2BXXX';
BIC[3095]='CCRIES2A095';
BIC[3102]='BCOEESMM102';
BIC[3105]='CCRIES2A105';
BIC[3110]='BCOEESMM110';
BIC[3112]='CCRIES2A112';
BIC[3118]='CCRIES2A118';
BIC[3119]='CCRIES2A119';
BIC[3121]='CCRIES2A121';
BIC[3123]='CCRIES2A123';
BIC[3135]='CCRIES2A135';
BIC[3137]='CCRIES2A137';
BIC[3140]='BCOEESMM140';
BIC[3152]='CCRIES2A152';
BIC[3157]='CCRIES2A157';
BIC[3160]='CCRIES2A160';
BIC[3165]='CCRIES2A165';
BIC[3177]='BCOEESMM177';
BIC[3179]='CCRIES2A179';
BIC[3183]='CASDESBBXXX';
BIC[3186]='CCRIES2A186';
BIC[3188]='CCRIES2A188';
BIC[9000]='ESPBESMMXXX';

function getBIC(form, lang)
{
    if (lang == "en") {
        alert('This conversion tool is provided for information purposes only. The authors reserve the right to remove or cancel its diffusion, either partially or in whole, as well as to modify its structure or contents without previous notice. Access to the information supplied by this tool can be restricted or forbidden anytime.\n\n Though every attempt has been made to ensure that the information contained in this tool is reliable and up-to-date in order to try to avoid and minimize potential mistakes, the authors are not responsible for any errors, omissions or even for the interruption of the service. Hence, all information in this site is provided "as is", with no guarantee of completeness, accuracy, timeliness or of the results obtained from the use of this information.\n\n In no event will the authors be liable to provide compensation to anyone for any decisions made or actions taken in reliance of the information obtained from the use of this tool or for any consequential, special or similar damages including those on the user software or hardware, even if advised of the possibility of such damages. \n\nBy using this conversion tool, you acknowledge you have read, understood and accepted the above provisions and agreed with the terms of the service.');
    } else {
        alert('La presente herramienta de conversión se facilita únicamente a título informativo, reservándose los autores el derecho de eliminar o suspender su difusión, total o parcialmente, y de modificar la estructura y contenido de esta herramienta sin aviso previo, pudiendo incluso limitar o no permitir el acceso a la información que suministra dicha herramienta.\n\n El propósito de los autores es mantener la calidad y actualización de su información y evitar y minimizar posibles errores causados por fallos. Sin embargo, no garantiza que este servicio no sea interrumpido o afectado por eventuales fallos. \n\nComo consecuencia de lo anterior, los autores no responderán de los daños o perjuicios causados por decisiones tomadas en base a la información obtenida de esta herramienta; ni de posibles inexactitudes, omisiones o errores contenidos en dicha información, ni de los problemas que se originen por el uso de esta herramienta, ni de los daños y/o perjuicios en el software o hardware del usuario que se deriven su utilización. \n\nLos usuarios de esta herramienta, al acceder a la misma, aceptan la presente cláusula, estando de acuerdo con su contenido.');
    }
    var a=form.entitat.value;
    if (!validarCC(form)) {
            document.getElementById("ibanprintxt").innerHTML="";
        if (lang == "en") {
                alert('The account number is incorrect.');
            } else {
                alert('El numero de cuenta introducido es incorrecto.');
           
            }
        }
    else {
        while (a.substr(0,1)=="0") a=a.substr(1);
        document.getElementById("bictxt").innerHTML = BIC[a];
    }
}

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby Joaquim Ferrer » Mon Oct 14, 2013 3:48 pm

@fgondi este puede ser un XML básico, tengo identificados algunos campos
Code: Select all  Expand view  RUN

<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
    <CstmrCdtTrfInitn>
        <GrpHdr>
            <MsgId>transferID</MsgId>
            <CreDtTm>2013-07-17T17:07:12</CreDtTm>
            <NbOfTxs>1</NbOfTxs>
            <CtrlSum>0.02</CtrlSum>
            <InitgPty>
                <Nm>Me</Nm>
            </InitgPty>
        </GrpHdr>
        <PmtInf>
            <PmtInfId>Payment Info ID</PmtInfId>
            <PmtMtd>TRF</PmtMtd>
            <NbOfTxs>1</NbOfTxs>
            <CtrlSum>0.02</CtrlSum>
            <PmtTpInf>
                <SvcLvl>
                    <Cd>SEPA</Cd>
                </SvcLvl>
            </PmtTpInf>
            <ReqdExctnDt>2013-07-17</ReqdExctnDt>
            <Dbtr>
                <Nm>My Corp</Nm>
            </Dbtr>
            <DbtrAcct>
                <Id>
                    <IBAN>MY_ACCOUNT_IBAN</IBAN>
                </Id>
                <Ccy>EUR</Ccy>
            </DbtrAcct>
            <DbtrAgt>
                <FinInstnId>
                    <BIC>MY_BANK_BIC</BIC>
                </FinInstnId>
            </DbtrAgt>
            <ChrgBr>SLEV</ChrgBr>
            <CdtTrfTxInf>
                <PmtId>
                    <InstrId>Id shown in bank statement</InstrId>
                    <EndToEndId>transferID/0</EndToEndId>
                </PmtId>
                <Amt>
                    <InstdAmt Ccy="EUR">0.02</InstdAmt>
                </Amt>
                <CdtrAgt>
                    <FinInstnId>
                        <BIC>THEIR_BANK_BIC</BIC>
                    </FinInstnId>
                </CdtrAgt>
                <Cdtr>
                    <Nm>THEIR_NAME</Nm>
                </Cdtr>
                <CdtrAcct>
                    <Id>
                        <IBAN>THEIR_IBAN</IBAN>
                    </Id>
                </CdtrAcct>
                <RmtInf>
                    <Ustrd>Transaction description</Ustrd>
                </RmtInf>
            </CdtTrfTxInf>
        </PmtInf>
    </CstmrCdtTrfInitn>
</Document>
 
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista
User avatar
Joaquim Ferrer
 
Posts: 105
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby mastintin » Mon Oct 14, 2013 4:20 pm

en esta direcion viene que son cada campo y un ejemplo de archivo ... http://docs.oracle.com/cd/E39564_01/doc ... e_appx.htm
tambien a modo de lectura el libro de formatos iso 20022 para dummies que tiene ejemplos de archivos: http://www.iso20022.ch/resources/iso_dummies.pdf
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby fgondi » Mon Oct 14, 2013 4:31 pm

Muchas gracias
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby mastintin » Mon Oct 14, 2013 8:31 pm

La funcion GetBic de antes pasada de javascript a harbour :

Code: Select all  Expand view  RUN

Function GetBic(cEntidad)

local Bic:= {=>}
local nEnt

BIC["30"]='ESPCESMMXXX';
BIC["73"]='OPENESMMXXX';
BIC["83"]='RENBESMMXXX';
BIC["122"]='CITIES2XXXX';
BIC["186"]='BFIVESBBXXX';
BIC["200"]='PRVBESB1XXX';
BIC["224"]='SCFBESMMXXX';
BIC["1545"]='AGRIESMMXXX';
BIC["49"]='BSCHESMMXXX';
BIC["36"]='SABNESMMXXX';
BIC["86"]='NORTESMMXXX';
BIC["61"]='BMARES2MXXX';
BIC["65"]='BARCESMMXXX';
BIC["75"]='POPUESMMXXX';
BIC["3"]='BDEPESM1XXX';
BIC["72"]='PSTRESMMXXX';
BIC["216"]='POHIESMMXXX';
BIC["229"]='POPLESMMXXX';
BIC["233"]='POPIESMMXXX';
BIC["1459"]='PRABESMMXXX';
BIC["81"]='BSABESBBXXX';
BIC["231"]='DSBLESMMXXX';
BIC["93"]='VALEESVVXXX';
BIC["128"]='BKBKESMMXXX';
BIC["182"]='BBVAESMMXXX';
BIC["57"]='BVADESMMXXX';
BIC["58"]='BNPAESMMXXX';
BIC["130"]='CGDIESMMXXX';
BIC["136"]='AREBESMMXXX';
BIC["149"]='BNPAESMSXXX';
BIC["196"]='WELAESMMXXX';
BIC["219"]='BMCEESMMXXX';
BIC["220"]='FIOFESM1XXX';
BIC["227"]='UNOEESM1XXX';
BIC["236"]='LOYIESMMXXX';
BIC["1460"]='CRESESMMXXX';
BIC["1534"]='KBLXESMMXXX';
BIC["1544"]='BACAESMMXXX';
BIC["2107"]='BBVAESMM107';
BIC["198"]='BCOEESMMXXX';
BIC["94"]='BVALESMMXXX';
BIC["184"]='BEDFESM1XXX';
BIC["188"]='ALCLESMMXXX';
BIC["235"]='PICHESMMXXX';
BIC["1490"]='SELFESMMXXX';
BIC["1491"]='TRIOESMMXXX';
BIC["3001"]='BCOEESMM001';
BIC["3005"]='BCOEESMM005';
BIC["3007"]='BCOEESMM007';
BIC["3008"]='BCOEESMM008';
BIC["3009"]='BCOEESMM009';
BIC["3016"]='BCOEESMM016';
BIC["3017"]='BCOEESMM017';
BIC["3018"]='BCOEESMM018';
BIC["3020"]='BCOEESMM020';
BIC["3023"]='BCOEESMM023';
BIC["3059"]='BCOEESMM059';
BIC["3060"]='BCOEESMM060';
BIC["3063"]='BCOEESMM063';
BIC["3067"]='BCOEESMM067';
BIC["3070"]='BCOEESMM070';
BIC["3076"]='BCOEESMM076';
BIC["3080"]='BCOEESMM080';
BIC["3081"]='BCOEESMM081';
BIC["3085"]='BCOEESMM085';
BIC["3089"]='BCOEESMM089';
BIC["3096"]='BCOEESMM096';
BIC["3098"]='BCOEESMM098';
BIC["3104"]='BCOEESMM104';
BIC["3111"]='BCOEESMM111';
BIC["3113"]='BCOEESMM113';
BIC["3115"]='BCOEESMM115';
BIC["3116"]='BCOEESMM116';
BIC["3117"]='BCOEESMM117';
BIC["3127"]='BCOEESMM127';
BIC["3130"]='BCOEESMM130';
BIC["3134"]='BCOEESMM134';
BIC["3138"]='BCOEESMM138';
BIC["3144"]='BCOEESMM144';
BIC["3146"]='CCCVESM1XXX';
BIC["3150"]='BCOEESMM150';
BIC["3159"]='BCOEESMM159';
BIC["3162"]='BCOEESMM162';
BIC["3166"]='BCOEESMM166';
BIC["3174"]='BCOEESMM174';
BIC["3187"]='BCOEESMM187';
BIC["3190"]='BCOEESMM190';
BIC["3191"]='BCOEESMM191';
BIC["2000"]='CECAESMMXXX';
BIC["125"]='BAOFESM1XXX';
BIC["138"]='BKOAES22XXX';
BIC["211"]='PROAESMMXXX';
BIC["487"]='GBMNESMMXXX';
BIC["1474"]='CITIESMXXXX';
BIC["1480"]='VOWAES21XXX';
BIC["2010"]='CECAESMM010';
BIC["2017"]='CECAESMM017';
BIC["2031"]='CECAESMM031';
BIC["2043"]='CECAESMM043';
BIC["2045"]='CECAESMM045';
BIC[2048"]='CECAESMM048';
BIC["
2051"]='CECAESMM051';
BIC["
2056"]='CECAESMM056';
BIC["
2066"]='CECAESMM066';
BIC["
2080"]='CAGLESMMXXX';
BIC["
2081"]='CECAESMM081';
BIC["
2086"]='CECAESMM086';
BIC["
2096"]='CSPAES2LXXX';
BIC["
2099"]='CECAESMM099';
BIC["
2103"]='UCJAES2MXXX';
BIC["
2104"]='CSSOES2SXXX';
BIC["
2105"]='CECAESMM105';
BIC["
2013"]='CESCESBBXXX';
BIC["
2038"]='CAHMESMMXXX';
BIC["
99"]='AHCRESVVXXX';
BIC["
232"]='INVLESMMXXX';
BIC["
2085"]='CAZRES2ZXXX';
BIC["
2095"]='BASKES2BXXX';
BIC["
59"]='MADRESMMXXX';
BIC["
237"]='CSURES2CXXX';
BIC["
2100"]='CAIXESBBXXX';
BIC["
133"]='MIKBESB1XXX';
BIC["
3058"]='CCRIES2AXXX';
BIC["
46"]='GALEES2GXXX';
BIC["
31"]='ETCHES2GXXX';
BIC["
78"]='BAPUES22XXX';
BIC["
160"]='BOTKESMXXXX';
BIC["
234"]='CCOCESMMXXX';
BIC["
1465"]='INGDESMMXXX';
BIC["
1475"]='CCSEESM1XXX';
BIC["
3025"]='CDENESBBXXX';
BIC["
3029"]='CCRIES2A029';
BIC["
3035"]='CLPEES2MXXX';
BIC["
3045"]='CCRIES2A045';
BIC["
3084"]='CVRVES2BXXX';
BIC["
3095"]='CCRIES2A095';
BIC["
3102"]='BCOEESMM102';
BIC["
3105"]='CCRIES2A105';
BIC["
3110"]='BCOEESMM110';
BIC["
3112"]='CCRIES2A112';
BIC["
3118"]='CCRIES2A118';
BIC["
3119"]='CCRIES2A119';
BIC["
3121"]='CCRIES2A121';
BIC["
3123"]='CCRIES2A123';
BIC["
3135"]='CCRIES2A135';
BIC["
3137"]='CCRIES2A137';
BIC["
3140"]='BCOEESMM140';
BIC["
3152"]='CCRIES2A152';
BIC["
3157"]='CCRIES2A157';
BIC["
3160"]='CCRIES2A160';
BIC["
3165"]='CCRIES2A165';
BIC["
3177"]='BCOEESMM177';
BIC["
3179"]='CCRIES2A179';
BIC["
3183"]='CASDESBBXXX';
BIC["
3186"]='CCRIES2A186';
BIC["
3188"]='CCRIES2A188';
BIC["
9000"]='ESPBESMMXXX';

nEnt:= val(cEntidad)
cEntidad:=alltrim(str(nEnt))

Return BIC[cEntidad]

User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby FiveWiDi » Mon Oct 14, 2013 9:06 pm

Este foro es una maravilla. No he empezado a mirar el asunto y ya hay mucha información aquí.
Muchas gracias a todos por compartir toda esta información.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1190
Joined: Mon Oct 10, 2005 2:38 pm

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby mastintin » Tue Oct 15, 2013 7:39 am

Otra funcion necesaria :

1.2 Fecha y hora de creación - CreationDateTime
• Definición: Fecha y hora cuando la parte iniciadora ha creado un (grupo de) instrucciones de pago.
• Etiqueta XML: <CreDtTm>
• Ocurrencias: [1..1]
• Formato: ISODateTime YYYY-MM-DDThh:mm:ss (Año-mes-día)
Ejemplo: 10 de junio de 2010, a las 08:35 horas y 30 segundos.
<CreDtTm>2010-06-10T08:35:30</CreDtTm>

Se ha dividido en dos funciones pues CreateisoDate() se usa tambien para :

2.17 Fecha de ejecución solicitada - RequestedExecutionDate
• Definición: Fecha en la que la parte iniciadora solicita a la entidad del ordenante que procese el pago. Es la fecha en la que se adeudarán las transferencias en la cuenta del ordenante.
• Etiqueta XML: <ReqdExctnDt>
• Ocurrencias: [1..1]
• Formato: ISODate: YYYY-MM-DD (Año-Mes-Día)

Code: Select all  Expand view  RUN


Function CreateIsoDate(dDate)
 LOCAL cFecha
DEFAULT dDate:= Date()
    cFecha:= Dtos(dDate)
RETURN Left(cfecha,4)+"-"+SubStr(cFecha,5,2)+"-"+SubStr(cFecha,7,2)


FUNCTION CreaIsoDateTime()
   LOCAL cFecha:= Dtos(Date())
RETURN CreateIsoDate()+"T"+Time()

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby mastintin » Tue Oct 15, 2013 8:30 am

Siguiendo el archivo puesto por Joaquim Ferrer he ido identificando los campos y los he comentado . Pongo de momento solo la cabecera del archivo para no hacer un "taco" de mensaje.

Code: Select all  Expand view  RUN


<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"> // inicio de documento
    <CstmrCdtTrfInitn>  // etiqueta raiz del mensaje (unica y obligatoria )

        <GrpHdr>  // etiqueta de cabecera de grupo (unica y obligatoria )
            <MsgId>transferID</MsgId>  // Identificacion del mensaje 35 caracteres maximo ( similar a codigo de remesa )
            <CreDtTm>2013-07-17T17:07:12</CreDtTm> // fecha creacion formato ISO
            <NbOfTxs>1</NbOfTxs>   // numero de operaciones individuales (para control )
            <CtrlSum>0.02</CtrlSum> //Suma de importes imcluidos ( para control)
            <InitgPty> // iniciador del pago ( identifica al pagador)
                <Nm>Me</Nm> // el NIF-Sufijo (12 caracteres) cuyo uso tenga acordado con su entidad financiera
            </InitgPty>
        </GrpHdr> // fin de grupo cabecera

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby mastintin » Tue Oct 15, 2013 9:13 am

Creo que lo suyo sería empezar por una cosa simple como es la creación del sustituto a csb34 para pago de nominas , algo simple , para luego ir añadiendo las otras figuras de pago .
Creo que para esto ya casi tenemos toda la imformacion necesaria.
La parte de la informacion del pago :
Code: Select all  Expand view  RUN


    <PmtInf>  // inicio bloque de informacion de pagos
            <PmtInfId>Payment Info ID</PmtInfId>  // codigo de "recibo"
            <PmtMtd>TRF</PmtMtd> // metodo de pago (TRF/CHK) trasferencia o cheque
            <NbOfTxs>1</NbOfTxs>
            <CtrlSum>0.02</CtrlSum>
            <PmtTpInf>  // etiqueta de inicio bloque tipo de pago
                <SvcLvl>  // etiqueta de inicio bloque nivel de servicio
                    <Cd>SEPA</Cd> // codigo de servicio fijo SEPA
                </SvcLvl>
            </PmtTpInf>
            <ReqdExctnDt>2013-07-17</ReqdExctnDt> //Fecha de ejecución solicitada
            <Dbtr>  // etiquet inicio identificacion ordenante
                <Nm>My Corp</Nm>  // nombre del ordenante
            </Dbtr>
            <DbtrAcct> // inicio etiqueta cuenta iban ordenante
                <Id>
                    <IBAN>MY_ACCOUNT_IBAN</IBAN>
                </Id>
                <Ccy>EUR</Ccy> // divisa
            </DbtrAcct>
            <DbtrAgt>    // etiqueta entidad ordenante
                <FinInstnId> // etiqueta identificacion entidad ordenanate
                    <BIC>MY_BANK_BIC</BIC>   // BIC entidad ordenante
                </FinInstnId>
            </DbtrAgt>
            <ChrgBr>SLEV</ChrgBr>  // clausula de gastos (CRED/DEBT/SHAR/SLEV) benefici/ordenante /compartidos/ acordados
            <CdtTrfTxInf> // bloque de informacion trasferencia
                <PmtId>  // bloque instrucciones de pago
                    <InstrId>Id shown in bank statement</InstrId> // numero de recibo max 35caracteres
                    <EndToEndId>transferID/0</EndToEndId>  // identificador de extremo a extremo ¿?
                </PmtId>
                <Amt>  // bloque de importe
                    <InstdAmt Ccy="EUR">0.02</InstdAmt> // importe dos decimales 11 digitos total usar "."
                </Amt>
                <CdtrAgt> // entidad del beneficiario
                    <FinInstnId>
                        <BIC>THEIR_BANK_BIC</BIC> bic beneficiario
                    </FinInstnId>
                </CdtrAgt>
                <Cdtr>   // beneficiario
                    <Nm>THEIR_NAME</Nm>  // nombre beneficiario
                </Cdtr>
                <CdtrAcct>  // cuenta beneficiario
                    <Id>
                        <IBAN>THEIR_IBAN</IBAN>  //iban beneficiario
                    </Id>
                </CdtrAcct>
                <RmtInf> // informacion transacion
                    <Ustrd>Transaction description</Ustrd> /7 descripcion maximo 140caracteres
                </RmtInf>
            </CdtTrfTxInf>
        </PmtInf>

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby Joaquim Ferrer » Tue Oct 15, 2013 9:47 am

@mastintin, una primera aproximacion en codigo
Code: Select all  Expand view  RUN

*
 * MENSAJE DE PRESENTACIÓN DE ADEUDOS DIRECTOS SEPA ESQUEMA B2B (pain.008.001.02)
 */

#include "hbmxml.ch"

function main()

 local oDoc := mxmlNewXML( "1.0" )
   
 /* Header */
    CstmrDrctDbtInitn := mxmlNewElement( oDoc, "CstmrDrctDbtInitn" )
   
    GrpHdr  := mxmlNewElement( CstmrDrctDbtInitn, "GrpHdr" )
    mxmlNewElement( GrpHdr, "MsgId" )
    mxmlNewElement( GrpHdr, "CreDtTm" )
    mxmlNewElement( GrpHdr, "NbOfTxs" )
    mxmlNewElement( GrpHdr, "CtrlSum" )
   
    InitgPty := mxmlNewElement( GrpHdr, "InitgPty" )
    mxmlNewElement( InitgPty, "Nm" )
    Id      := mxmlNewElement( InitgPty, "Id" )
    OrgId   := mxmlNewElement( Id, "OrgId" )
    mxmlNewElement( OrgId, "BICOrBEI" )
   
    Othr    := mxmlNewElement( OrgId, "Othr" )
    mxmlNewElement( Othr, "Id" )
   
    SchmeNm :=  mxmlNewElement( Othr, "SchmeNm" )
    mxmlNewElement( SchmeNm, "Cd" )
    mxmlNewElement( SchmeNm, "Prtry" )
   
    mxmlNewElement( Othr, "Issr" )

    PrvtId  := mxmlNewElement( Id, "PrvtId" )
    DtAndPlcOfBirth := mxmlNewElement( PrvtId, "DtAndPlcOfBirth" )
    mxmlNewElement( DtAndPlcOfBirth, "BirthDt" )
    mxmlNewElement( DtAndPlcOfBirth, "PrvcOfBirth" )
    mxmlNewElement( DtAndPlcOfBirth, "CityOfBirth" )
    mxmlNewElement( DtAndPlcOfBirth, "CtryOfBirth" )
   
    Othr := mxmlNewElement( PrvtId, "Othr" )
    mxmlNewElement( Othr, "Id" )
   
    SchmeNm := mxmlNewElement( Othr, "SchmeNm" )
    mxmlNewElement( SchmeNm, "Cd" )
    mxmlNewElement( SchmeNm, "Prtry" )
   
    mxmlNewElement( Othr, "Issr" )

/* Informacion del pago */
....

    mxmlSaveFile( oDoc, "b2b.xml", MXML_NO_CALLBACK )
return NIL
 
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista
User avatar
Joaquim Ferrer
 
Posts: 105
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby mastintin » Tue Oct 15, 2013 11:05 am

Joaquim , me falta mxmlNewXML,etc ¿ que libreria me falta por enlazar ?
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby Joaquim Ferrer » Tue Oct 15, 2013 11:26 am

@mastintin esas funciones pertenecen a la LIB de Harbour hbmxml. Estoy utilizando la version 3.0 de Harbour
mi entorno es :
Code: Select all  Expand view  RUN

PATH=%PATH%;c:\borland\bcc65\bin;c:\hb30\bin
set compiler=bcc
 

Saludos
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista
User avatar
Joaquim Ferrer
 
Posts: 105
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona

Re: Adeudos Directos SEPA en euros Esquema B2B

Postby lucasdebeltran » Tue Oct 15, 2013 1:36 pm

Compañeros,

Muchas gracias por vuestras contribuciones.

Os paso la función GetBIC de Manuel mejorada un pelín y sin los ; de cada elemento del hash:

Code: Select all  Expand view  RUN
//----------------------------------------------------------------//
FUNCTION GetBic(cEntidad)
//----------------------------------------------------------------//

local BIC:= {=>}
local nEnt
local cDevuelve

BIC["30"]='ESPCESMMXXX'
BIC["2100"]='CAIXESBBXXX'
BIC["73"]='OPENESMMXXX'
BIC["83"]='RENBESMMXXX'
BIC["122"]='CITIES2XXXX'
BIC["186"]='BFIVESBBXXX'
BIC["200"]='PRVBESB1XXX'
BIC["224"]='SCFBESMMXXX'
BIC["1545"]='AGRIESMMXXX'
BIC["49"]='BSCHESMMXXX'
BIC["36"]='SABNESMMXXX'
BIC["86"]='NORTESMMXXX'
BIC["61"]='BMARES2MXXX'
BIC["65"]='BARCESMMXXX'
BIC["75"]='POPUESMMXXX'
BIC["3"]='BDEPESM1XXX'
BIC["72"]='PSTRESMMXXX'
BIC["216"]='POHIESMMXXX'
BIC["229"]='POPLESMMXXX'
BIC["233"]='POPIESMMXXX'
BIC["1459"]='PRABESMMXXX'
BIC["81"]='BSABESBBXXX'
BIC["231"]='DSBLESMMXXX'
BIC["93"]='VALEESVVXXX'
BIC["128"]='BKBKESMMXXX'
BIC["182"]='BBVAESMMXXX'
BIC["57"]='BVADESMMXXX'
BIC["58"]='BNPAESMMXXX'
BIC["130"]='CGDIESMMXXX'
BIC["136"]='AREBESMMXXX'
BIC["149"]='BNPAESMSXXX'
BIC["196"]='WELAESMMXXX'
BIC["219"]='BMCEESMMXXX'
BIC["220"]='FIOFESM1XXX'
BIC["227"]='UNOEESM1XXX'
BIC["236"]='LOYIESMMXXX'
BIC["1460"]='CRESESMMXXX'
BIC["1534"]='KBLXESMMXXX'
BIC["1544"]='BACAESMMXXX'
BIC["2107"]='BBVAESMM107'
BIC["198"]='BCOEESMMXXX'
BIC["94"]='BVALESMMXXX'
BIC["184"]='BEDFESM1XXX'
BIC["188"]='ALCLESMMXXX'
BIC["235"]='PICHESMMXXX'
BIC["1490"]='SELFESMMXXX'
BIC["1491"]='TRIOESMMXXX'
BIC["3001"]='BCOEESMM001'
BIC["3005"]='BCOEESMM005'
BIC["3007"]='BCOEESMM007'
BIC["3008"]='BCOEESMM008'
BIC["3009"]='BCOEESMM009'
BIC["3016"]='BCOEESMM016'
BIC["3017"]='BCOEESMM017'
BIC["3018"]='BCOEESMM018'
BIC["3020"]='BCOEESMM020'
BIC["3023"]='BCOEESMM023'
BIC["3059"]='BCOEESMM059'
BIC["3060"]='BCOEESMM060'
BIC["3063"]='BCOEESMM063'
BIC["3067"]='BCOEESMM067'
BIC["3070"]='BCOEESMM070'
BIC["3076"]='BCOEESMM076'
BIC["3080"]='BCOEESMM080'
BIC["3081"]='BCOEESMM081'
BIC["3085"]='BCOEESMM085'
BIC["3089"]='BCOEESMM089'
BIC["3096"]='BCOEESMM096'
BIC["3098"]='BCOEESMM098'
BIC["3104"]='BCOEESMM104'
BIC["3111"]='BCOEESMM111'
BIC["3113"]='BCOEESMM113'
BIC["3115"]='BCOEESMM115'
BIC["3116"]='BCOEESMM116'
BIC["3117"]='BCOEESMM117'
BIC["3127"]='BCOEESMM127'
BIC["3130"]='BCOEESMM130'
BIC["3134"]='BCOEESMM134'
BIC["3138"]='BCOEESMM138'
BIC["3144"]='BCOEESMM144'
BIC["3146"]='CCCVESM1XXX'
BIC["3150"]='BCOEESMM150'
BIC["3159"]='BCOEESMM159'
BIC["3162"]='BCOEESMM162'
BIC["3166"]='BCOEESMM166'
BIC["3174"]='BCOEESMM174'
BIC["3187"]='BCOEESMM187'
BIC["3190"]='BCOEESMM190'
BIC["3191"]='BCOEESMM191'
BIC["2000"]='CECAESMMXXX'
BIC["125"]='BAOFESM1XXX'
BIC["138"]='BKOAES22XXX'
BIC["211"]='PROAESMMXXX'
BIC["487"]='GBMNESMMXXX'
BIC["1474"]='CITIESMXXXX'
BIC["1480"]='VOWAES21XXX'
BIC["2010"]='CECAESMM010'
BIC["2017"]='CECAESMM017'
BIC["2031"]='CECAESMM031'
BIC["2043"]='CECAESMM043'
BIC["2045"]='CECAESMM045'
BIC["2048"]='CECAESMM048'
BIC["2051"]='CECAESMM051'
BIC["2056"]='CECAESMM056'
BIC["2066"]='CECAESMM066'
BIC["2080"]='CAGLESMMXXX'
BIC["2081"]='CECAESMM081'
BIC["2086"]='CECAESMM086'
BIC["2096"]='CSPAES2LXXX'
BIC["2099"]='CECAESMM099'
BIC["2103"]='UCJAES2MXXX'
BIC["2104"]='CSSOES2SXXX'
BIC["2105"]='CECAESMM105'
BIC["2013"]='CESCESBBXXX'
BIC["2038"]='CAHMESMMXXX'
BIC["99"]='AHCRESVVXXX'
BIC["232"]='INVLESMMXXX'
BIC["2085"]='CAZRES2ZXXX'
BIC["2095"]='BASKES2BXXX'
BIC["59"]='MADRESMMXXX'
BIC["237"]='CSURES2CXXX'
BIC["133"]='MIKBESB1XXX'
BIC["3058"]='CCRIES2AXXX'
BIC["46"]='GALEES2GXXX'
BIC["31"]='ETCHES2GXXX'
BIC["78"]='BAPUES22XXX'
BIC["160"]='BOTKESMXXXX'
BIC["234"]='CCOCESMMXXX'
BIC["1465"]='INGDESMMXXX'
BIC["1475"]='CCSEESM1XXX'
BIC["3025"]='CDENESBBXXX'
BIC["3029"]='CCRIES2A029'
BIC["3035"]='CLPEES2MXXX'
BIC["3045"]='CCRIES2A045'
BIC["3084"]='CVRVES2BXXX'
BIC["3095"]='CCRIES2A095'
BIC["3102"]='BCOEESMM102'
BIC["3105"]='CCRIES2A105'
BIC["3110"]='BCOEESMM110'
BIC["3112"]='CCRIES2A112'
BIC["3118"]='CCRIES2A118'
BIC["3119"]='CCRIES2A119'
BIC["3121"]='CCRIES2A121'
BIC["3123"]='CCRIES2A123'
BIC["3135"]='CCRIES2A135'
BIC["3137"]='CCRIES2A137'
BIC["3140"]='BCOEESMM140'
BIC["3152"]='CCRIES2A152'
BIC["3157"]='CCRIES2A157'
BIC["3160"]='CCRIES2A160'
BIC["3165"]='CCRIES2A165'
BIC["3177"]='BCOEESMM177'
BIC["3179"]='CCRIES2A179'
BIC["3183"]='CASDESBBXXX'
BIC["3186"]='CCRIES2A186'
BIC["3188"]='CCRIES2A188'
BIC["9000"]='ESPBESMMXXX'


nEnt     := val(cEntidad)
cEntidad := alltrim(str(nEnt))


TRY
   cDevuelve := BIC[cEntidad]
CATCH
   cDevuelve := space(10)
END

Return cDevuelve
//----------------------------------------------------------------//
 
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: richard-service and 41 guests