Ya logré hacer un documento XML de prueba y validarlo contra el esquema del Impuesto a los Depósitos en Efectivo del SAT. Este es el código que escribí para ello (creo que le puede servir a cualquiera que desee crear y validar documentos XML
):
Código Delphi
[-]Uses
COMObj, XMLDoc;
procedure TfmPrincipal.btGenerarClick(Sender: TObject);
Var
Elemento, Error, XML :OLEVariant;
I, J :Integer;
Function CrearElemento (Const Nombre :String) :OLEVariant;
Begin
Result := XML.CreateElement (Nombre);
If Not VarIsEmpty (Elemento) Then
Elemento.AppendChild (Result);
Elemento := Result;
End;
begin
XML := CreateOLEObject ('MSXML2.DOMDocument.4.0');
XML.AppendChild (XML.CreateProcessingInstruction ('xml',
'version="1.0" encoding="UTF-8"'));
XML.DocumentElement := CrearElemento (
'DeclaracionInformativaMensualIDE');
Elemento.SetAttribute ('version', '1.1');
Elemento.SetAttribute ('rfcDeclarante', 'XXXX010101XX');
Elemento.SetAttribute ('denominacion',
'Cooperativa X (documento de prueba)');
CrearElemento ('RepresentanteLegal');
Elemento.SetAttribute ('rfc', 'XXXX010101XX1');
CrearElemento ('Nombre');
CrearElemento ('NombreCompleto');
Elemento.Text := 'Nina Vida';
Elemento := XML.DocumentElement;
CrearElemento ('Normal');
Elemento.SetAttribute ('ejercicio', '2011');
Elemento.SetAttribute ('periodo', '1');
Elemento := XML.DocumentElement;
CrearElemento ('InstitucionDistintaDeCredito');
For I := 1 To 3 Do
Begin
CrearElemento ('ReporteDeRecaudacionYEnteroDiaria');
Elemento.SetAttribute ('fechaDeCorte', FormatDateTime ('yyyy-mm-dd',
Date - (3 - I)));
For J := 1 To 2 Do
Begin
CrearElemento ('RegistroDeDetalle');
CrearElemento ('PersonaFisica');
Elemento.SetAttribute ('rfc', 'XXXX010101XX1');
CrearElemento ('Nombre');
CrearElemento ('NombreCompleto');
Elemento.Text := 'Juan Pérez';
Elemento := Elemento.ParentNode.ParentNode;
CrearElemento ('Domicilio');
CrearElemento ('DomicilioCompleto');
Elemento.Text := 'Av. Madero #1010, col. Centro, C.P. 58000';
Elemento := Elemento.ParentNode.ParentNode.ParentNode;
CrearElemento ('DepositoEnEfectivo');
Elemento.SetAttribute ('montoExcedente', '100');
Elemento.SetAttribute ('impuestoDeterminado', '3');
Elemento.SetAttribute ('impuestoRecaudado', '3');
Elemento.SetAttribute ('recaudacionPendiente', '0');
Elemento.SetAttribute ('remanentePeriodosAnteriores', '0');
Elemento := Elemento.ParentNode.ParentNode;
End;
Elemento := Elemento.ParentNode;
End;
CrearElemento ('Totales');
Elemento.SetAttribute ('operacionesRelacionadas', '50'); Elemento.SetAttribute ('importeExcedenteDepositos', '600');
Elemento.SetAttribute ('importeDeterminadoDepositos', '18');
Elemento.SetAttribute ('importeRecaudadoDepositos', '18');
Elemento.SetAttribute ('importePendienteRecaudacion', '0');
Elemento.SetAttribute ('importeRemanenteDepositos', '0');
Elemento.SetAttribute ('importeEnterado', '0');
XML.Schemas := CreateOLEObject ('MSXML2.XMLSchemaCache.4.0');
XML.Schemas.Add ('', 'ide_20080818.xsd');
Error := XML.Validate;
If Error.ErrorCode <> 0 Then
edError.Text := Error.Reason;
mmContenido.Text := FormatXMLData (XML.XML);
mmContenido.SetFocus;
XML.Save ('PruebaIDE.xml'); end;
El programa
XSD Diagram que recomendó Eliseo es ligero y sencillo, me bastó para analizar y entender en buena medida la estructura que debe cumplir una declaración mensual del IDE. Lo malo es que en el mismo archivo
ide_20080818.xsd el SAT define también la estructura para una declaración anual, es decir, el archivo de esquema establece dos posibles nodos primarios: DeclaracionInformativaMensualIDE DeclaracionInformativaAnualIDE (desconozco si eso está fuera de norma), y tanto XSD Diagram como XML Mapper solamente muestran la estructura que se desprende del primero. Supongo que tendré que recortar la segunda estructura del esquema y meterla en otro archivo XSD para poder analizarla con la misma facilidad.
La versión gratuita de Altova no me gustó, porque además de pesada no dan clave para registro a menos que se tenga una cuenta de correo "corporativa":
Cita:
Dear Osama Bin Laden,
Thank you for your interest in Altova software. Unfortunately, we are unable to process key-code requests from unverified email domains and webmail accounts, such as hotmail.com, gmail.com, etc.
To receive your free 30-day trial license key-code, please enter your corporate email address [...]
|
Mi siguiente paso es hacer pruebas adicionales de generación y validación del XML tomando información más parecida a la real, tal como será proporcionada por el contador de la cooperativa. Pero también ya voy a hacer la solicitud del
Socket de Seguridad, sólo que para esto debo decirle al SAT cuál es la IP pública (o "nateada") que usaré. Quiero instalar una provisional para hacer pruebas, ¿qué instrumento me recomiendan?
Saludos.
Al González.