Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-02-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Crear y enviar declaración del IDE (Impuesto a los Depósitos en Efectivo) en XML

Hola amigos.

Abro este hilo expresando mis dudas técnicas sobre una pequeña solución de software que me han subcontratado, y que operará en una institución financiera. La idea es proponer la construcción de una base de conocimiento sobre el Impuesto a los Depósitos en Efectivo (IDE) que forma parte de la legislación mexicana, aportando cada quien lo que de su experiencia y generosidad se desprenda. De antemano ofrezco una disculpa a quienes por vivir fuera de México, o cualquier otra razón, encuentren irrelevante este hilo.

Primero un enlace que explica a grandes rasgos lo que es el IDE: http://es.wikipedia.org/wiki/Impuest...os_en_Efectivo

Los archivos que anexo al final del mensaje fueron proporcionados por el SAT (la autoridad fiscal).

DeclaracionMensual.pdf es una especie de listado de los datos que lleva la declaración mensual del IDE.

DeclaracionAnual.pdf es una especie de listado de los datos que lleva la declaración anual del IDE.

EspecificacionesTecnicas.pdf es la guía técnica oficial de cómo generar y enviar la declaración por Internet en formato XML.

ide_20080818.rar contiene el esquema XML (archivo ide_20080818.xsd). Es decir, se trata de los detalles del formato o "layout" que debe cumplir el archivo XML generado a fin de considerarse una declaración del IDE y que el SAT la admita como tal.

SolicitudMatricesIDE.rar contiene el formulario de solicitud para obtener lo que el SAT denomina "socket de seguridad". Nótese que piden una IP pública o "NATeada", nombre de la máquina, clave de usuario, entre otras cosas. Supongo que ellos toman estos datos y generan una DLL que sólo funcionará con esa computadora en particular, o algo por el estilo.

En días recientes hicimos esta consulta al SAT (desde luego, anexo solamente la parte esencial y que no compromete a nadie):

Cita:
1.- ¿Qué elementos de software y de hardware son necesarios para hacer esta declaración vía Internet? ¿Es suficiente con el Sistema Operativo Windows XP o se necesita alguna versión en especial, servidor, etc.?

R = Es suficiente con el Sistema Operativo Windows XP.

2.- ¿Cómo obtenemos el "Socket de Seguridad" del SAT que otras instituciones bancarias ya tienen?

R = Solicitando el formato de solicitud de socket, siempre que sea en representación de una I.F. a los correos electrónicos siguientes: [...]

3.- Respecto al "layout" (archivo .xsd) para la declaración, ¿pueden darnos una explicación sencilla de entender y con ejemplos claros de cómo quedan los archivos resultantes?

R = El layout de IDE es XML. Con mucho gusto adjunto archivo con la guía para generar los archivos, la cual explica paso a paso el proceso de captura.

4.- ¿Qué herramientas de software pone el SAT a nuestra disposición para facilitarnos esta tarea? ¿Algún SDK, DLL, biblioteca, servicio Web, etc.?

R = Para IDE la herramienta es el Socket de Seguridad.

5.- ¿Existe alguna guía técnica para programadores que le permita a nuestro Departamento de Sistemas desarrollar en un tiempo razonable el software que necesitamos para declarar el IDE vía Internet?

R = No necesitan desarrollar ningún software, el SAT entrega el kit con la aplicación para transmitir.

[...]

Sr. Contribuyente en atención a su solicitud, me permito adjuntarle el archivo de la Guía para elaborar una declaración del IDE. No omito señalarle que el citado archivo deberá abrirse con un editor XML, se recomienda el editor de XML ALTOVA.
¿Ustedes también me recomiendan XML ALTOVA?

Eso de que "no necesitan desarrollar ningún software" no me lo creo, pues ya leí la guía técnica (el tercer archivo PDF) y sí que voy a tener que programar. Además no me enviaron ningún ejemplo XML de declaración del IDE. Sería muy útil contar con uno de esos archivos ya generados, con datos ficticios claro, pues la guía de tan solo 19 páginas no profundiza en ello.

Bueno, decir también que mi experiencia con XML y esquemas XSD es escasa. Lo más que he hecho al respecto es firmar digitalmente un archivo XML y eso llamando a ciertas clases de .NET que hacen todo el trabajo sucio.

Lo del Socket de Seguridad va a ser uno de los puntos fuertes de este trabajo, empezando por conocer qué alternativas hay para obtener una IP pública, de preferencia sin costo (la institución financiera es una pequeña cooperativa). He leído algo sobre NAT y he escuchado sobre "no-ip", pero no estoy muy enterado. Toda recomendación al respecto es bienvenida.

