diff --git a/Source/Modulos/Banca electronica/Controller/uBancaElectronicaController.pas b/Source/Modulos/Banca electronica/Controller/uBancaElectronicaController.pas
index 799b476..1e7bce0 100644
--- a/Source/Modulos/Banca electronica/Controller/uBancaElectronicaController.pas
+++ b/Source/Modulos/Banca electronica/Controller/uBancaElectronicaController.pas
@@ -443,6 +443,7 @@ begin
else
Presentador.Nombre := AEmpresa.DatosBancarios.NOMBRE_PRESENTADOR;
+ Presentador.Pais := 'ES';
GenerarCabeceraPresentador;
diff --git a/Source/Modulos/Banca electronica/Utiles/CVBNorma19SEPAXML.pas b/Source/Modulos/Banca electronica/Utiles/CVBNorma19SEPAXML.pas
index ba1d172..cfe69e1 100644
--- a/Source/Modulos/Banca electronica/Utiles/CVBNorma19SEPAXML.pas
+++ b/Source/Modulos/Banca electronica/Utiles/CVBNorma19SEPAXML.pas
@@ -10,6 +10,7 @@ type
Nombre : string;
NIFCIF : string;
Sufijo : string;
+ Pais: string;
end;
TSEPAXMLFichero = record
@@ -87,6 +88,8 @@ type
FDDTransInfo: TDirectDebitTransactionInformation;
procedure ComprobarDatos(sParte: string);
+ function IdentificadorAcreedorSEPA(): String;
+ function IdentificadorPresentadorSEPA(): String;
protected
procedure Error(iErr: integer); dynamic;
public
@@ -141,7 +144,7 @@ begin
_PAIS_DEFECTO_ := 'ES';
FDDInit := TDirectDebitInitiation.Create;
- FDDInit.Schema := SCHEMA_PAIN_008_002_02;
+ FDDInit.Schema := SCHEMA_PAIN_008_001_02;
end;
destructor TCVBNorma19SEPAXML.Destroy;
@@ -177,11 +180,11 @@ procedure TCVBNorma19SEPAXML.GenerarCabeceraPresentador;
begin
HayError := False;
FDDInit.GrpHdrInitgPtyName := Presentador.Nombre;
+ FDDInit.GrpHdrInitgPtyId := IdentificadorPresentadorSEPA();
end;
procedure TCVBNorma19SEPAXML.GenerarRegistroAdeudo;
var
- auxDC : integer;
auxCadena : string;
begin
HayError := False;
@@ -196,8 +199,8 @@ begin
FDDTransInfo.DbtrNm := Deudor.Nombre;
FDDTransInfo.DbtrAcct.IBAN := Deudor.CuentaIBAN;
FDDTransInfo.DbtrAgt.BIC := Deudor.CodigoBIC;
- FDDTransInfo.DbtrAgt.OthrID := '';
- FDDTransInfo.RmtInfUstrd := '';
+ FDDTransInfo.DbtrAgt.OthrID := FIN_INSTN_NOTPROVIDED;
+ FDDTransInfo.RmtInfUstrd := Adeudo.Referencia;
FDDTransInfo.DrctDbtTxMndtRltdInf.MndtId := Adeudo.Referencia;
FDDTransInfo.DrctDbtTxMndtRltdInf.DtOfSgntr := Now;
{FDDTransInfo.DrctDbtTxMndtRltdInf.AmdmntInd := DD_MandateAmendmentInformationDetails_CheckBox.Checked;
@@ -214,6 +217,30 @@ procedure TCVBNorma19SEPAXML.GenerarTotalAcreedor;
begin
end;
+function TCVBNorma19SEPAXML.IdentificadorAcreedorSEPA(): String;
+var
+ dcstr : String;
+ dc: integer;
+begin
+ dcstr := Acreedor.NIFCIF;
+ dcstr := Trim(StringReplace(AnsiUpperCase(dcstr), ' ', '', [rfReplaceAll]));
+ dcstr := dcstr + Acreedor.Pais + '00';
+ dc := 98 - SEPAModulo97(dcstr);
+ result := Acreedor.Pais + IntToStr(dc) + Acreedor.Sufijo + Acreedor.NIFCIF;
+end;
+
+function TCVBNorma19SEPAXML.IdentificadorPresentadorSEPA: String;
+var
+ dcstr : String;
+ dc: integer;
+begin
+ dcstr := Presentador.NIFCIF;
+ dcstr := Trim(StringReplace(AnsiUpperCase(dcstr), ' ', '', [rfReplaceAll]));
+ dcstr := dcstr + Presentador.Pais + '00';
+ dc := 98 - SEPAModulo97(dcstr);
+ result := Presentador.Pais + IntToStr(dc) + Presentador.Sufijo + Presentador.NIFCIF;
+end;
+
procedure TCVBNorma19SEPAXML.GenerarCabeceraAcreedor;
begin
HayError := False;
@@ -226,12 +253,10 @@ begin
FDDPayInfo.CdtrAcct.IBAN := Acreedor.CuentaIBAN;
FDDPayInfo.CdtrAgt.BIC := '';
FDDPayInfo.CdtrAgt.OthrID := FIN_INSTN_NOTPROVIDED;
- FDDPayInfo.CdtrSchmeIdIdPrvtIdOthrId := Acreedor.CuentaIBAN;
+ FDDPayInfo.CdtrSchmeIdIdPrvtIdOthrId := IdentificadorAcreedorSEPA();
FDDInit.AppendPmtInfEntry(FDDPayInfo);
end;
-
-
procedure TCVBNorma19SEPAXML.ComprobarDatos(sParte: string);
var
bError: boolean;
@@ -423,6 +448,4 @@ begin
end;
-
-
end.
diff --git a/Source/Modulos/Banca electronica/Utiles/SEPAUnit/SEPACommon.pas b/Source/Modulos/Banca electronica/Utiles/SEPAUnit/SEPACommon.pas
index 7e14f6c..9e125f0 100644
--- a/Source/Modulos/Banca electronica/Utiles/SEPAUnit/SEPACommon.pas
+++ b/Source/Modulos/Banca electronica/Utiles/SEPAUnit/SEPACommon.pas
@@ -39,6 +39,7 @@ uses
const
SCHEMA_PAIN_001_002_03 = 'pain.001.002.03';
SCHEMA_PAIN_001_003_03 = 'pain.001.003.03';
+ SCHEMA_PAIN_008_001_02 = 'pain.008.001.02';
SCHEMA_PAIN_008_002_02 = 'pain.008.002.02';
SCHEMA_PAIN_008_003_02 = 'pain.008.003.02';
@@ -165,6 +166,9 @@ type
procedure SaveToStream(const stream: TStream; const schema: String);
end;
+
+function ConvertAlphaToNumber(const s: String): String;
+
function SEPAGenerateUUID: String;
function SEPACleanIBANorBICorCI(s: String): String;
@@ -505,7 +509,7 @@ end;
procedure SEPAWriteLine(const stream: TStream; const line: String);
begin
WriteString(stream, line);
- WriteString(stream, sLineBreak);
+ //WriteString(stream, sLineBreak);
end;
// TFinancialInstitution
diff --git a/Source/Modulos/Banca electronica/Utiles/SEPAUnit/SEPADirectDebit.pas b/Source/Modulos/Banca electronica/Utiles/SEPAUnit/SEPADirectDebit.pas
index b368639..8f46c35 100644
--- a/Source/Modulos/Banca electronica/Utiles/SEPAUnit/SEPADirectDebit.pas
+++ b/Source/Modulos/Banca electronica/Utiles/SEPAUnit/SEPADirectDebit.pas
@@ -196,10 +196,12 @@ type
fGrpHdrMsgId: String; // group header: message identification
fGrpHdrCreDtTm: TDateTime; // group header: time of file creation
fGrpHdrInitgPtyName: String; // group header: initiator name
+ fGrpHdrInitgPtyId: String; // group header: initiator id
fPmtInf: array of TDirectDebitPaymentInformation;
function GetSchema: String;
procedure SetGrpHdrInitgPtyName(const str: String);
+ procedure SetGrpHdrInitgPtyId(const Value: String);
function GetGrpHdrNbOfTxs: Integer;
function GetPmtInfEntry(const i: Integer): TDirectDebitPaymentInformation;
@@ -215,6 +217,8 @@ type
property GrpHdrNbOfTxs: Integer read GetGrpHdrNbOfTxs;
property GrpHdrInitgPtyName: String read fGrpHdrInitgPtyName write SetGrpHdrInitgPtyName;
+ property GrpHdrInitgPtyId: String read fGrpHdrInitgPtyId write SetGrpHdrInitgPtyId;
+
procedure AppendPmtInfEntry(const instruction: TDirectDebitPaymentInformation);
property PmtInfEntry[const i: Integer]: TDirectDebitPaymentInformation read GetPmtInfEntry;
property PmtInfCount: Integer read GetPmtInfCount;
@@ -673,6 +677,7 @@ begin
SEPAWriteLine(stream, ''+SEPACleanString(PmtInfId)+'');
SEPAWriteLine(stream, ''+SEPACleanString(PmtMtd)+'');
+ SEPAWriteLine(stream, 'false');
SEPAWriteLine(stream, ''+IntToStr(NbOfTxs)+'');
SEPAWriteLine(stream, ''+SEPAFormatAmount(CtrlSum)+'');
@@ -732,6 +737,11 @@ begin
Result := SCHEMA_PAIN_008_003_02;
end;
+procedure TDirectDebitInitiation.SetGrpHdrInitgPtyId(const Value: String);
+begin
+ fGrpHdrInitgPtyId := SEPACleanString(Value);
+end;
+
procedure TDirectDebitInitiation.SetGrpHdrInitgPtyName(const str: String);
begin
fGrpHdrInitgPtyName := SEPACleanString(str);
@@ -825,16 +835,24 @@ var
i: Integer;
begin
SEPAWriteLine(stream, '');
- SEPAWriteLine(stream, '');
+ ' xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:'+Schema+' '+Schema+'.xsd">');}
+ SEPAWriteLine(stream, '');
SEPAWriteLine(stream, '');
SEPAWriteLine(stream, '');
SEPAWriteLine(stream, ''+SEPACleanString(GrpHdrMsgId)+'');
SEPAWriteLine(stream, ''+SEPAFormatDateTime(GrpHdrCreDtTm)+'');
SEPAWriteLine(stream, ''+IntToStr(GrpHdrNbOfTxs)+'');
- SEPAWriteLine(stream, ''+SEPACleanString(GrpHdrInitgPtyName, INITG_PTY_NAME_MAX_LEN)+'');
+ SEPAWriteLine(stream, '');
+ SEPAWriteLine(stream, ''+SEPACleanString(GrpHdrInitgPtyName, INITG_PTY_NAME_MAX_LEN)+'');
+ SEPAWriteLine(stream, '');
+ SEPAWriteLine(stream, fGrpHdrInitgPtyId);
+ SEPAWriteLine(stream, '');
+ SEPAWriteLine(stream, '');
SEPAWriteLine(stream, '');
for i := 0 to PmtInfCount-1 do