Por lo pronto he iniciado con estudiar el esquema del XML que debo generar (ide_20080818.xsd). No me había fijado que el SAT recomendaba el tal "XML ALTOVA", así que empecé a revisarlo con la herramienta XML Mapper que viene en Delphi 7 (menú Tools).

Voy a hacer unas pequeñas pruebas creando un archivo XML mediante la clase de componente TXMLDocument y luego intentaré validarlo contra el esquema XSD. Cualquier idea o recomendación en este sentido es bienvenida también.

Dado que las cooperativas de ahorro y préstamo (o crédito) son un sector en aparente crecimiento en este país (hasta puede que lleguemos a ver el día en que desplacen a los deshumanizados bancos), pienso que este análisis, con la suma de los siguientes mensajes que escribamos, podrá servir a otros desarrolladores.

De antemano gracias. Saludos.

Al González.

Última edición por Al González fecha: 08-01-2013 a las 05:26:17.
Responder Con Cita
  #2  
Antiguo 17-02-2012
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola Alberto,

Altova XML es muy bueno y si lo combinas con SoapUI tienes todo para desarrollar servicios Web, aunque en este caso la conexión la vas a hacer a través de sockets, con Altova puedes visualizar el diagrama del XSD y puedes generar los WSDL sin problema.

Con el trial de 30 dias, te sirve perfecto para obtener la información que requieres.

Yo uso también un visor de Diagramas XSD con licencia GPL y que me sirve mucho para entender la estructura de los XML http://download.fyxm.net/XSD-Diagram-48006.html

Espero te sirva.

Saludos
Responder Con Cita
  #3  
Antiguo 17-02-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Estupendo!

Muchas gracias, Eliseo. Creo que empezaré con el XSD Diagram.
Responder Con Cita
  #4  
Antiguo 22-02-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
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;

  // Función para crear y añadir un nuevo elemento al documento
  Function CrearElemento (Const Nombre :String) :OLEVariant;
  Begin
    Result := XML.CreateElement (Nombre);

    If Not VarIsEmpty (Elemento) Then
      Elemento.AppendChild (Result);

    Elemento := Result;
  End;
begin
  { Empezamos un nuevo objeto documento obteniendo una interfaz
    IXMLDOMDocument de MSXML 4.0, primera versión en soportar esquemas
    XML (XSD) }
  XML := CreateOLEObject ('MSXML2.DOMDocument.4.0');

  // Agregamos el prólogo o cabecera del archivo
  XML.AppendChild (XML.CreateProcessingInstruction ('xml',
    'version="1.0" encoding="UTF-8"'));

  { Agregamos el elemento principal correspondiente a una declaración
    mensual y establecemos sus atributos requeridos }
  XML.DocumentElement := CrearElemento (
    'DeclaracionInformativaMensualIDE');
  Elemento.SetAttribute ('version', '1.1');
  Elemento.SetAttribute ('rfcDeclarante', 'XXXX010101XX');
  Elemento.SetAttribute ('denominacion',
    'Cooperativa X (documento de prueba)');

  { Agregamos el elemento RepresentanteLegal, establecemos su atributo
    requerido rfc y le añadimos los elementos que guardan el nombre del
    representante }
  CrearElemento ('RepresentanteLegal');
  Elemento.SetAttribute ('rfc', 'XXXX010101XX1');
  CrearElemento ('Nombre');
  CrearElemento ('NombreCompleto');
  Elemento.Text := 'Nina Vida';

  { Regresamos al elemento principal y agregamos el elemento que indica que
    se trata de una declaración normal (no complementaria) y establecemos
    sus atributos requeridos }
  Elemento := XML.DocumentElement;
  CrearElemento ('Normal');
  Elemento.SetAttribute ('ejercicio', '2011');
  Elemento.SetAttribute ('periodo', '1');  // enero

  { Regresamos al elemento principal y agregamos el elemento que contendrá
    el listado de información monetaria para una entidad "distinta de las
    de crédito", que el autor de este ejemplo entiende como "no bancos", es
    decir, cooperativas de ahorro y similares. }
  Elemento := XML.DocumentElement;
  CrearElemento ('InstitucionDistintaDeCredito');

  { Agregamos 6 registros monetarios dentro de tres fechas distintas
    (anteayer, ayer y hoy).  Cada fecha corresponde a un elemento
    "ReporteDeRecaudacionYEnteroDiaria", y cada registro monetario es un
    elemento "RegistroDeDetalle" que corresponde a un cuentacorrentista
    (titular de una cuenta). }
  For I := 1 To 3 Do
  Begin
    CrearElemento ('ReporteDeRecaudacionYEnteroDiaria');
    Elemento.SetAttribute ('fechaDeCorte', FormatDateTime ('yyyy-mm-dd',
      Date - (3 - I)));  // Fechas en formato ISO

    For J := 1 To 2 Do
    Begin
      CrearElemento ('RegistroDeDetalle');
      CrearElemento ('PersonaFisica');
      Elemento.SetAttribute ('rfc', 'XXXX010101XX1');
      CrearElemento ('Nombre');
      CrearElemento ('NombreCompleto');
      Elemento.Text := 'Juan Pérez';

      // Subimos dos niveles (a PersonaFisica)
      Elemento := Elemento.ParentNode.ParentNode;
      
      CrearElemento ('Domicilio');
      CrearElemento ('DomicilioCompleto');
      Elemento.Text := 'Av. Madero #1010, col. Centro, C.P. 58000';

      // Subimos tres niveles (a RegistroDeDetalle)
      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');

      // Subimos dos niveles (a ReporteDeRecaudacionYEnteroDiaria)
      Elemento := Elemento.ParentNode.ParentNode;
    End;

    // Subimos un nivel (a InstitucionDistintaDeCredito)
    Elemento := Elemento.ParentNode;
  End;

  { Último elemento hijo de InstitucionDistintaDeCredito y final de todo
    el documento }
  CrearElemento ('Totales');
  Elemento.SetAttribute ('operacionesRelacionadas', '50');  // 50 depósitos
  Elemento.SetAttribute ('importeExcedenteDepositos', '600');
  Elemento.SetAttribute ('importeDeterminadoDepositos', '18');
  Elemento.SetAttribute ('importeRecaudadoDepositos', '18');
  Elemento.SetAttribute ('importePendienteRecaudacion', '0');
  Elemento.SetAttribute ('importeRemanenteDepositos', '0');
  Elemento.SetAttribute ('importeEnterado', '0');

  { Asignamos al documento el esquema de definición y lo validamos contra
    éste (el archivo ide_20080818.xsd se encuentra en el mismo directorio
    de la aplicación) }
  XML.Schemas := CreateOLEObject ('MSXML2.XMLSchemaCache.4.0');
  XML.Schemas.Add ('', 'ide_20080818.xsd');
  Error := XML.Validate;

  { En caso de que el documento formado no cumpla con el esquema XSD,
    mostraremos la razón de ello en el cuadro de texto TEdit edError }
  If Error.ErrorCode <> 0 Then
    edError.Text := Error.Reason;

  { Tomamos el contenido del documento, le damos sangrado con la función
    FormatXMLData para hacerlo más legible y lo insertamos dentro del
    cuadro de texto TMemo mmContenido.  NOTA: En MSXML la propiedad XML
    de un documento regresa su contenido sin el atributo "encoding", pero
    internamente lo mantiene y aparece como debe ser al guardar el
    archivo. }
  mmContenido.Text := FormatXMLData (XML.XML);
  mmContenido.SetFocus;  // Damos el foco al control mmContenido

  XML.Save ('PruebaIDE.xml');  // Guardamos el archivo a disco
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.
Responder Con Cita
  #5  
Antiguo 13-06-2012
bart_alex bart_alex is offline
Registrado
NULL
 
Registrado: jun 2012
Posts: 1
Poder: 0
bart_alex Va por buen camino
duda tecnica

En la especificacion tenica se menciona que si nno se esta en la red CECOBAN (creo que es la red de los bancos importantes) se enviaran por medio de HTTPS, tienes alguna respuesta a ese respecto ya que necesito realizar el software para una cooperativa y la pagina del sat no da la informacion completa
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Bancos y flujo de efectivo trex2000 Varios 2 20-10-2010 21:58:35
Impuesto a los depósitos en méxico. poliburro La Taberna 16 06-06-2008 17:35:51
Cual es mas efectivo DbExpress o FibPlus Programero Firebird e Interbase 2 14-10-2005 08:04:55
En Canada. impuesto.... marcoszorrilla Noticias 1 12-05-2005 12:29:55
La SGAE propone al Gobierno que imponga a Telefónica un impuesto sobre ADSL's defcon1_es Debates 1 30-03-2005 19:31:55


La franja horaria es GMT +2. Ahora son las 08:00:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi