UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” FACULTAD DE SISTEMAS MERCANTILES CARRERA DE SISTEMAS PROYECTO DE EXAMEN COMPLEXIVO PREVIO A LA OBTENCIÓN DEL TÍTULO DE INGENIERO EN SISTEMAS E INFORMÁTICA TEMA: APLICACIÓN WEB PARA LA EMISIÓN DE COMPROBANTES ELECTRÓNICOS DE LOS CLIENTES DE LA EMPRESA INPRISE DE LA CIUDAD DE IBARRA. AUTOR: TEC. JURADO PUPIALES JOSÉ MIGUEL ASESOR: ING. MARTÍNEZ CARLOS, MGS. AMBATO – ECUADOR 2015 CERTIFICACIÓN DEL ASESOR En calidad de asesor del presente trabajo de investigación, certifico que la tesis cuyo tema es “Aplicación web para la emisión de comprobantes electrónicos de los clientes de la empresa INPRISE de la ciudad de Ibarra”, elaborado por Jurado Pupiales José Miguel, cumple con los requisitos metodológicos y científicos que la Universidad Regional Autónoma de Los Andes “UNIANDES” exige, por lo tanto autorizo su presentación para los trámites pertinentes. Atentamente, Ing. Carlos Martínez. Mgs ASESOR DECLARACIÓN DE AUTORÍA DEL TRABAJO DE TESIS Ante las autoridades de la Universidad Regional Autónoma de los Andes –UNIANDESdeclaro que el contenido del presente proyecto cuyo tema es: “APLICACIÓN WEB PARA LA EMISIÓN DE COMPROBANTES ELECTRÓNICOS DE LOS CLIENTES DE LA EMPRESA INPRISE DE LA CIUDAD DE IBARRA”, presentado como requisito previo a la obtención del título de INGENIERO EN SISTEMAS E INFORMÁTICA es original, de mi autoría y total responsabilidad. Además autorizo a la Universidad Regional Autónoma de Los Andes –UNIANDESpara que pueda emplear el presente trabajo como apoyo para futuras investigaciones relacionadas con el tema planteado. Atentamente, Tec. Jurado Pupiales José Miguel C.I. 100331041-2 DEDICATORIA El presente trabajo investigativo se lo dedico a mis padres, quienes son un pilar fundamental en mi vida ya que han velado por mi bienestar y educación siendo mi apoyo en todo momento y a la vez me enseñaron valores importantes para el diario vivir. AGRADECIMIENTO Agradezco de todo corazón a todas las personas que me ayudaron en el transcurso del proceso de formación de mi carrera en especial a las Autoridades, Docentes, Administrativos y todos quienes conforman la Universidad Regional Autónoma de Los Andes –UNIANDES- Extensión Ibarra. Además quiero agradecer a mis padres y hermanos quienes me apoyaron a cumplir una de mis metas más anheladas. Finalmente agradezco a mi novia por ser un pilar fundamental dentro de mi vida personal y profesional. ÍNDICE GENERAL CERTIFICACIÓN DEL ASESOR DECLARACIÓN DE AUTORÍA DEDICATORIA AGRADECIMIENTO RESUMEN EJECUTIVO ABSTRACT CAPÍTULO I ............................................................................................................................. 1 1. INTRODUCCIÓN ............................................................................................................. 1 1.1. Antecedentes de la investigación .................................................................................. 1 1.2. Planteamiento del problema ......................................................................................... 2 1.3. Formulación del problema ............................................................................................ 3 1.4. Delimitación del problema ........................................................................................... 3 1.5. Objeto de investigación y campo de acción ................................................................. 3 1.5.1. Objeto de investigación ..................................................................................... 3 1.5.2. Campo de acción ............................................................................................... 3 1.6. Identificación de la línea de investigación.................................................................... 3 1.7. Objetivos ....................................................................................................................... 3 1.7.1. Objetivo General ............................................................................................... 3 1.7.2. Objetivos Específicos ........................................................................................ 3 1.8. Idea a Defender ............................................................................................................. 4 1.9. Justificación de la necesidad, actualidad e importancia del tema. ................................ 4 1.10. Metodología investigativa a emplear ............................................................................ 5 CAPÍTULO II ......................................................................................................................... 11 2. MARCO TEÓRICO ........................................................................................................ 11 2.1. Origen de los procesos de emisión de comprobantes electrónicos ............................. 11 2.2. Análisis de las distintas posiciones teóricas sobre el objeto de investigación ............ 12 2.3. Valoración crítica de los conceptos principales.......................................................... 13 2.3.1. Procesos de facturación electrónica ................................................................ 13 2.3.2. Herramientas de desarrollo ............................................................................. 20 2.3.3. Servidores web ................................................................................................ 25 2.3.4. Base de datos ................................................................................................... 26 2.3.5. Lenguajes de Programación ............................................................................ 32 2.4. Análisis crítico ............................................................................................................ 39 2.5. Conclusiones parciales del capítulo ............................................................................ 39 CAPÍTULO III ........................................................................................................................ 40 3. MARCO PROPOSITIVO............................................................................................... 40 3.1. Título .......................................................................................................................... 40 3.2. Objetivo ...................................................................................................................... 40 3.3. Desarrollo de la Propuesta .......................................................................................... 40 3.4. Modelo de Cascada ..................................................................................................... 41 3.4.1. Análisis ....................................................................................................................... 41 3.4.1.1. Problemática Actual ........................................................................................ 41 3.4.1.2. Descripción de los cambios deseados ............................................................. 42 3.4.1.3. Beneficiarios del proyecto ............................................................................... 43 3.4.1.4. Requisitos de hardware ................................................................................... 44 3.4.1.5. Requisitos de Software .................................................................................... 44 3.4.1.6. Requerimientos por parte de la Administración Tributaria ............................. 45 3.4.2. Diseño ......................................................................................................................... 46 3.4.2.1. Arquitectura de la aplicación .......................................................................... 46 3.4.2.2. Diagrama de Contexto..................................................................................... 46 3.4.2.3. Diagrama de Nivel 0 ....................................................................................... 47 3.4.2.4. Diagrama de Nivel 1 – Registro de Cliente .................................................... 48 3.4.2.5. Registro de Productos ..................................................................................... 49 3.4.2.6. Registro de Factura ......................................................................................... 50 3.4.2.7. Crea una empresa ............................................................................................ 51 3.4.2.8. Envió de XML al Web Service SRI ................................................................ 52 3.4.2.9. Diseño de la base de datos. ............................................................................. 53 3.4.2.10. Diagrama conceptual de la base de datos ........................................................ 54 3.4.2.11. Diagrama lógico de la base de datos. .............................................................. 55 3.4.2.12. Funcionabilidad de las tablas .......................................................................... 56 3.4.2.13. Diseño de la Pantalla Principal ....................................................................... 57 3.4.2.14. Diseño de Entradas y Salidas .......................................................................... 58 3.4.3. Codificación................................................................................................................ 64 3.4.3.1. Formato XML emitido por la administración tributaria (SRI) ........................ 64 3.4.3.2. Función que me permite firmar un documento electrónico ............................ 66 3.4.3.3. Función que me permite enviar documentos electrónicos al Web Service SRI para su validación y envió de e-mail a los clientes de las empresas .......................... 71 3.4.3.4. Función que me permite mostrar los comprobantes emitidos en la aplicación web ................................................................................................................... 77 3.4.3.5. Función que me permite exportar archivos en formato CSV .......................... 78 3.4.4. Implementación (esquema de la Aplicación web) ...................................................... 79 3.4.4.1. Trabajando con la aplicación .......................................................................... 79 3.4.5. Pruebas de Funcionalidad ........................................................................................... 83 3.4.5.1. Pruebas con datos reales.................................................................................. 83 3.4.5.2. Prueba con datos erróneos ............................................................................... 83 3.4.5.3. Pruebas de velocidad en navegadores ............................................................. 85 3.4.5.4. Pruebas de Hardware y Software .................................................................... 86 3.4.5.5. Pruebas de seguridad lógica ............................................................................ 86 3.4.6. Mantenimiento ............................................................................................................ 87 CONCLUSIONES .................................................................................................................. 88 RECOMENDACIONES ........................................................................................................ 89 BIBLIOGRAFÍA LINKOGRAFÍA ANEXOS ÍNDICE DE TABLAS Tabla 1 Entidades de Certificación de firmas electrónicas ....................................................... 19 Tabla 2 XML vs HMTL............................................................................................................ 21 Tabla 3 Beneficiarios de la aplicación web .............................................................................. 44 Tabla 4 Características y costos de hardware utilizado ............................................................ 44 Tabla 5 Características sobre el Software a utilizar. ................................................................. 45 Tabla 6 Función de la Tablas de la Base de Datos ................................................................... 56 Tabla 7 Pruebas de Hardware y Software propietario .............................................................. 86 Tabla 8 Pruebas de Hardware y Software libre ........................................................................ 86 Tabla 9 Opciones del módulo de seguridad .............................................................................. 87 ÍNDICE DE FIGURAS Figura 1 XML y otros lenguajes de marcas ......................................................................... 21 Figura 2 Aplicaciones de XML ........................................................................................... 22 Figura 3 Componentes de un sistema PostgreSQL .............................................................. 30 Figura 4 Proceso de sus dos elementos ................................................................................ 38 Figura 5 Ciclo de Vida del Software - Modelo Cascada ..................................................... 41 Figura 6 Esquema de la aplicación web para INPRISE ....................................................... 46 Figura 7 Diagrama de contexto de la Aplicación Web ........................................................ 46 Figura 8 Diagrama de nivel 0 de la Aplicación Web ........................................................... 47 Figura 9 Diagrama de nivel 1 de la Aplicación web – Registro de Clientes ....................... 48 Figura 10 Diagrama Nivel 1 de la Aplicación web - Registro de Productos ....................... 49 Figura 11 Diagrama Nivel 1 de la Aplicación Web - Registro de Facturas ........................ 50 Figura 12 Diagrama Nivel 1 de la Aplicación Web - Creación de una empresa ................. 51 Figura 13 Diagrama Nivel 1 de la Aplicación Web - Envió de XML al Web Service SRI 52 Figura 14 Diseño de la base de datos ................................................................................... 53 Figura 15 Base de datos conceptual de la Aplicación Web ................................................. 54 Figura 16 Diagrama lógico de la base de datos de la Aplicación Web................................ 55 Figura 17 Pantalla Principal de la Aplicación Web ............................................................. 57 Figura 18 Mapa de Sitio....................................................................................................... 57 Figura 19 Pantalla Principal del Administrador .................................................................. 58 Figura 20 Formularios para registrar y poder realizar una factura nueva, agregar un producto, agregar un cliente e agregar una categoría. ......................................................... 59 Figura 21 Formulario para crear una nueva empresa. ......................................................... 60 Figura 22 Formulario para ingresar un archivo CSV de la empresa.................................... 60 Figura 23 Formulario para realizar una factura ................................................................... 61 Figura 24 Formulario en el que se visualiza los comprobantes electrónicos emitidos ........ 61 Figura 25 Envió del correo electrónico al cliente de la empresa ......................................... 62 Figura 26 Visualización del documento RIDE emitido ....................................................... 62 Figura 27 Visualización del documento XML emitido ....................................................... 63 Figura 28 Visualización de reportes en Excel y CSV .......................................................... 63 Figura 29 Diseño entrada de la Aplicación Web ................................................................. 79 Figura 30 Ingreso de la dirección web para acceder a la aplicación .................................... 79 Figura 31 Ingreso a la pantalla donde deberá ingresar el usuario y contraseña ................... 80 Figura 32 Ingreso a la pantalla principal cuando esta logueado .......................................... 80 Figura 33 Documentos emitidos por la Aplicación: RIDE y XML al usuario .................... 81 Figura 34 Correo emitido a los usuarios de las empresas con los documentos electrónicos ............................................................................................................................................. 82 Figura 35 Reportes en CSV ó EXCEL ................................................................................ 82 Figura 36 Pruebas con datos reales ...................................................................................... 83 Figura 37 Prueba con datos erróneos ................................................................................... 84 Figura 38 Error emitido por el Web Service del SRI........................................................... 84 Figura 39 Pruebas de velocidad ........................................................................................... 85 RESUMEN EJECUTIVO Hoy en día el Servicio de Rentas Internas SRI es la entidad que administra los asuntos tributarios en el Ecuador, por lo que con la Resolución No. NAC-DGERCGC12-00105 fechado el 9 de marzo del 2012, en el cual resuelve que se promueva la emisión de comprobantes electrónicos en los sujetos pasivos, es por ello que las empresas deberán cumplir con los requerimientos emitidos en dicho organismo. Las empresas clientes de INPRISE preocupadas al no contar en sus sistemas actuales con una aplicación que les permita emitir dichos documentos electrónicos, han visto la necesidad de solicitar a la empresa INPRISE la implementación de una aplicación web que ayude a cumplir con la resolución, ya que dicha empresa se encarga de solucionar los problemas tecnológicos que poseen sus clientes. A través de un estudio enfocado en una entrevista al Gerente – Propietario de la Empresa INPRISE se determinó los principales requerimientos que tienen los clientes de INPRISE tales como: dificultades, seguridades al momento de implementar la aplicación web, beneficios que tendrían los clientes cuando se implemente dicha aplicación. Dentro de la metodología empleada está la cuali-cuantitativa y cualitativa con su método analíticosintético inmerso en los tipos de investigación bibliográfica y de campo, para el desarrollo de lo propuesto se utilizó el método de cascada enmarcándose en la línea de investigación “Desarrollo de software y programación de sistemas”. Con la implementación de la aplicación web en los clientes de INPRISE se mejorará los procesos de emisión de comprobantes electrónicos y a la vez se cumplirá con los requisitos emitidos por la Administración Tributaria. ABSTRACT Nowadays the Internal Revenue Service (IRS) is an institution which manages the tax administration in Ecuador, so with solution Number NAC-DGERCGC12-00105 dated on March 9th, 2012 it is established issuing electronic invoice on taxpayers, then all companies must comply with the requirements issued by this institution. So that the companies that are clients of “INPRISE” Company worried because their current systems do not have an application which lets to issue those electronic documents, consequently they have seen the need to demand from the INPRISE Company the implementation of a web application that lets them to comply with that resolution, so this company is responsible to solve its clients’ technological problems. By a study focused on an interview to the Owner Manager from the Company “INPRISE”, the principal customers’ requirements were determined, they were: difficulties, assurances when implementing a web application, benefits that the customers could get when the web application can be implemented. The methodology used to develop this paperwork is the quali-quantitative and qualitative with the methods analytic-synthetic related to the bibliographic and field research, for the development of the proposal the cascade method was applied framed in the research line of “Software development and Systems Programming”. With the implementation of this web page the INPRISE’s customers will improve the issue of electronic invoice at the same time they could comply with the requirements asked by the Tax Administration. CAPÍTULO I 1. INTRODUCCIÓN 1.1. Antecedentes de la investigación En el Ecuador la institución que administra los asuntos tributarios es el Servicio de Rentas Internas (SRI), el mismo que fue creado el 02 de diciembre de 1997 basándose en los principios de justicia y equidad, como respuesta a la alta evasión tributaria, alimentada por la ausencia casi total de cultura tributaria. Desde su creación se ha destacado por ser una institución independiente en la definición de políticas y estrategias de gestión que han permitido que se maneje con equilibrio, transparencia y firmeza en la toma de decisiones, aplicando de manera transparente tanto sus políticas como la legislación tributaria. (SRI, 2015) El SRI mediante Decreto Ejecutivo Nº 3055, publicado en el Registro Oficial Nº 679, del 08 octubre del 2002, expidió el Reglamento de Comprobantes de Venta y Retención; que tiene como finalidad regular la emisión de los comprobantes de venta y retenciones que regula las actividades económicas y comerciales con fines de declaración de impuestos en el Ecuador. Desde esta fecha en adelante el SRI ha regulado el proceso de facturación incorporando nuevas normativas, resoluciones, mecanismos de emisión, que permiten que las actividades comerciales tanto de empresas como de personas naturales se cumplan, cumpliendo la normativa legal vigente. Por lo anteriormente expuesto, la Administración Tributaria (SRI), con el afán de facilitar los procesos, ha permitido y ha incentivado a incorporar herramientas tecnológicas en las empresas y negocios que faciliten el cumplimiento de las obligaciones tributarias en el Ecuador, por tal motivo según la Resolución No. NAC-DGERCGC12-00105 con fecha 9 de marzo del 2012, se promueve la emisión de comprobantes electrónicos en el que RESUELVE: EXPEDIR LAS NORMAS PARA EL NUEVO ESQUEMA DE EMISIÓN DE COMPROBANTES DE VENTA, RETENCIÓN Y DOCUMENTOS COMPLEMENTARIOS MEDIANTE MENSAJE DE DATOS (COMPROBANTES ELECTRÓNICOS), mencionando que se debe cumplir con los requisitos legales y reglamentarios de dicha entidad hacia los sujetos pasivos. 1 El objetivo de la emisión de los comprobantes electrónicos es el de reemplazar el papel y aportar con el cuidado del medio ambiente, pero al mismo tiempo se garantiza la seguridad de la información de cada uno de los contribuyentes. Es por ello que INPRISE siendo una empresa global de comercio y servicios de soluciones tecnológicas, ya que fue creada con la finalidad de contribuir a entidades que necesitan automatizar procesos; usando software libre y estándares abiertos, y así poder lograr que todas las soluciones sean accesibles a nuestros futuros clientes. La compañía se mantiene en una posición de liderazgo en Gestión y Desarrollo de Proyectos Tecnológicos, por lo que ha visto la necesidad de desarrollar una aplicación web para la emisión de comprobantes electrónicos de sus clientes, facilitando el ahorro en el gasto de papelería física y tintas de impresión, existe menor probabilidad de falsificación de documentos, mayor seguridad en el resguardo de los documentos, reducción de tiempos de envío de comprobantes, procesos administrativos más rápidos y eficientes y para finalizar mencionar que la emisión de los comprobantes electrónicos tienen la misma validez que los documentos físicos. 1.2. Planteamiento del problema En la Provincia de Imbabura, en la Ciudad de Ibarra la empresa INPRISE tiene su base de operaciones que consiste básicamente en proveer de soluciones tecnológicas empresariales a sus clientes que les permita mejorar y automatizar sus procesos, en la cual se han encontrado las siguientes situaciones: Las empresas tienen dificultades con sus clientes al momento de entregar los comprobantes electrónicos ocasionando pérdidas económicas, de tiempo y recursos. Se tiene la dificultad de integrar en una sola aplicación los procesos de las empresas y sus negocios, lo que implicaría inversión alta en nuevos sistemas y aplicaciones para sus dueños. Las empresas se ven en la obligación de cumplir los requerimientos por parte de la Administración Tributaria del Ecuador, en los plazos establecidos sobre la emisión de comprobantes electrónicos a sus clientes. 2 1.3. Formulación del problema ¿Cómo mejorar los procesos de emisión de comprobantes electrónicos en los clientes de la empresa INPRISE de la Ciudad de Ibarra? 1.4. Delimitación del problema Esta investigación se realizará en los clientes de la empresa INPRISE de la ciudad de Ibarra, por medio de la implementación de una aplicación web para mejorar los procesos de emisión de comprobantes electrónicos. 1.5. Objeto de investigación y campo de acción 1.5.1. Objeto de investigación Procesos Informáticos 1.5.2. Campo de acción Aplicaciones Web 1.6. Identificación de la línea de investigación Desarrollo de software y programación de sistemas 1.7. Objetivos 1.7.1. Objetivo General Implementar una aplicación web para mejorar los procesos de emisión de comprobantes electrónicos de los clientes de la empresa INPRISE de la ciudad de Ibarra. 1.7.2. Objetivos Específicos Fundamentar teóricamente los procesos de emisión de comprobantes electrónicos y aplicación web. Diagnosticar los procesos de facturación que aplican las empresas clientes de INPRISE. Desarrollar la aplicación web de emisión de comprobantes electrónicos en la empresa INPRISE para sus clientes. 3 1.8. Idea a Defender Con la implementación de la aplicación web se mejorará los procesos de emisión de comprobantes electrónicos de los clientes de la empresa INPRISE de la ciudad de Ibarra. 1.9. Justificación de la necesidad, actualidad e importancia del tema. La implementación de una aplicación web como soporte a los procesos en las empresas clientes de INPRISE, es una necesidad para poder cumplir con los requerimientos emitidos por parte de la Administración tributaria (SRI), y así realizar la emisión de los comprobantes electrónicos a cada uno de los usuarios de las empresas, como se enuncia en la resolución emitida por dicha entidad tributaria. El presente proyecto está enfocado a solucionar la problemática de los clientes de INPRISE, implementando una aplicación web para mejorar y dar cumplimento con los procesos de emisión de comprobantes electrónicos, buscando siempre calidad en el servicio hacia sus usuarios. Además se puede mencionar entre otros beneficios de la implementación de ésta aplicación web los siguientes: Permitirá a las empresas ahorro de recursos, disminución de uso del papel y contribución al medio ambiente. Los clientes de las empresas podrán beneficiarse al recibir sus facturas electrónicamente en sus cuentas de correo electrónico. Reducción de los tiempos de envío de comprobantes electrónicos por parte de las empresas hacia sus clientes. Por disposiciones legales y reglamentarias los comprobantes electrónicos tienen la misma validez que los comprobantes físicos. Proporciona mayor seguridad de la información que generan los procesos de negocio de las empresas. Reduce drásticamente la posibilidad de falsificaciones de documentos. Incentiva a la ejecución de procesos más eficientes dentro de las empresas. En base a todos estos beneficios, se justifica claramente la importancia de implementar la aplicación web en los clientes de INPRISE, ya que la realización de éste trabajo investigativo es la solución a la problemática planteada. 4 Adicionalmente cabe mencionar que la aplicación web estará desarrollada en un lenguaje de programación python con framework django y su gestor de base de datos postgresql, las cuales son herramientas tecnológicas novedosas. 1.10. Metodología investigativa a emplear La metodología investigativa que se empleó en el desarrollo del presente pre-proyecto se describe a continuación: Métodos: Se aplicaron los siguientes métodos: Analítico sintético: este método se aplicó para la elaboración del marco teórico, ya que toda la información recopilada en libros e internet fue analizada y sintetizada previamente antes de ser parte del fundamento teórico. Cuali-cuantitativo: Es un método establecido para estudiar científicamente una muestra reducida de objetos de investigación, el mismo que permitió averiguar las cualidades o características generales de los procesos parte del problema, a través de las técnicas de observación y visitas a las empresas. Cualitativo: De la problemática posteriormente son ratificadas mediante la cuantificación de la investigación de campo llevada a cabo generalmente en base a la entrevista. Entre los tipos de investigación que se utilizaron están: Bibliográfica: Se recopiló información de libros, revistas e internet, respecto de los temas que forman parte del marco teórico. A través de ésta investigación se obtuvo el conocimiento sobre los diferentes procesos abordados en el proyecto que aplican las empresas en la emisión de comprobantes electrónicos. De campo: Esta investigación se la aplicó en la empresa INPRISE, mediante la cual se obtuvo información de los diferentes procesos de las empresas clientes que es donde se encuentra la situación problemática. Técnica: Se aplicó la siguiente técnica: 5 Entrevista: Se la aplicó al Gerente de la empresa INPRISE para determinar las necesidades de sus clientes sobre los requerimientos emitidos por la administración tributaria y así solucionar el problema desde el punto de vista directo. Instrumentos de la Investigación: Los instrumentos que se utilizaron para esta investigación son: 1. Guía de entrevista 2. Investigación Bibliográfica y linkográfica Además en el presente pre-proyecto investigativo se procedió a realizar una aplicación web que permita emitir comprobantes electrónicos para cada uno de los clientes de la empresa INPRISE. La aplicación se la desarrolló enmarcada dentro de los requerimientos legales y reglamentarios regulados por la Administración Tributaria de nuestro país. El desarrollo de este proceso estuvo alineado al cumplimiento de las siguientes actividades: En primera instancia se desarrolló la interfaz de comunicación y enlace hacia las aplicaciones que tienen los clientes en sus negocios o empresas a fin de recopilar la información necesaria para el proceso de emisión de comprobantes electrónicos. Luego se diseñó el módulo de emisión de comprobantes electrónicos como facturas, notas de crédito, notas de débito, comprobantes de retención, guías de remisión. Se desarrolló las interfaces para la comunicación con el web services del Servicio de Rentas Internas para obtener la autorización de los comprobantes electrónicos. Se desarrolló un módulo de facturación para las empresas que no dispongan de un sistema de facturación normal. Se incorporó los requerimientos tecnológicos y legales como firma electrónica, internet, web services entre otros. Se desarrolló el módulo para enviar los comprobantes electrónicos mediante correo electrónico a los usuarios de la aplicación. Se implementó la página web empresarial en la que las empresas clientes podrán ingresar a un ambiente de administración de sus comprobantes electrónicos. Se implementó el módulo de administración de usuarios por parte de la empresa INPRISE. Se elaboró la documentación de la propuesta y de la aplicación. 6 Entrevista dirigida al Gerente-Propietario de la empresa INPRISE. La presente entrevista tiene como objetivo recolectar información acerca de los procesos y servicios que brinda la empresa INPRISE a sus clientes. Nombre: Luis Antonio Burbano Robles Cargo: Gerente-Propietario de la empresa INPRISE 1. Cuáles son las actividades a las que se dedica INPRISE? INPRISE es una empresa que se dedica a crear, automatizar procesos y solucionar problemas tecnológicos usando software libre y estándares abiertos, logrando así que todas las soluciones sean accesibles a nuestros clientes 2. Qué área de cobertura de servicios tiene INPRISE? INPRISE brinda servicio a nivel nacional ofreciendo asistencia de calidad a cada uno de sus clientes. 3. Cuál es la gama de servicios que la empresa ofrece a sus clientes? INPRISE es una empresa que ofrece servicios es diseño y desarrollo web, desarrollo de sistemas, dispositivos móviles, computación en la nube y sistemas de geoposicionamiento. 4. Tiene la empresa INPRISE solicitudes de soluciones de facturación electrónica? Los clientes de INPRISE sí han solicitado que se implemente este tipo de soluciones ya que es un requisito emitido por parte de la administración tributaria. 5. Cómo ve usted los temas relacionados con las disposiciones por parte del SRI para que las empresas (ciertos sectores) emitan sus comprobantes electrónicamente? Desde mi punto de vista la administración tributaria está implementando este tipo de soluciones tecnológicas para tener un mejor control de las actividades que realiza los sujetos pasivos. 7 6. Cuáles considera usted que son los beneficios para la empresas, disponer de una solución de facturación electrónica? Con este tipo de proyecto las empresas ayudarán a la contribución del medio ambiente, el ahorro de papel, seguridad en la información, mejorará el tiempo de respuestas rápidas y los procesos de cada una de las empresas. 7. Considera usted que los costos de implementación de facturación electrónica son altos para las empresas y negocios? Sí, porque las empresas tendrían que cambiar los sistemas contables con los que trabajan. 8. A su criterio qué dificultades enfrentan las empresas para implementar la facturación electrónica? El principal inconveniente son los recursos económicos ya que las empresas tendrían que adquirir un nuevo sistema contable en donde contenga un módulo de facturación electrónica, además otro inconveniente es que las empresas no cuentan con personal técnico y/o capacitado. 9. Considera usted que por parte del SRI existe la suficiente guía y ayuda hacia las empresas para implementar facturación electrónica? Sí, porque en la página oficial del SRI existen fichas y manuales sobre este nuevo proceso al que tienen que acogerse los sujetos pasivos. 10. Qué aspectos de seguridad deben tomarse en cuenta para implementar facturación electrónica? Se debe tomar en cuenta que la aplicación web tenga protocolo seguro, es decir salga por HTTPS, utilizando certificación digital, a nivel de implementación se debe tomar en cuenta las seguridades a nivel de base de datos con encriptaciones de los campos a nivel de claves, cifrado de información. Así mismo cada usuario deberá manejar su firma electrónica para que pueda realizar el proceso de emisión de comprobantes electrónicos así como también a nivel de aplicación los usuarios deberán tener un módulo de autenticación de usuarios. 8 11. En qué forma los clientes de INPRISE solicitan la implementación de la facturación electrónica? Los clientes de INPRISE solicitan la implementación mediante reuniones de trabajo, por correo electrónico y vía telefónica. Análisis de Entrevista Después de realizar la entrevista al Gerente-Propietario de la empresa INRPISE se obtuvo como resultado una información detallada de los principales requerimientos que tienen los clientes de INPRISE tales como: El Gerente indicó que las dificultades que existen en las empresas para implementar un nuevo sistema contable en donde contenga un módulo de facturación electrónica, son principalmente los recursos económicos para adquirirlo; por otro lado las empresas no cuentan con personal técnico y/o capacitado, además manifestó que la empresa INPRISE sí tiene solicitudes por parte de sus clientes en cuanto a la implementación de este tipo de soluciones de emisión de comprobantes electrónicos, ya que es un requerimiento emitido por parte de la administración tributaria SRI; y finalmente el Gerente-Propietario señaló que se debe tomar algunos aspectos de seguridad al momento de implementar una aplicación web en las empresas como por ejemplo tener un protocolo seguro, es decir salga por HTTPS, utilizando certificación digital. A nivel de implementación se debe tomar en cuenta las seguridades de base de datos con encriptaciones de los campos a nivel de claves, cifrado de información. Así mismo cada usuario deberá manejar su firma electrónica para que pueda realizar el proceso de emisión de comprobantes electrónicos así como también a nivel de aplicación los usuarios deberán tener un módulo de autenticación de usuarios, de esta manera se ha determinado que la solución a todos estos inconvenientes es el de desarrollar una aplicación web para la emisión de comprobantes electrónicos de los clientes de INPRISE de la ciudad de Ibarra. 1.11. Resumen de la Estructura del Proyecto El presente trabajo investigativo, tiene en su primera parte una estructura que está conformado principalmente por los antecedentes de la investigación seguido por el planteamiento y la formulación del problema, así como también se delimitó el problema para obtener el objeto de investigación y campo de acción en el que se ejecutará el proyecto, identificando la línea de investigación de acuerdo al Manual de Investigación 2012 emitido por la Universidad Regional Autónoma de los Andes –UNIANDES-, a 9 continuación se planteó el objetivo general y los específicos que se derivan para dar cumplimiento a la investigación, luego del análisis se logró establecer la idea a defender; mediante la justificación se definió la relevancia, importancia y conveniencia sobre el trabajo investigativo, además se empleó una metodología de acuerdo al proyecto a realizarse, finalmente se explicó el aporte teórico y la significación práctica con la que se finaliza la primera parte. En la segunda parte se utilizó una estructura teórica que permitió tener un conocimiento evidente del objeto de estudio, para concluir la tercera y última parte del trabajo investigativo se realizó el desarrollo de la propuesta dando así solución al problema investigativo. 1.12. Aporte Teórico y significativo práctica Como aporte teórico es la investigación enfocada a los procesos de emisión de comprobantes electrónicos y aplicación web mediante el uso de herramientas tecnológicas para su entorno. El presente trabajo investigativo tiene una significación práctica relevante en los clientes de la empresa INPRISE de la ciudad de Ibarra, ya que tendrán disponible el módulo de facturación electrónica con lo que podrán dar cumplimiento a las disposiciones emitidas por la Administración Tributaria SRI. Por otro lado la novedad científica reside en la utilización de herramientas informáticas de libre distribución como el manejo del framework django con un lenguaje de programación Python y su gestor de base de datos postgresql, las cuales son herramientas tecnológicas novedosas de fácil manejo y mayor seguridad en el desarrollo de la aplicación. 10 CAPÍTULO II 2. MARCO TEÓRICO 2.1. Origen de los procesos de emisión de comprobantes electrónicos La contabilidad es quizás una de las actividades por no decir la más importante dentro del campo de los negocios y empresas, dada su naturaleza de informar acerca del incremento de la riqueza, la productividad y el posicionamiento de las empresas en los ambientes competitivos. La importancia de los sistemas de información contable radica en la utilidad que tienen estos tanto para la toma de decisiones de los socios de las empresas como para aquellos usuarios externos de la información. Por lo anterior uno de los retos de la contabilidad en el mundo de hoy aparte de seguir apoyándose en la contabilidad normal que en sí misma plantea la validez de la información contable, debe encontrar y aplicar nuevos elementos que le permitan de una manera integral reflejar todo lo que ocurre en la empresa evidenciándolo en los estados financieros y en los respectivos informes. Un efecto que produce estos nuevos cambios en la presentación de la información es que hace que sobresalga en medio de otras empresas. Los sistemas de información han desempeñado un lugar importante en el mercado como elemento de control y organización, sin embargo no debe delimitarse solo a esa función, dado que se encuentra en la necesidad de buscar el poder explicativo de los sistemas de Información en el comportamiento de los usuarios de la información empresarial, así no solo se busca un manejo técnico en la empresa sino que se tomen todos los componentes de la empresa tanto tangibles como intangibles que se permitan competir en un entorno que cada vez es más fuerte y más agresivo. La debida utilización de los Sistemas de Información se ha venido desarrollando desde que se comenzaron a implementar los ordenadores informáticos en el soporte técnico de las empresas para convertir sus datos en algo ágil y ordenado; por esta razón se ha venido creando diferentes Sistemas de Información que se acomoden a la características y los fines que se quieren alcanzar en los entornos en los que se desenvuelven las empresas 11 y cumplir con la información que satisfaga los clientes, proveedores y accionistas, como la agilidad y validez de los datos que se procesan. (Pérez Samiento, 2015) En el Ecuador la institución que administra los asuntos tributarios es el Servicio de Rentas Internas, SRI, el mismo que fue creado el 02 de diciembre de 1997 basándose en los principios de justicia y equidad, como respuesta a la alta evasión tributaria, alimentada por la ausencia casi total de cultura tributaria. Desde su creación se ha destacado por ser una institución independiente en la definición de políticas y estrategias de gestión que han permitido que se maneje con equilibrio, transparencia y firmeza en la toma de decisiones, aplicando de manera transparente tanto sus políticas como la legislación tributaria. (SRI, 2015) La administración tributaria (SRI), con el afán de facilitar los procesos, ha permitido e incentivado a incorporar herramientas tecnológicas en las empresas y negocios que faciliten el cumplimiento de las obligaciones tributarias en el Ecuador, por tal motivo según la Resolución No. NAC-DGERCGC12-00105 con fecha 9 de marzo del 2012, se promueve la emisión de comprobantes electrónicos en el que RESUELVE: EXPEDIR LAS NORMAS PARA COMPROBANTES DE EL NUEVO VENTA, ESQUEMA RETENCIÓN DE EMISIÓN DE Y DOCUMENTOS COMPLEMENTARIOS MEDIANTE MENSAJE DE DATOS (COMPROBANTES ELECTRÓNICOS), mencionando que se debe cumplir con los requisitos legales y reglamentarios de dicha entidad hacia los sujetos pasivos. Es por ello que surge la necesidad en las empresas de contar con aplicaciones o sistemas que les permitan administrar de forma adecuada la información que genera sus procesos en concordancia con la normativa vigente. 2.2. Análisis de las distintas posiciones teóricas sobre el objeto de investigación Según, Pérez (2013), expresa una sencilla definición de proceso, y que responde al significado: Secuencia [ordenada] de actividades [repetitivas] cuyo producto tiene valor intrínseco para su usuario o cliente. Según, SRI (2015), menciona que un comprobante electrónico es aquel mensaje de datos que está firmado electrónicamente, referido a una transacción económica, que contiene 12 toda información creada, generada, procesada, enviada, recibida, comunicada o archivada por medios electrónicos y que puede ser intercambiada por cualquier medio. Según la Resolución No. NAC-DGERCGC12-00105, fechado el 09 de marzo del 2012, en su artículo 2, menciona: “Los sujetos pasivos de tributos, podrán emitir como ‘mensajes de datos’ conforme la definición de la ‘Ley de Comercio Electrónico, Firmas Electrónicas y Mensajes de Datos’, los siguientes comprobantes de venta, retención y documentos complementarios: a) Facturas; b) Comprobantes de Retención; c) Guías de Remisión; d) Notas de Crédito; e) Notas de Débito;” Con la relación a las distintas posiciones teóricas, se puede definir que los procesos son pasos a seguir para llegar a obtener un resultado, los comprobantes electrónicos a emitirse son facturas, comprobantes de retención, guías de remisión, notas de crédito y notas de débito; para el desarrollo de la aplicación se utilizará nuevas tecnologías que permiten mejorar los procesos de emisión de comprobantes electrónicos en los clientes de la empresa INPRISE de la ciudad de Ibarra. 2.3. Valoración crítica de los conceptos principales 2.3.1. Procesos de facturación electrónica 2.3.1.1. Aplicación web a) Definición.- Una aplicación web es una extensión dinámica de un servidor web o un servidor de aplicaciones. En general, existen dos tipos de aplicaciones web: las orientadas a presentación, que generan páginas web interactivas en distintos lenguajes de marcador (HTML, XML, etc.) y contenido dinámico a las peticiones de los clientes; y las orientadas a servicio, que constituye el punto final de un servicio web. (Roldán Martínez, Valderas Aranda, & Óscar, 2010, pág. 26) 13 b) Características de Aplicación Web El beneficiario puede obtener facilidad de acceso a las aplicación web mediante cualquier navegador web ya sea mozilla, chrome, entre otros. El beneficiario puede acceder a la aplicación web sin importar donde se encuentre, pero, al mismo tiempo debe tener acceso a internet. Existe una sola aplicación instalada en el servidor, pero pueden existir miles de clientes que acceden al mismo tiempo a dicha aplicación; por lo tanto se puede actualizar y mantener una única aplicación y todos sus clientes verán los resultados inmediatamente. c) Ciclo de vida de una aplicación web Una aplicación web está formada por componentes web, ficheros de recursos estáticos como las imágenes, clases y librerías de utilidades. El contenedor proporciona algunos servicios de soporte que mejoran las capacidades de los componentes web y los hacen más sencillos de desarrollar. Sin embargo, puesto que una aplicación web debe tener en cuenta estos servicios, el proceso de creación y ejecución de una aplicación web es distinto del de una aplicación Java tradicional. Podríamos decir que este proceso se divide en las siguientes seis etapas: Codificación del componente web. Codificación del descriptor de despliegue de la aplicación. Complicación de los componentes web de la aplicación y las clases de apoyo referenciadas por aquéllos. Opcionalmente, empaquetamiento de la aplicación en una unidad desplegable. Despliegue de la aplicación en un contenedor web. Acceso a la URL que referencia a la aplicación desarrollada. (Roldán Martínez, Valderas Aranda, & Óscar, 2010, pág. 28) d) Módulos web En la arquitectura Java EE, los componentes web y los ficheros de recursos estáticos reciben el nombre genérico de recursos web. Un módulo web es la unidad despegable y utilizable más pequeña de un recurso web. Un módulo web Java EE se corresponde a una aplicación web, tal y como la define la especificación de los Java Servlet. 14 Además de los componentes web y los recursos web, un módulo web puede contener otros ficheros: Clases de utilidades en el lado del servidor, generalmente, en forma de Java Beans. Clases en el lado del cliente como applets y clases de utilidades. (Roldán Martínez, Valderas Aranda, & Óscar, 2010, pág. 28) 2.3.1.2. Facturación electrónica a) Definición.- Según (Moro Vallina & Rodés Bach, 2014, pág. 62) Una factura electrónica es el equivalente virtual de una factura en papel, un documento electrónico que cumplen los mismos requisitos funcionales que esta. La facturación electrónica consiste en la transmisión de un fichero o archivo entre el ordenador del emisor y del receptor, firmado digitalmente para garantizar su identidad. b) Ventajas de la facturación electrónica. Ahorro de costes Mejora de la eficiencia Integración con las aplicaciones de gestión internas de la empresa. Obtención de la información en tiempo real. Reducción de tiempo de gestión. Agilidad en la toma de decisiones. Disminución de costes de los documentos en papel. Control de acciones erróneas. Uso eficaz de los recursos financieros. (Moro Vallina & Rodés Bach, 2014, pág. 62) 2.3.1.3. Comprobantes electrónicos Es el envío mediante "mensajes de datos", de comprobantes de venta, retención y documentos complementarios, los cuales contienen una firma electrónica del contribuyente emisor, se envían en tiempo real y tienen validez tributaria. (Servicio de Rentas Internas, 2015) Según la Resolución No. NAC-DGERCGC12-00105, fechado el 09 de marzo del 2012, en su artículo 2, menciona: “Los sujetos pasivos de tributos, podrán emitir como 15 ‘mensajes de datos’ conforme la definición de la ‘Ley de Comercio Electrónico, Firmas Electrónicas y Mensajes de Datos’, los siguientes comprobantes de venta, retención y documentos complementarios: f) Facturas; g) Comprobantes de Retención; h) Guías de Remisión; i) Notas de Crédito; j) Notas de Débito;” 2.3.1.4. Firmas electrónicas a) Definición.- Son los datos en forma electrónica consignados en un mensaje de datos, adjuntados y lógicamente asociados al mismo, y que puedan ser utilizados para identificar al titular de firma en relación con el mensaje de datos, e indicar que el titular de la firma aprueba y reconoce la información contenida en el mensaje de datos. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 4) b) Efectos de la firma electrónica.- La firma electrónica tendrá igual validez y se le reconocerán los mismos efectos jurídicos que a una firma manuscrita en la relación con los datos consignados en documentos escritos y será admitida como prueba en juicio. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 4) c) Requisitos de la firma electrónica.- Para su validez, la firma electrónica reunirá los siguientes requisitos, sin perjuicio de los que puedan establecerse por acuerdo entre las partes: Ser individual y estar vinculada exclusivamente a su titular; Que permita verificar inequívocamente la auditoría e identidad del signatario, mediante dispositivos técnicos de comprobación establecidos por esta Ley y sus reglamentos; Que su método de creación y verificación sea confiable, seguro e inalterable para el propósito para el cual el mensaje fue generado o comunicado; 16 Que al momento de creación de la firma electrónica, los datos con los que se creare se hallen bajo control exclusivo del signatario; y, Que la firma sea controlada por la persona a quien pertenece. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 5) d) La firma electrónica en un mensaje de datos.- Cuando se fijare la firma electrónica en un mensaje de datos, aquélla deberá enviarse en un mismo acto como parte integrante del mensaje de datos o lógicamente asociada a éste. Se presumirá legalmente que el mensaje de datos firmado electrónicamente conlleva la voluntad del emisor, quien se someterá al cumplimiento de las obligaciones contenidas en dicho mensaje de datos, de acuerdo a lo determinado en la Ley. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 5) e) Obligaciones del titular de la firma electrónica.- El titular de la firma electrónica deberá: Cumplir con la obligaciones derivadas del uso de la firma electrónica; Actuar con la debida diligencia y tomar las medidas de seguridad necesarias, para mantener la firma electrónica bajo su estricto control y evitar toda utilización no autorizada; Notificar por cualquier medio a las personas vinculadas, cuando exista el riesgo de que su firma sea controlada por terceros no autorizados y utilizada indebidamente; Verificar la exactitud de sus declaraciones; Responder por las obligaciones derivadas del uso no autorizado de su firma, cuando no hubiere obrado con la debida diligencia para impedir su utilización, salvo que el destinatario conociere de la inseguridad de la firma electrónica o no hubiere actuado con la debida diligencia; Notificar a la entidad de certificación de información los riesgos sobre su firma y solicitar oportunamente la cancelación de los certificados; y, 17 Las demás señaladas en la ley y sus reglamentos. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 5) f) Duración de la firma electrónica.- Las firmas electrónicas tendrán duración indefinida. Podrán ser revocadas, anuladas o suspendidas de conformidad con lo que el Reglamento a esta Ley señale. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 5) g) Certificado de firma electrónica.- Es el mensaje de datos que certifica la vinculación de una firma electrónica con una persona determinada, a través de un proceso de comprobación que confirma su identidad. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 6) h) Uso del certificado de firma electrónica.- El certificado de firma electrónica se empleará para certificar la identidad del titular de una firma electrónica y para otros usos, de acuerdo a esta Ley y su Reglamento. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 6) i) Requisitos de los certificados de firma electrónica.- El certificado de firma electrónica para ser considerado válido contendrá los siguientes requisitos: Identificación de la entidad de certificación de información; Domicilio legal de la entidad de certificación de información; Los datos del titular del certificado que permitan su ubicación e identificación; El método de verificación de la firma del titular del certificado; Las fechas de emisión y expiración del certificado; El número único de serie que identifica el certificado; La firma electrónica de la entidad de certificación de información; Las limitaciones o restricciones para los usos del certificados; e, Los demás señalados en esta Ley y los reglamentos. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 6) 18 j) Duración del certificado de firma electrónica.- Salvo acuerdo contractual, el plazo de validez de los certificados de firma electrónica será el establecimiento en el Reglamento a esta Ley. (Publicaciones, Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias, 2012, pág. 6) Se enuncia a continuación las entidades certificadoras en el país para la adquisición de los certificados digitales de la firma electrónica: ENTIDADES DE CERTIFICACIÓN Banco Central del Ecuador Consejo de la Judicatura Security Data ANF Tabla 1 Entidades de Certificación de firmas electrónicas Elaborado por: El Autor Cabe mencionar que dos entidades son instituciones públicas y las restantes son empresas privadas. 2.3.1.5. Procesos a) Definición.- Una sencilla definición de proceso, y que responde al significado que a esta palabra hemos dado en este texto, es: Secuencia [ordenada] de actividades [repetitivas] cuyo producto tiene valor intrínseco para su usuario o cliente. (Pérez Fernández de Velasco, 2013, pág. 49) 2.3.1.6. Correo Electrónico a) Definición.- El correo electrónico (también conocido como e-mail, email o mail) funciona de manera similar al correo tradicional, pero ofrece mayores prestaciones. Para intercambiar mensajes por medio de este sistema, se necesita contar con una dirección de correo electrónico y tener acceso a un equipo (computadora, teléfono móvil u otro dispositivo) con conexión internet. 19 Y desde el equipo con conectividad a internet hay dos maneras de usar el e-mail. Una de ellas es a través de los sistemas Web mail como Gmail (www.gmail.com), Yahoo! (www.yahoo.com) y Hotmail (www.hotmail.com), a los cuales se accede por medio de un navegador Web. La otra alternativa es usar un software específico (Microsoft Outlook o Mozilla Thunderbird, entre otros) que se debe tener instalado en el dispositivo electrónico (por ejemplo, computadora o teléfono móvil) con conexión a Internet. (Veloso, 2011, pág. 91) 2.3.1.7. Base legal Ley Régimen Tributario Interno Ley de Comercio Electrónico, Firmas y Mensajes de Datos publicando en el Suplemento del Registro Oficial No. 735 de 31 de diciembre de 2002. Decreto No. 181 publicado en el Registro Oficial No. 553 de 11 de octubre del 2011, en el cual norma la numeración de identificadores de campo y campos mínimos de los tipos de certificados. Reglamento para la Aplicación de la Ley de Régimen Tributario Interno. Reglamento de Comprobantes de Venta, Retención y Documentos Complementarios. Resolución No. NAC-DGERCGC12-00105 de 09 de marzo de 2012, publicada en Registro Oficial No. 666 de 21 de marzo de 2012. Resolución NAC-DGERCGC14-00790, publicada en el Registro Oficial 346 de 2 de octubre de 2014. Resolución NAC-DGERCGC14-00787, publicada en el Registro Oficial 346 de 2 de octubre de 2014. Resolución NAC-DGERCGC15-00000284, publicada en el Registro Oficial 473 de 6 de abril de 2015. 2.3.2. Herramientas de desarrollo 2.3.2.1. XML a) Definición.- XML (eXtended Markup Language) es un lenguaje de marcas. Procede de SGML (Standard Generalized Markup Language), un metalenguaje 20 diseñado para construir estructuras de datos descriptivas. SGML pese a ser muy potente, es demasiado complejo para la mayoría de las aplicaciones. Por ellos se intentó definir una versión más simplificada y mucho más flexible: XML. La relación entre ambos lenguajes está representada en la Figura 1. (Roldán Martínez, Valderas Aranda, & Óscar, 2010, pág. 255) HTML XML SGML Figura 1 XML y otros lenguajes de marcas Elaborado por: El autor Al igual que HTML, XML utiliza etiquetas, sin embargo, en lugar de especificar cómo debe presentarse la información contenida entre las marcas, se limitan a indicar qué significan. Por ejemplo, <autor> David Roldán </autor>. XML Tratamiento de la información Procesamiento de la información Se encarga de estructurar la información de forma lógica. Sencillo, ya que toda la información se encuentra ya estructurada según una lógica específica. HTML Se centra en la forma de presentar la información Muy complejo, debido a información se encuentra mezclada con etiquetas que definen el estilo de presentación. Tabla 2 XML vs HMTL Elaborado por: El autor En definitiva, XML, junto con todas sus tecnologías relacionadas, abre un nuevo abanico de posibilidades a la hora de desarrollar aplicaciones. Una de las grandes ventajas de XML es su orientación al intercambio de información, al ser independiente de la aplicación que lo utilice. La figura 2 muestra cómo la información contenida en un único documento XML es visualizada en dispositivos diferentes. Esta facilidad de intercambio de información ha convertido a XML en el punto alrededor del cual giran la mayoría de las aplicaciones B2B (Business to Business). (Roldán Martínez, Valderas Aranda, & Óscar, 2010, pág. 256) 21 INFORMACIÓN Figura 2 Aplicaciones de XML Elaborado por: EL autor b) Modelos de Procesamiento XML En general, el modelo de procesamiento de documentos XML en Java se divide en tres fases: Procesamiento de la entrada XML Análisis y validación del documento fuente. Reconocimiento y búsqueda de información basándose en su etiquetado en el documento fuente. Extracción de la información localizada. Manejo de la lógica de negocio Procesamiento de la salida XML: Construcción de un modelo de documento. Aplicación de hojas de estilo XSLT o serialización directamente a XML. (Roldán Martínez, Valderas Aranda, & Óscar, 2010, pág. 265) 2.3.2.2. JavaScript JavaScript es actualmente una tecnología vital en lo que al desarrollo de aplicaciones modernas para la Web se refiere. Todos los navegadores se han estado esforzando en dar un mejor soporte y rendimiento para JavaScript, adicionalmente otros grupos han creado extensiones muy interesantes para esta tecnología. Todos los desarrolladores Web hoy en día estarán de acuerdo con las anteriores afirmaciones, pero lo que hace a JavaScript aún más importante es que está acompañando en su evaluación a HTML5, lo que hace de la Web ya no sólo un asunto de alojar páginas 22 para después mostrarlas, sino la convierte en una verdadera plataforma de desarrollo para aplicaciones. (Herrera Ríos, 2012, pág. 163) 2.3.2.3. CSS Las hojas de estilo en cascada (Cascading Style Sheets) ofrecen propiedades para ampliar el lenguaje HTML en la presentación visual de las páginas Web. El lenguaje CSS, definido por primera vez en el año 1996, es el más conocido y utilizado para definir las propiedades de formato de los diferentes elementos HTML. Este lenguaje permite vincular los ducmentos HTML con “Plantillas de documento” (Hojas de estilo o StyleSheets), que, además de contener la información topográfica de los elementos visuales de la página, permiten separar completamente la estructura de contenidos de su representación y presentación actuales, no sólo en el monitor sino en cualquier pantalla imaginable (móvil, PDA, etc), tecnología de soporte (lectores de pantalla, líneas en braille) o en el papel impreso. El propio lenguaje (X)HTML se ha visto reforzado para la construcción de las estructuras lógicas de la página. (Schulz, 2009, pág. 4) 2.3.2.4. jQuery 2.0 jQuery es uno de los complementos más esenciales para el desarrollo web, usado en millones de sitios en toda la web, ya que nos facilita mucho el desarrollo de aplicaciones enriquecidas del lado del cliente, en Javascript, compatibles con todos los navegadores. Para los que se inician, conviene aclarar que jQuery no es un lenguaje, sino una serie de funciones y métodos de Javascript. Por tanto, Javascript es el lenguaje y jQuery es una librería que podemos usar opcionalmente si queremos facilitar nuestra vida cuando programamos en Javascript. A veces nos podemos referir a jQuery como framework o incluso como un API de funciones, útiles en la mayoría de proyectos web. Antes de llegar jQuery los desarrolladores estábamos obligados a discriminar entre los diversos navegadores, para ejecutar aquel código Javascript que funcionaba en cada browser. Con la llegada de jQuery la principal ventaja es que ya no necesitamos preocuparnos sobre si el navegador del usuario es Explorer, Chrome, Firefox, etc. sino que la propia librería hará el trabajo "sucio" por nosotros y ejecutará el código que sea compatible con el software del cliente que está accediendo a nuestra web. Para ello usaremos las funciones que jQuery nos proporciona, dentro de un grandísimo abanico de 23 funcionalidades que además se extiende por medio de miles de plugins que ofrece la comunidad para implementar cualquier tipo de comportamiento. (Alvarez, 2012) 2.3.2.5. HTML5 HTML es parte esencial de la Web y ha logrado cambiar y madurar al ritmo de Internet en general, en las primeras concepciones del HTML fue simplemente una manera útil de usar etiquetas (tags) para determinar cómo una página debería ser desplegada, pero se han ido añadiendo varias características. Hoy Internet sigue siendo acerca de documentos, pero más que nunca, también de aplicaciones, sobre todo si se toma en cuenta que antes sólo las computadoras de escritorio eran las únicas que desplegaban contenido de la Web, pero ahora también los dispositivos móviles lo pueden hacer, por lo que todo parece indicar que es el momento de un nuevo estándar, y HTML5 es ese estándar. (Herrera Ríos, 2012, pág. 3) a) Ventajas Posee una gran cantidad de funcionalidades que los desarrolladores sólo lograban con el uso de algún plug-in de terceros como Applets de Java o Flash embebidos en el código. Las mejoras en el manejo de multimedia son ampliamente superiores; imágenes, video, audio y fuentes de texto son mucho más manipulables. En muchos casos, estas mejoras se pueden tomar como una respuesta directa a Flash. HTML5 nos proporcionará una manera de hacer un código más limpio, más fácil de leer y escribir. b) Desventaja HTML5 es tan nuevo que algunas personas que todavía usan computadoras viejas podrían usar navegadores que no puedan visualizarlo aún. (Herrera Ríos, 2012, pág. 6) 24 2.3.3. Servidores web 2.3.3.1. NGINX NGINX (pronunciado como “engine X”) es un servidor web HTTP de código abierto que también incluye servicios de correo electrónico con acceso al Internet Message Protocol (IMAP) y al servidor Post Office Protocol (POP). Además, NGINX está listo para ser utilizado como un proxy inverso. En este modo, NGINX se utiliza para equilibrar la carga entre los servidores back-end, o para proporcionar almacenamiento en caché para un servidor back-end lento. Empresas como la compañía de TV online Hulu utilizan NGINX por su estabilidad y configuración simple. Otros usuarios, como Facebook y WordPress.com, lo utilizan porque la arquitectura asíncrona del servidor web deja una pequeña huella de memoria y bajo consumo de recursos, haciéndolo ideal para el manejo de múltiples y cambiantes activas páginas Web. Esa es una tarea difícil. De acuerdo al director de NGINX, el arquitecto Igor Sysoev, es así como NGINX puede soportar cientos de millones de usuarios de Facebook. El programa está disponible para su uso y es de código abierto. De acuerdo con Sysoev, el modelo de negocio de la compañía se basa en dos licencias. “La versión con software libre [Software Libre y Código Abierto] más funcional y actualizada”, y una. “extensiones comerciales para ser reconocidos en base a esta versión y que valga la pena su compra para las empresas que necesitan funciones avanzadas que normalmente no están disponibles en ningún otro producto open-source similar. (DesdeLinux, 2013) a) Características Servidor de archivos estáticos, índices y autoindexado. Proxy inverso con opciones de caché. Balanceo de carga. Tolerancia a fallos. Soporte de HTTP sobre SSL. Soporte para FastCGI con opciones de caché. Servidores virtuales basados en nombre y/o en dirección IP. 25 Streaming de archivos FLV y MP4.8 Soporte para autenticación. Compatible con IPv6 Soporte para protocolo SPDY Compresión gzip. Habilitado para soportar más de 10.000 conexiones simultáneas. (Wikipedia, 2015) 2.3.4. Base de datos Una Base de Datos es una colección de información perteneciente a un mismo contexto (o problema), que está almacenada de forma organizada en ficheros. Una base de datos está organizada mediante tablas, que almacenan información concerniente a algún objeto o suceso. Estas tablas se relacionan formando vínculos o relaciones entre ellas, que ayudan a mantener la información de los diversos objetos de forma ordenada y coherente (sin contradicciones). Cada una de estas tablas es una estructura que se parece a las hojas de cálculo, pues está dispuesta mediante filas y columnas. De este modo, cada fila almacena un registro con tantos campos como columnas tenga la tabla. (López Montalbán, Castellano Pérez, & Orpino Rivas, 2013, págs. 6 - 7) 2.3.4.1. Conceptos Uno de los grandes problemas al que se enfrentan los informáticos cuando comienzan su aprendizaje, es el gran número de términos desconocidos que debe asimilar, incluyendo el enorme número de sinónimos y siglas que se utilizan para nombrar la misma cosa. A continuación se definen los siguientes conceptos: Dato: El dato es un trozo de información concreta sobre algún concepto o suceso. Por ejemplo, 1996 es un número que representa un año de nacimiento de una persona. Los datos se caracterizan por pertenecer a un tipo. Tipo de Dato: El tipo de dato indica la naturaleza del campo. Así, se puede tener datos numéricos, que son aquellos con los que se pueden realizar cálculos aritméticos (sumas, restas, multiplicaciones…) y los alfanuméricos, que son los que contienen caracteres alfabéticos y dígitos numéricos. Estos datos alfanuméricos y 26 numéricos se pueden combinar para obtener tipos de datos más elaborados. Por ejemplo, el tipo de dato Fecha contiene tres datos numéricos, representado el día, el mes y el año de esta fecha. Campo: Un campo es un identificador para toda una familia de datos. Cada campo pertenece a un tipo de datos. Por ejemplo, el campo “Fecha Nacimiento” representa las fechas de nacimiento de las personas que hay en la tabla. Este campo pertenece al tipo de dato Fecha. Al campo también se le llama columna. Registro: Es una recolección de datos referentes a un mismo concepto o suceso. Por ejemplo, los datos de una persona pueden ser un NIF, año de nacimiento, su nombre, su dirección, etc. A los registros también se les llama tuplas o filas. Campo Clave: Es un campo especial que identifica de forma única a cada registro. Así, el NIF es único para cada persona, por tanto es campo clave. Tabla: Es un conjunto de registros bajo un mismo nombre que representa el conjunto de todos ellos. Por ejemplo, todos los clientes de una base de datos se almacenan en una tabla cuyo nombre es Clientes. Consulta: Es una instrucción para hacer peticiones a una base de datos. Puede ser una búsqueda simple de un registro específico o una solicitud para seleccionar todos los registros que satisfagan un conjunto de criterios. Aunque en castellano, consulta tiene un significado de extracción de información, en inglés query, una consulta es una petición, por tanto, además de las consultas de búsqueda de información, que devuelven los campos y registros solicitados, hay consultas (peticiones) de eliminación o inserción de registros, de actualización de registros, cuya ejecución altera los valores de los mismos. Índice: Es una estructura que almacena los campos clave de una tabla, organizándolos para hacer más fácil encontrar y ordenar los registros de esa tabla. El índice tiene un funcionamiento similar al índice de un libro, guardando parejas de elementos: el elemento que se desea indexar y su posición en la base de datos. Para buscar un elemento que esté indexado, solo hay que buscar en el índice de dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice. Vista: Es una transformación que se hace a una o más tablas para obtener una nueva tabla. Esta nueva tabla es una tabla virtual, es decir, no está almacenada en 27 los dispositivos de almacenamiento del ordenador, aunque sí se almacena su definición. Informe: Es un listado ordenado de los campos y registros seleccionados en un formato fácil de leer. Generalmente se usan como peticiones expresas de un tipo de información por parte de un usuario. Por ejemplo, un informe de las facturas impagadas del mes de enero ordenado por nombre de clientes. Guiones: o scripts. Son un conjunto de instrucciones, que ejecutadas de forma ordenada, realizan operaciones avanzadas de mantenimiento de los datos almacenados en la base de datos. Procedimientos: Son un tipo especial de script que está almacenado en la base de datos y que forma parte de su esquema. (López Montalbán, Castellano Pérez, & Orpino Rivas, 2013, págs. 7-8-9) 2.3.4.2. Estructura de una base de datos Una base de datos almacena los datos a través de un esquema. El esquema es la definición de la estructura donde se almacenan los datos, contiene todo lo necesario para organizar la información mediante tablas, registros (filas) y campos (columnas). También contiene otros objetos necesarios para el tratamiento de los datos (procemientos, vistas, índices, etc.). Al esquema también se le suele llamar metainformación, es decir, información sobre la información o metadatos. Los gestores de bases de datos modernos Oracle, MySQL, PostgreSQL y DB2, entre otros almacenan el esquema de la base de datos en tablas, de tal manera que el propio esquema de la base de datos se puede tratar como si fueran datos comunes de la base de datos. Ver figura 3. (López Montalbán, Castellano Pérez, & Orpino Rivas, 2013, págs. 9-10) 2.3.4.3. Uso de las bases de datos Las bases de datos son ubícuas, están en cualquier tipo de sistemas informático, a continuación se exponen solo algunos ejemplos de sus usos más frecuentes: Bases de datos Administrativas: Cualquier empresa necesita registrar y relacionar sus clientes, pedidos, facturas, productos, etc. Bases de datos Contables: También es necesario gestionar los pagos, balances de pérdidas y ganancias, patrimonio, declaraciones de hacienda… 28 Bases de datos motores de búsquedas: Por ejemplo Google o Altavista, tienen una base de datos gigantesta donde almacenan información sobre todos los documentos de Internet. Posteriormente millones de usuarios buscan en la base de datos de estos motores. Científicas: Recolección de datos climáticos y medioambientales, químicos, genómicos, geológicos… Configuraciones: Almacenan datos de configuración de un sistema informático, como por ejemplo, el registro de Windows. Bibliotecas: Almacenan información bibliográfica, por ejemplo, la famosa tienda virtual amazon o la biblioteca de un instituto. Censos: Guardan información demográfica de pueblos, ciudades y países. Virus: Los antivirus guardan información sobre todos los potenciales software maliciosos. Otros muchos usos: Militares, videojuegos, deportes, etc. (López Montalbán, Castellano Pérez, & Orpino Rivas, 2013, pág. 10) 2.3.4.4. PostgreSQL PostgreSQL es un sistema de gestión de bases de datos objeto-relacional, distribuido bajo licencia BSD y con su código fuente disponible libremente. Es el sistema de gestión de bases de datos de código abierto más potente del mercado y en sus últimas versiones no tiene nada que envidiarle a otras bases de datos comerciales. PostgreSQL utiliza un modelo cliente/servidor y usa multiprocesos en vez de multihilos para garantizar la estabilidad del sistema. Un fallo en uno de los procesos no afectará el resto y el sistema continuará funcionando. A continuación tenemos un gráfico que ilustra de manera general los componentes más importantes en un sistema PostgreSQL. 29 Figura 3 Componentes de un sistema PostgreSQL Fuente: (PosgrestSQL-es, 2013) Aplicación cliente: Esta es la aplicación cliente que utiliza PostgreSQL como administrador de bases de datos. La conexión puede ocurrir vía TCP/IP ó sockets locales. Demonio postmaster: Este es el proceso principal de PostgreSQL. Es el encargado de escuchar por un puerto/socket por conexiones entrantes de clientes. También es el encargado de crear los procesos hijos que se encargaran de autentificar estas peticiones, gestionar las consultas y mandar los resultados a las aplicaciones clientes Ficheros de configuración: Los 3 ficheros principales de configuración utilizados por PostgreSQL, postgresql.conf, pg_hba.conf y pg_ident.conf Procesos hijos postgres: Procesos hijos que se encargan de autentificar a los clientes, de gestionar las consultas y mandar los resultados a las aplicaciones clientes PostgreSQL share buffer cache: Memoria compartida usada por POstgreSQL para almacenar datos en caché. Write-Ahead Log (WAL): Componente del sistema encargado de asegurar la integridad de los datos (recuperación de tipo REDO) Kernel disk buffer cache: Caché de disco del sistema operativo Disco: Disco físico donde se almacenan los datos y toda la información necesaria para que PostgreSQL funcione. (PosgrestSQL-es, 2013) 30 a) Características Generales Es una base de datos 100% ACID - Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en español. Integridad referencial Tablespaces Nested transactions (savepoints) Replicación asincrónica/sincrónica / Streaming replication - Hot Standby Two-phase commit PITR - point in time recovery Copias de seguridad en caliente (Online/hot backups) Unicode Juegos de caracteres internacionales Regionalización por columna Multi-Version Concurrency Control (MVCC) Multiples métodos de autentificación Acceso encriptado vía SSL - Secure Sockets Layer Actualización in-situ integrada (pg_upgrade) SE-postgres Completa documentación Licencia BSD - Berkeley Software Distribution Disponible para Linux y UNIX en todas sus variantes (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) y Windows 32/64bit. (PosgrestSQLes, 2013) Programación / Desarrollo Funciones/procedimientos almacenados (stored procedures) en numerosos lenguajes de programacion, entre otros PL/pgSQL (similar al PL/SQL de oracle), PL/Perl, PL/Python y PL/Tcl. 31 Bloques anónimos de código de procedimientos (sentencias DO). Numerosos tipos de datos y posibilidad de definir nuevos tipos. Además de los tipos estándares en cualquier base de datos, tenemos disponibles, entre otros, tipos geométricos, de direcciones de red, de cadenas binarias, UUID, XML, matrices, etc. Soporta el almacenamiento de objetos binarios grandes (gráficos, videos, sonido, ...) APIs para programar en C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, PHP, Lisp, Scheme, Qt y muchos otros. (PosgrestSQL-es, 2013) 2.3.5. Lenguajes de Programación 2.3.5.1. Phyton a) Definición de Python Python es un lenguaje de programación creado por Guido Van Rossum a principios de los años 90 cuyo nombre está inspirado en el grupo de cómicos ingleses “Monty Python”. Es un lenguaje similar a Perl, pero con una sintaxis muy limpia y que favorece un código legible. Se trata de un lenguaje interpretado o de script, con tipado dinámico, fuertemente tipado, multiplataforma y orientado a objetos. b) Lenguaje interpretado o de script Un lenguaje interpretado o de script es aquel que se ejecuta utilizando un programa intermedio llamado intérprete, en lugar de compilar el código a lenguaje máquina que pueda comprender y ejecutar directamente una computadora (lenguajes compilados). La ventaja de los lenguajes compilados es que su ejecución es más rápida. Sin embargo los lenguajes interpretados son más flexibles y más portables. Python tiene, no obstante, muchas de las características de los lenguajes compilados, por lo que se podría decir que es semi interpretado. En Python, como en Java y muchos otros lenguajes, el código fuente se traduce a un pseudo código 32 máquina intermedio llamado bytecode la primera vez que se ejecuta, generando archivos .pyc o .pyo (bytecode optimizado), que son los que se ejecutarán en sucesivas ocasiones. c) Tipado dinámico La característica de tipado dinámico se refiere a que no es necesario declarar el tipo de dato que va a contener una determinada variable, sino que su tipo se determinará en tiempo de ejecución según el tipo del valor al que se asigne, y el tipo de esta variable puede cambiar si se le asigna un valor de otro tipo. d) Fuertemente tipado No se permite tratar a una variable como si fuera de un tipo distinto al que tiene, es necesario convertir de forma explícita dicha variable al nuevo tipo previamente. Por ejemplo, si tenemos una variable que contiene un texto (variable de tipo cadena o string) no podremos tratarla como un número (sumar la cadena “9” y el número 8). En otros lenguajes el tipo de la variable cambiaría para adaptarse al comportamiento esperado, aunque esto es más propenso a errores. e) Multiplataforma El intérprete de Python está disponible en multitud de plataformas (UNIX, Solaris, Linux, DOS, Windows, OS/2, Mac OS, etc.) por lo que si no utilizamos librerías específicas de cada plataforma nuestro programa podrá correr en todos estos sistemas sin grandes cambios. f) Orientado a objetos La orientación a objetos es un paradigma de programación en el que los conceptos del mundo real relevantes para nuestro problema se trasladan a clases y objetos en nuestro programa. La ejecución del programa consiste en una serie de interacciones entre los objetos. Python también permite la programación imperativa, programación funcional y programación orientada a aspectos. 33 g) Por qué Python Python es un lenguaje que todo el mundo debería conocer. Su sintaxis simple, clara y sencilla; el tipado dinámico, el gestor de memoria, la gran cantidad de librerías disponibles y la potencia del lenguaje, entre otros, hacen que desarrollar una aplicación en Python sea sencillo, muy rápido y, lo que es más importante, divertido. La sintaxis de Python es tan sencilla y cercana al lenguaje natural que los programas elaborados en Python parecen pseudocódigo. Por este motivo se trata además de uno de los mejores lenguajes para comenzar a programar. Python no es adecuado sin embargo para la programación de bajo nivel o para aplicaciones en las que el rendimiento sea crítico. Algunos casos de éxito en el uso de Python son Google, Yahoo, la NASA, Industrias Light & Magic, y todas las distribuciones Linux, en las que Python cada vez representa un tanto por ciento mayor de los programas disponibles. (González Duque, S/A) h) Características principales de Python Python es un lenguaje de programación de propósito general, de muy alto nivel (esto es, un alto nivel de abstracción, con el uso de listas, tuplas, diccionarios). Python es un lenguaje interpretado (no es necesaria compilación), dinámico (no necesita identificar explícitamente los tipos de datos para inicializar variables, de modo que los tipos se validan durante la ejecución del programa) y fuertemente tipado (no pueden mezclarse tipos, es necesario hacer conversiones). Python es un lenguaje multiplataforma (Windows, Mac, Linux, etc), multiparadigma (imperativo, orientado a objetos y en menos medida funcional) y con gestión automática de memoria. Por último cabe destacar que Python es un lenguaje de programación con una sintaxis clara y sencilla, fácil de aprender, donde se pueden mezclar los diferentes paradigmas de programación de los que dispone, ampliamente 34 documentado, extensible, que intenta obligar al desarrollador de software a programar de la manera correcta en el menor tiempo posible. 2.3.5.2. Django Django fue desarrollado para satisfacer esas nuevas ambiciones. Django te permite construir en profundidad, de forma dinámica, sitios interesantes en un tiempo extremadamente corto. Django está diseñado para hacer foco en la diversión, en las partes interesantes de tu trabajo, al mismo tiempo que alivia el dolor de las partes repetitivas. Al hacerlo, proporciona abstracciones de alto nivel a patrones comunes del desarrollo Web, agrega atajos para tareas frecuentes de programación y claras convenciones sobre cómo resolver problemas. Al mismo tiempo, intenta mantenerse fuera de tu camino, dejando que trabajes fuera del alcance del framework cuando sea necesario. (García, 2015) a) Historia Antes de empezar a escribir código, deberíamos tomarnos un momento para explicar la historia de Django. Y para mostrar cómo se hacen las cosas sin usar atajos, esto nos ayudará a entenderlos mejor. Es útil entender por qué se creó el framework, ya que el conocimiento de la historia pone en contexto la razón por la cual Django trabaja de la forma en que lo hace. Si has estado creando aplicaciones Web por un tiempo, probablemente estés familiarizado con los siguientes problemas. El camino clásico de un desarrollador Web es algo como esto: 1. Escribir una aplicación Web desde cero. 2. Escribir otra aplicación Web desde cero. 3. Darse cuenta de que la aplicación del paso, 1 tiene muchas cosas en común con la aplicación del paso 2. 4. Refactorizar el código para que la aplicación 1, comparta código con la aplicación 2. 5. Repetir los pasos 2-4 varias veces. 6. Darse cuenta de que acabamos de inventar un framework. Así es precisamente como surgió Django. 35 Django nació naturalmente de aplicaciones de la vida real escritas por un equipo de desarrolladores Web en Lawrence, Kansas. Nació en el otoño boreal de 2003, cuando los programadores Web del diario Lawrence Journal-World, Adrian Holovaty y Simon Willison, comenzaron a usar Python para crear sus aplicaciones. El equipo de The World Online, responsable de la producción y mantenimiento de varios sitios locales de noticias, prosperaban en un entorno de desarrollo dictado por las fechas límite del periodismo. Para los sitios –incluidos LJWorld.com, Lawrence.com y KUsports.com los periodistas (y los directivos) exigían que se agregaran nuevas características y que aplicaciones enteras se crearan a una velocidad vertiginosa, a menudo con sólo días u horas de preaviso. Es así que Adrian y Simon desarrollaron por necesidad un framework de desarrollo Web que les ahorrara tiempo – era la única forma en que podían crear aplicaciones mantenibles en tan poco tiempo. En el verano de 2005, luego de haber desarrollado este framework hasta el punto en que estaba haciendo funcionar la mayoría de los sitios de World Online, el equipo de World Online, que ahora incluía a Jacob Kaplan-Moss, decidió liberar el framework como software de código abierto. Lo liberaron en julio de 2005 y lo llamaron Django, por el guitarrista de jazz “Django Reinhardt”. Hoy en día, Django es un proyecto estable y maduro, de código abierto con cientos de miles de colaboradores y usuarios de todo el mundo. Dos de los desarrolladores originales de Worl Online (“Los benevolentes dictadores vitalicios” Adrian y Jacob) siguen aportando una guía centralizada para el crecimiento del framework, por lo que es más un equipo de colaboración comunitario. Esta historia es relevante porque ayuda a explicar dos cuestiones clave. La primera es el “punto dulce” de Django. Debido a que Django nació en un entorno de noticias, ofrece varias características (en particular la interfaz administrativa, que son particularmente apropiadas para sitios de “contenido” – sitios como eBay, craigslist.org y washingtonpost.com que ofrecen información basada en bases de datos. (De todas formas, no dejes que eso te quite las ganas, a pesar de que Django es particularmente bueno para desarrollar esa clase de sitios, eso no significa que no sea una herramienta efectiva para crear cualquier tipo de sitio Web dinámico. Existe una gran diferencia entre ser particularmente efectivo para algo y no ser particularmente efectivo para otras cosas). 36 La segunda cuestión a resaltar es cómo los orígenes de Django le han dado forma a la cultura de su comunidad de código abierto. Debido a que Django fue extraído de código de la vida real, en lugar de ser un ejercicio académico o un producto comercial, está especialmente enfocado en resolver problemas de desarrollo Web con los que los desarrolladores de Django se han encontrado – y con los que continúan encontrándose. Como resultado de eso, Django es continuamente mejorado. Los desarrolladores del framework tienen un alto grado de interés en asegurarse de que Django les ahorre tiempo a los desarrolladores, produzca aplicaciones que sean fáciles de mantener y rindan bajo mucha carga. Aunque existen otras razones, los desarrolladores están motivados por sus propios deseos egoístas de ahorrarse tiempo a ellos mismos y disfrutar de sus trabajos. (García, 2015, págs. 6 - 7) b) Qué es un Framework Web Django es un miembro importante de una nueva generación de frameworks Web. ¿Pero qué significa este término exactamente? Para contestar esa pregunta, consideremos el diseño de una aplicación Web escrita en Python, sin usar un framework. Una de las formas más simples y directas para construir una aplicación Web desde cero en python, es usando el estándar Common Gateway Interface (CGI), una técnica muy popular para escribir aplicaciones Web alrededor del año 1998. Esta es una explicación de alto nivel sobre cómo trabaja. Solo crea un script Python, que produzca HTML, guarda el script en el servidor Web con la extensión .cgi y visita la página con un navegador Web. Eso ¡Eso todo! (García, 2015, pág. 3) 2.3.5.3. Java Java es un lenguaje de programación de alto nivel con el que se pueden escribir tanto programas convencionales como por Internet. Una de las ventajas significativas de Java sobre otros lenguajes de programación es que es independiente de la plataforma, tanto en código fuente como en binario. Esto quiere decir que el código producido por el compilador Java puede transportarse a cualquier plataforma (Intel, Sparc, Motorola, etc.) que tenga instalada una máquina virtual Java y ejecutarse. 37 Pensando en Internet esta característica es crucial ya que esta red conecta ordenadores muy distintos. En cambio, C++, por ejemplo, es independiente de la plataforma sólo en código fuente, lo cual significa que cada plataforma diferente debe proporcionar el compilador adecuado para obtener el código máquina que tiene que ejecutarse. Según lo expuesto, Java incluye dos elementos: un compilador y un intérprete. El compilador produce un código de bytes que se almacena en un fichero para ser ejecutado por el intérprete Java denominado máquina virtual de Java. (Ceballos, 2011, pág. 7) Programa escrito en Java Compilador Código de bytes Máquina virtual de Java Figura 4 Proceso de sus dos elementos Elaborado por: El autor Los códigos de bytes de Java son un conjunto de instrucciones correspondientes a un lenguaje máquina virtual de Java. ¿Dónde se consigue esta máquina virtual? Hoy en día casi todas las compañías de sistemas operativos y de navegadores han implementado máquinas virtuales según las especificaciones publicadas por Sun Microsystems, propietario de Java, para que sean compatibles con el lenguaje Java. Para las aplicaciones de Internet (por ejemplo, los applets) la máquina virtual está incluida en el navegador y para las aplicaciones Java convencionales, puede venir con el sistema operativo, con el paquete Java, o bien puede obtenerla a través de Internet. (Ceballos, 2011, pág. 7) a) Importancia de utilizar Java Una de las ventajas más significativas de Java es su independencia de la plataforma. En el caso de que tenga que desarrollar aplicaciones que tenga que ejecutarse en sistemas diferentes, esta característica es fundamental. Otra característica importante de Java es que es un lenguaje de programación orientado a objetos (POO). Los conceptos en los que se apoya esta técnica de programación. Además de ser transportable y orientado a objetos, Java es un lenguaje fácil de aprender. Tiene un tamaño pequeño que favorece al desarrollo y reduce las 38 posibilidades de cometer errores; a la vez es potente y flexible. (Ceballos, 2011, pág. 9) 2.4. Análisis crítico Desde el punto de vista teórico se ha logrado identificar la problemática que tienen los clientes de la empresa INPRISE al no contar con una aplicación que pueda emitir comprobantes electrónicos y así dar cumplimiento a lo manifestado por el organismo regulador SRI, para lo anteriormente expuesto la empresa INPRISE ha visto la necesidad de implementar una aplicación web para la emisión de comprobantes electrónicos en sus clientes y a la vez cumplir con el requerimiento emitido por la administración tributaria. 2.5. Conclusiones parciales del capítulo El uso de software libre en ambientes empresariales es de gran utilidad hoy en día, por cuanto ahorra recursos y presupuesto para las empresas que lo utilizan. Mediante la investigación bibliográfica se fundamentó teóricamente los temas planteados, los mismos que se reflejarán en el desarrollo de la aplicación web. La ejecución de esta parte es primordial, ya que se realiza un análisis crítico sobre el objeto de investigación y campo de acción de los clientes de la empresa INPRISE. 39 CAPÍTULO III 3. MARCO PROPOSITIVO 3.1. Título “APLICACIÓN WEB PARA LA EMISIÓN DE COMPROBANTES ELECTRÓNICOS DE LOS CLIENTES DE LA EMPRESA INPRISE DE LA CIUDAD DE IBARRA” 3.2. Objetivo Desarrollar una aplicación web para la emisión de comprobantes electrónicos de los clientes de la empresa INPRISE de la ciudad de Ibarra. 3.3. Desarrollo de la Propuesta La utilización de servicios de redes de información e internet se han convertido hoy en día en un medio para el desarrollo del comercio, por lo que es conveniente impulsar el acceso de los sujetos pasivos a los servicios electrónicos y telemáticos de transmisión de información, es por ello que la administración tributaria SRI resolvió mediante una resolución la implementación de la emisión de comprobantes electrónicos en los sujetos pasivos. Con base a lo expuesto anteriormente la empresa INPRISE ha considerado el desarrollo de una aplicación web para la emisión de comprobantes electrónicos de sus clientes, buscando siempre calidad en el servicio hacia sus usuarios. Además permitirá a las empresas clientes de INPRISE ahorrar recursos, disminuyendo el uso del papel y aportando con el cuidado del medio ambiente; al mismo tiempo los usuarios de las empresas podrán beneficiarse al recibir sus comprobantes electrónicamente en sus cuentas de correo electrónico y a su vez poniendo a disposición en la aplicación web, ya que los comprobantes electrónicos tienen la misma validez que los comprobantes físicos, proporcionando mayor seguridad de la información y reduciendo drásticamente la posibilidad de falsificación de documentos. La aplicación web para los clientes de INPRISE, está diseñada en herramientas de código abierto o libre, manejando entornos dinámicos y amigables para los usuarios, en donde la 40 manipulación de información no presenta grados de complejidad, al momento de manipular las opciones para la emisión de comprobantes electrónicos. 3.4. Modelo de Cascada ANÁLISIS: Análisis de la problemática, requisitos técnicos de funcionabilidad de hardware y software DISEÑO: Diseño y especificación de módulos para la aplicación web. IMPLEMENTACIÓN: Desarrollo de la Aplicación Web a implementar. PRUEBAS: Realización de evaluaciones de los módulos implementados mediante la manipulación de información. MANTENIMIENTO: Corrección de errores, respaldos de información y sugerencias Figura 5 Ciclo de Vida del Software - Modelo Cascada Elaborado por: EL autor 3.4.1. Análisis 3.4.1.1. Problemática Actual Una vez recopilada la información se identificaron los siguientes problemas dentro de las empresas clientes de INPRISE. 41 Los clientes de la empresa INPRISE no cuentan en sus aplicaciones con un módulo de emisión de comprobantes electrónicos hacia sus clientes. Las empresas tienen dificultades con sus clientes al momento de entregar los comprobantes electrónicos ocasionando pérdidas económicas, de tiempo y recursos. Se tiene la dificultad de integrar en una sola aplicación los procesos de las empresas y sus negocios, lo que implicaría inversión alta en nuevos sistemas y aplicaciones para sus dueños. Las empresas se ven en la obligación de cumplir los requerimientos por parte de la Administración Tributaria del Ecuador, en los plazos establecidos sobre la emisión de comprobantes electrónicos a sus clientes. 3.4.1.2. Descripción de los cambios deseados Con la ejecución de ésta aplicación web, se podrá mejorar los siguientes procesos. Las necesidades a solucionar son los siguientes: Manejo rápido y ágil de la información referente a los comprobantes electrónicos tales como: factura, comprobantes de retención, notas de crédito, notas de débito y guías de remisión. Visualizar en tiempo real los comprobantes electrónicos, tanto en la aplicación como en el correo electrónico de cada usuario de la empresa. Acceder a los reportes de los comprobantes electrónicos ya sea al RIDE o XML de cada usuario de la empresa. Utilizar de una mejor manera los recursos materiales, reduciendo el uso del papel y contribuyendo al medio ambiente. Facilitar la organización y disponibilidad de la emisión de los comprobantes electrónicos. La aplicación ofrece un módulo de facturación si la empresa no cuenta, para poder emitir los comprobantes electrónicos. 42 Además la aplicación contará con la subida de archivos CSV si la empresa así lo requiere. Fácil uso de la aplicación mediante entornos amigables para el usuario. 3.4.1.3. Beneficiarios del proyecto Esta aplicación web tiene como finalidad mejorar los procesos en la emisión de los comprobantes electrónicos de las empresas clientes de INPRISE, además se logrará cumplir con los requisitos reglamentarios y legales emitidos por la Administración Tributaria. La combinación de varias herramientas tecnológicas tanto software como hardware, garantizan la eficiencia y eficacia de esta aplicación web, ya que los beneficiarios indirectos tienen como único limitante la falta de una cuenta de correo electrónico. A continuación se enuncia a los beneficiarios directos e indirectos en la implementación de la aplicación web: “APLICACIÓN WEB PARA LA EMISIÓN DE COMPROBANTES ELECTRÓNICOS DE LOS CLIENTES DE LA EMPRESA INPRISE DE LA CIUDAD DE IBARRA” BENEFICIARIOS DIRECTOS DEPENDENCIA Empresa INPRISE REPRESENTANTES ASPECTOS PRINCIPALES Luis Antonio Burbano - Disponibilidad Gerente de las necesidades que tienen los clientes. Empresas clientes de Gerentes de la Empresas INPRISE Disponibilidad de la información que realiza la empresa, en cuanto proceso de facturación. 43 al BENEFICIARIOS INDIRECTOS Aquí se consideran a todos los usuarios de las empresas. Servicio eficiente y oportuno en la emisión de los comprobantes electrónicos Tabla 3 Beneficiarios de la aplicación web Elaborado por: El autor 3.4.1.4. Requisitos de hardware Los requisitos que se debe tomar en cuenta para el desarrollo de la aplicación web en hardware son los siguientes: EQUIPO DE DESARROLLO Detalle Descripción Costos Procesador Intel Core I7 400 Disco Duro 500GB 80 Memoria 4GB 70 Total: 550 Tabla 4 Características y costos de hardware utilizado Elaborado por: El autor Nota: Para el desarrollo de éste proyecto cabe recalcar que todo lo referente a hardware cada una de las empresas clientes de INPRISE disponen con los requerimientos antes mencionados, por lo tanto no se realizará ningún tipo de adquisición en lo que se refiere a hardware. 3.4.1.5. Requisitos de Software Para el desarrollo de la aplicación web se utilizará varias herramientas informáticas actuales, a continuación se detallan dichas herramientas: 44 PROGRAMA DETALLE COSTOS Linux Sistema Operativo Gratuito Python Lenguaje de Programación Gratuito PostgreSQL Base de Datos Gratuito Django Entorno de Desarrollo Gratuito (Framework) Firefox, Chrome Navegadores Web Gratuito Netbeans Entorno de Desarrollo Gratuito (Lenguaje de Programación Java) Tabla 5 Características sobre el Software a utilizar. Elaborado por: El autor 3.4.1.6. Requerimientos por parte de la Administración Tributaria La aplicación web se desarrolló de acuerdo a la ficha técnica y sus resoluciones emitidas por el SRI, mediante estos requerimientos se logró emitir los comprobantes electrónicos a cada uno de los usuarios de las empresas. En las principales exigencias que se encuentran en la ficha técnica son: Proceso de solicitud de certificación de emisión de documentos electrónicos. Proceso de firma electrónica y lineamientos de parametrización en los aplicativos. Servicios expuestos en el internet para la autorización en línea de comprobantes electrónicos. Formatos para la emisión de comprobantes electrónicos. (SRI, 2015) 45 3.4.2. Diseño 3.4.2.1. Arquitectura de la aplicación Figura 6 Esquema de la aplicación web para INPRISE Elaborado por: El autor 3.4.2.2. Diagrama de Contexto Figura 7 Diagrama de contexto de la Aplicación Web Elaborado por: El autor 46 Realiza Compra Ingreso datos cliente 47 Figura 8 Diagrama de nivel 0 de la Aplicación Web Elaborado por: El autor Cliente BDD Cliente – Empresas Cajero Generación de facturas, notas de crédito, notas de débito, comprobantes de retención Replicación BDD Aplicación Web INPRISE Usuarios - Empresas Recepción comprobantes electrónicos: RIDE y XML 47 XML Firmado XML Autorizado o Rechazado Web Service SRI Empresa Recepción de comprobantes electrónicos: RIDE y XML 3.4.2.3. Diagrama de Nivel 0 NIVEL 0 Datos Cliente 48 Figura 9 Diagrama de nivel 1 de la Aplicación web – Registro de Clientes Elaborado por: El autor BDD Empresa Tabla Cliente Replica la información del cliente BDD Aplicación Web INPRISE Recupera Información – Genera Reportes Reportes 48 3.4.2.4. Diagrama de Nivel 1 – Registro de Cliente Cajero Empresa Almacena, registra, procesa la información del cliente Cajero Empresa Datos Productos 49 Figura 10 Diagrama Nivel 1 de la Aplicación web - Registro de Productos Elaborado por: El autor BDD Empresa Tabla Productos Replica la información del producto BDD Aplicación Web INPRISE Recupera Información – Genera Reportes Reportes 49 3.4.2.5. Registro de Productos Almacena, registra, procesa la información de los productos Datos Factura BDD - Empresa Tabla Factura, Factura Detalle, Factura_detalle_impuesto Replica la información de la factura BDD Aplicación Web INPRISE Recupera Información – Genera Reportes Reportes Empresa RIDE - XML Cliente RIDE - XML 50 3.4.2.6. Registro de Factura 50 Figura 11 Diagrama Nivel 1 de la Aplicación Web - Registro de Facturas Elaborado por: El autor Cajero Empresa Almacena, registra, procesa la información de la factura Almacena, registra, procesa la información de la empresa BDD - INPRISE Tabla Empresa BDD Aplicación Web INPRISE Recupera Información – Genera Reportes Reportes 51 3.4.2.7. Crea una empresa 51 Figura 12 Diagrama Nivel 1 de la Aplicación Web - Creación de una empresa Elaborado por: El autor Administrador Datos Empresa DatosXML Administrador BDD Aplicación Web INPRISE Envió de archivo firmado WEB SERVICE SRI XML Autorizado o Rechazado Reportes Cliente RIDE - XML Empresa RIDE - XML 52 3.4.2.8. Envió de XML al Web Service SRI 52 Figura 13 Diagrama Nivel 1 de la Aplicación Web - Envió de XML al Web Service SRI Elaborado por: El autor Almacena, registra, procesa la información del XML 3.4.2.9. Diseño de la base de datos. Figura 14 Diseño de la base de datos Elaborado por: El autor 53 53 3.4.2.10. Diagrama conceptual de la base de datos Figura 15 Base de datos conceptual de la Aplicación Web Elaborado por: El autor 54 54 3.4.2.11. Diagrama lógico de la base de datos. Figura 16 Diagrama lógico de la base de datos de la Aplicación Web Elaborado por: El autor 55 55 3.4.2.12. Funcionabilidad de las tablas TABLA Cliente DETALLE Datos personales del Cliente Producto En esta tabla se registran los productos que ofrece la empresa Factura Se registran las facturas emitidas por la empresa Empresa En esta tabla se registran los datos sobre la empresa Tipo_Emisión Se identifica si es de emisión normal o por indisponibilidad del sistema Tipo_Ambiente Para identificar si es en ambiente producción o pruebas Tipo_Impuesto Se identifica que impuesto se realizó en la factura Tipo_Identificación Auther_User Para identificar qué tipo de documento tiene el cliente Datos del Usuario Tabla 6 Función de la Tablas de la Base de Datos Elaborado por: El autor 56 3.4.2.13. Diseño de la Pantalla Principal Para poder adherirse a la aplicación web, el cliente deberá ingresar en la barra de direcciones la siguiente dirección http://facturas.integral.ec, luego ingresará el usuario y contraseña para que pueda visualizar la información. Figura 17 Pantalla Principal de la Aplicación Web Elaborado por: El autor Mapa de Sitio Productos Clientes Inicio de Sesión Administración Categorías Nueva Factura Comprobantes Emitidos Subir CSV Administración Seleccionar Empresa Crear Empresa Figura 18 Mapa de Sitio Elaborado por: El autor 57 Reportes Empresa 3.4.2.14. Diseño de Entradas y Salidas Entradas: Son aquellos formularios en los que se ingresan o registran información, para realizar diferentes procesos. Figura 19 Pantalla Principal del Administrador Elaborado por: El autor 58 Figura 20 Formularios para registrar y poder realizar una factura nueva, agregar un producto, agregar un cliente e agregar una categoría. Elaborado por: El autor 59 Figura 21 Formulario para crear una nueva empresa. Elaborado por: El autor Figura 22 Formulario para ingresar un archivo CSV de la empresa. Elaborado por: El autor 60 Figura 23 Formulario para realizar una factura Elaborado por: El autor Salidas: Son opciones que se encuentran dentro de los formularios y permiten visualizar y obtener información que ha sido procesada mediante un reporte físico o digital. Figura 24 Formulario en el que se visualiza los comprobantes electrónicos emitidos Elaborado por: El autor 61 Figura 25 Envió del correo electrónico al cliente de la empresa Elaborado por: El autor Figura 26 Visualización del documento RIDE emitido Elaborado por: El autor 62 Figura 27 Visualización del documento XML emitido Elaborado por: El autor Figura 28 Visualización de reportes en Excel y CSV Elaborado por: El autor 63 3.4.3. Codificación 3.4.3.1. Formato XML emitido por la administración tributaria (SRI) <?xml version="1.0" encoding="UTF-8"?> <!--Sample XML file generated by XMLSPY v5 rel. 3 U (http://www.xmlspy.com)--> <factura xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Documents and Settings\mfsalazar\Escritorio\facturación electronica\formato xsd xml 07-03\factura1.xsd" id="comprobante" version="Text"> <infoTributaria> <ambiente>1</ambiente> <tipoEmision>1</tipoEmision> <razonSocial>Ax</razonSocial> <nombreComercial>Ax</nombreComercial> <ruc>0000000000001</ruc> <claveAcceso>0000000000000000000000000000000000000000000000000</claveAcceso> <codDoc>00</codDoc> <estab>000</estab> <ptoEmi>000</ptoEmi> <secuencial>000000000</secuencial> <dirMatriz>Ax</dirMatriz> </infoTributaria> <infoFactura> <fechaEmision>01/01/1000</fechaEmision> <dirEstablecimiento>Ax</dirEstablecimiento> <contribuyenteEspecial>123</contribuyenteEspecial> <obligadoContabilidad>SI</obligadoContabilidad> <tipoIdentificacionComprador>04</tipoIdentificacionComprador> <guiaRemision>000-000-000000000</guiaRemision> <razonSocialComprador>Ax</razonSocialComprador> <identificacionComprador>Ax</identificacionComprador> <totalSinImpuestos>0</totalSinImpuestos> <totalDescuento>3.14</totalDescuento> <totalConImpuestos> <totalImpuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <descuentoAdicional>0</descuentoAdicional> <baseImponible>0</baseImponible> <tarifa>0</tarifa> <valor>0</valor> </totalImpuesto> <totalImpuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <baseImponible>0</baseImponible> <tarifa>0</tarifa> <valor>0</valor> </totalImpuesto> <totalImpuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <baseImponible>0</baseImponible> <tarifa>0</tarifa> <valor>0</valor> </totalImpuesto> </totalConImpuestos> <propina>0</propina> <importeTotal>0</importeTotal> <moneda>Ax</moneda> </infoFactura> <detalles> <detalle> 64 <codigoPrincipal>Ax</codigoPrincipal> <codigoAuxiliar>Ax</codigoAuxiliar> <descripcion>Ax</descripcion> <cantidad>0</cantidad> <precioUnitario>0</precioUnitario> <descuento>0</descuento> <precioTotalSinImpuesto>0</precioTotalSinImpuesto> <detallesAdicionales> <detAdicional nombre="Ax" valor="Ax"/> <detAdicional nombre="Ax" valor="Ax"/> <detAdicional nombre="Ax" valor="Ax"/> </detallesAdicionales> <impuestos> <impuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <tarifa>0</tarifa> <baseImponible>0</baseImponible> <valor>0</valor> </impuesto> <impuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <tarifa>0</tarifa> <baseImponible>0</baseImponible> <valor>0</valor> </impuesto> <impuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <tarifa>0</tarifa> <baseImponible>0</baseImponible> <valor>0</valor> </impuesto> </impuestos> </detalle> <detalle> <codigoPrincipal>Ax</codigoPrincipal> <codigoAuxiliar>Ax</codigoAuxiliar> <descripcion>Ax</descripcion> <cantidad>0</cantidad> <precioUnitario>0</precioUnitario> <descuento>0</descuento> <precioTotalSinImpuesto>0</precioTotalSinImpuesto> <detallesAdicionales> <detAdicional nombre="Ax" valor="Ax"/> <detAdicional nombre="Ax" valor="Ax"/> <detAdicional nombre="Ax" valor="Ax"/> </detallesAdicionales> <impuestos> <impuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <tarifa>0</tarifa> <baseImponible>0</baseImponible> <valor>0</valor> </impuesto> <impuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <tarifa>0</tarifa> <baseImponible>0</baseImponible> <valor>0</valor> </impuesto> <impuesto> <codigo>0</codigo> 65 <codigoPorcentaje>0</codigoPorcentaje> <tarifa>0</tarifa> <baseImponible>0</baseImponible> <valor>0</valor> </impuesto> </impuestos> </detalle> <detalle> <codigoPrincipal>Ax</codigoPrincipal> <codigoAuxiliar>Ax</codigoAuxiliar> <descripcion>Ax</descripcion> <cantidad>0</cantidad> <precioUnitario>0</precioUnitario> <descuento>0</descuento> <precioTotalSinImpuesto>0</precioTotalSinImpuesto> <detallesAdicionales> <detAdicional nombre="Ax" valor="Ax"/> <detAdicional nombre="Ax" valor="Ax"/> <detAdicional nombre="Ax" valor="Ax"/> </detallesAdicionales> <impuestos> <impuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <tarifa>0</tarifa> <baseImponible>0</baseImponible> <valor>0</valor> </impuesto> <impuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <tarifa>0</tarifa> <baseImponible>0</baseImponible> <valor>0</valor> </impuesto> <impuesto> <codigo>0</codigo> <codigoPorcentaje>0</codigoPorcentaje> <tarifa>0</tarifa> <baseImponible>0</baseImponible> <valor>0</valor> </impuesto> </impuestos> </detalle> </detalles> <infoAdicional> <campoAdicional nombre="Ax">Ax</campoAdicional> <campoAdicional nombre="Ax">Ax</campoAdicional> <campoAdicional nombre="Ax">Ax</campoAdicional> </infoAdicional> </factura> 3.4.3.2. Función que me permite firmar un documento electrónico package ec.inprise.xades_firma; import ec.inprise.keystore.PassStoreKS; import es.mityc.firmaJava.libreria.utilidades.UtilidadTratarNodo; import es.mityc.firmaJava.libreria.xades.DataToSign; import es.mityc.firmaJava.libreria.xades.FirmaXML; import es.mityc.javasign.pkstore.CertStoreException; import es.mityc.javasign.pkstore.IPKStoreManager; import es.mityc.javasign.pkstore.keystore.KSStore; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; 66 import java.io.IOException; import java.io.StringWriter; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.Provider; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.List; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.xml.sax.SAXException; import java.io.File; import org.apache.commons.codec.binary.Base64; import java.io.*; import java.util.logging.Level; import java.util.logging.Logger; public abstract class GenericXMLSignature { //Almacén PKCS12 con el que se desea realizar la firma //public final static String PKCS12_RESOURCE = "usr0061.p12"; public static InputStream PKCS12_RESOURCE; //Constraseña de acceso a la clave privada del usuario //public final static String PKCS12_PASSWORD = "usr0061"; public static String PKCS12_PASSWORD; public GenericXMLSignature(String pkcs12, String pkcs12_password) { byte[] decoded_firma = Base64.decodeBase64(pkcs12.getBytes()); String decodedString_firma = new String(decoded_firma); InputStream arch = null; try { arch = new FileInputStream(decodedString_firma); } catch (FileNotFoundException ex) { Logger.getLogger(GenericXMLSignature.class.getName()).log(Level.SEVERE, null, ex); } byte[] decoded = Base64.decodeBase64(pkcs12_password.getBytes()); String decodedString = new String(decoded); GenericXMLSignature.PKCS12_RESOURCE = arch; //GenericXMLSignature.PKCS12_RESOURCE = pkcs12; GenericXMLSignature.PKCS12_PASSWORD = decodedString; } public GenericXMLSignature() { } /** * <p> * Directorio donde se almacenará el resultado de la firma * </p> 79 */ public final static String OUTPUT_DIRECTORY = "."; //public final static String OUTPUT_DIRECTORY = System.getProperty("user.dir"); /** * <p> * Ejecución del ejemplo. La ejecución consistirá en la firma de los datos * creados por el método abstracto <code>createDataToSign</code> mediante el * certificado declarado en la constante <code>PKCS12_FILE</code>. El * resultado del proceso de firma será almacenado en un fichero XML en el 67 * directorio correspondiente a la constante <code>OUTPUT_DIRECTORY</code> * del usuario bajo el nombre devuelto por el método abstracto * <code>getSignFileName</code> * </p> */ protected void execute() { // Obtencion del gestor de claves IPKStoreManager storeManager = getPKStoreManager(); if (storeManager == null) { System.err.println("El gestor de claves no se ha obtenido correctamente."); return; } // Obtencion del certificado para firmar. Utilizaremos el primer // certificado del almacen. X509Certificate certificate = getFirstCertificate(storeManager); if (certificate == null) { System.err.println("No existe ningún certificado para firmar."); return; } // Obtención de la clave privada asociada al certificado PrivateKey privateKey; try { privateKey = storeManager.getPrivateKey(certificate); } catch (CertStoreException e) { System.err.println("Error al acceder al almacén."); return; } // Obtención del provider encargado de las labores criptográficas Provider provider = storeManager.getProvider(certificate); /* * Creación del objeto que contiene tanto los datos a firmar como la * configuración del tipo de firma */ DataToSign dataToSign = createDataToSign(); /* * Creación del objeto encargado de realizar la firma */ FirmaXML firma = new FirmaXML(); // Firmamos el documento Document docSigned = null; try { Object[] res = firma.signFile(certificate, dataToSign, privateKey, provider); docSigned = (Document) res[0]; } catch (Exception ex) { System.err.println("Error realizando la firma"); ex.printStackTrace(); return; } // Guardamos la firma a un fichero en el home del usuario String workingDir = System.getProperty("user.dir"); //System.out.println(workingDir); String filePath = workingDir + File.separatorChar + getSignatureFileName(); System.out.println("Firma salvada en: " + filePath); saveDocumentToFile(docSigned, getSignatureFileName()); } /** * <p> * Crea el objeto DataToSign que contiene toda la información de la firma * que se desea realizar. Todas las implementaciones deberán proporcionar * una implementación de este método * </p> * * @return El objeto DataToSign que contiene toda la información de la firma * a realizar */ protected abstract DataToSign createDataToSign(); 68 /** * <p> * Nombre del fichero donde se desea guardar la firma generada. Todas las * implementaciones deberán proporcionar este nombre. * </p> * * @return El nombre donde se desea guardar la firma generada */ protected abstract String getSignatureFileName(); /** * <p> * Escribe el documento a un fichero. * </p> * * @param document El documento a imprmir * @param pathfile El path del fichero donde se quiere escribir. */ private void saveDocumentToFile(Document document, String pathfile) { try { FileOutputStream fos = new FileOutputStream(pathfile); UtilidadTratarNodo.saveDocumentToOutputStream(document, fos, true); } catch (FileNotFoundException e) { System.err.println("Error al salvar el documento"); e.printStackTrace(); System.exit(-1); } } /** * <p> * Escribe el documento a un fichero. Esta implementacion es insegura ya que * dependiendo del gestor de transformadas el contenido podría ser alterado, * con lo que el XML escrito no sería correcto desde el punto de vista de * validez de la firma. * </p> * * @param document El documento a imprmir * @param pathfile El path del fichero donde se quiere escribir. */ @SuppressWarnings("unused") private void saveDocumentToFileUnsafeMode(Document document, String pathfile) { TransformerFactory tfactory = TransformerFactory.newInstance(); Transformer serializer; try { serializer = tfactory.newTransformer(); serializer.transform(new DOMSource(document), new StreamResult(new File(pathfile))); } catch (TransformerException e) { System.err.println("Error al salvar el documento"); e.printStackTrace(); System.exit(-1); } } /** * <p> * Devuelve el <code>Document</code> correspondiente al * <code>resource</code> pasado como parámetro * </p> * * @param resource El recurso que se desea obtener * @return El <code>Document</code> asociado al <code>resource</code> */ protected Document getDocument(String resource) { Document doc = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); 69 File file = new File(resource); try { //doc = dbf.newDocumentBuilder().parse(this.getClass().getResourceAsStream(resource)); doc = dbf.newDocumentBuilder().parse(file); } catch (ParserConfigurationException ex) { System.err.println("Error al parsear el documento"); ex.printStackTrace(); System.exit(-1); } catch (SAXException ex) { System.err.println("Error al parsear el documento"); ex.printStackTrace(); System.exit(-1); } catch (IOException ex) { System.err.println("Error al parsear el documento"); ex.printStackTrace(); System.exit(-1); } catch (IllegalArgumentException ex) { System.err.println("Error al parsear el documento"); ex.printStackTrace(); System.exit(-1); } return doc; } /** * <p> * Devuelve el contenido del documento XML correspondiente al * <code>resource</code> pasado como parámetro * </p> como un <code>String</code> * * @param resource El recurso que se desea obtener * @return El contenido del documento XML como un <code>String</code> */ protected String getDocumentAsString(String resource) { Document doc = getDocument(resource); TransformerFactory tfactory = TransformerFactory.newInstance(); Transformer serializer; StringWriter stringWriter = new StringWriter(); try { serializer = tfactory.newTransformer(); serializer.transform(new DOMSource(doc), new StreamResult(stringWriter)); } catch (TransformerException e) { System.err.println("Error al imprimir el documento"); e.printStackTrace(); System.exit(-1); } return stringWriter.toString(); } /** * <p> * Devuelve el gestor de claves que se va a utilizar * </p> * * @return El gestor de claves que se va a utilizar</p> */ private IPKStoreManager getPKStoreManager() { IPKStoreManager storeManager = null; try { KeyStore ks = KeyStore.getInstance("PKCS12"); //ks.load(this.getClass().getResourceAsStream(PKCS12_RESOURCE), PKCS12_PASSWORD.toCharArray()); ks.load(PKCS12_RESOURCE, PKCS12_PASSWORD.toCharArray()); storeManager = new KSStore(ks, new PassStoreKS(PKCS12_PASSWORD)); } catch (KeyStoreException ex) { System.err.println("No se puede generar KeyStore PKCS12"); ex.printStackTrace(); System.exit(-1); } catch (NoSuchAlgorithmException ex) { 70 System.err.println("No se puede generar KeyStore PKCS12"); ex.printStackTrace(); System.exit(-1); } catch (CertificateException ex) { System.err.println("No se puede generar KeyStore PKCS12"); ex.printStackTrace(); System.exit(-1); } catch (IOException ex) { System.err.println("No se puede generar KeyStore PKCS12"); ex.printStackTrace(); System.exit(-1); } return storeManager; } /** * <p> * Recupera el primero de los certificados del almacén. * </p> * * @param storeManager Interfaz de acceso al almacén * @return Primer certificado disponible en el almacén */ private X509Certificate getFirstCertificate( final IPKStoreManager storeManager) { List<X509Certificate> certs = null; try { certs = storeManager.getSignCertificates(); } catch (CertStoreException ex) { System.err.println("Fallo obteniendo listado de certificados"); System.exit(-1); } if ((certs == null) || (certs.size() == 0)) { System.err.println("Lista de certificados vacía"); System.exit(-1); } X509Certificate certificate = certs.get(0); return certificate; } } 3.4.3.3. Función que me permite enviar documentos electrónicos al Web Service SRI para su validación y envió de e-mail a los clientes de las empresas def web_services_sri(xml, clave_acceso, id_documento, id_tipo_ambiente, token, password, logo, key, tipo_doc, codigo_numerico, comprobante, nombre_comercial, datos_empresa): """ Ejecuta el proceso de envío, validación y autorización de comprobantes tributarios parm: xml, clave_acceso, id_documento, id_tipo_ambiente, token, password, logo, key, tipo_doc, codigo_numerico, :param comprobante :param nombre_comercial Se usa para el email """ if tipo_doc == 1: tabla_comprobante = 'factura' elif tipo_doc == 7: tabla_comprobante = 'retencion' elif tipo_doc == 4: tabla_comprobante = 'nota_credito' in_xml = 'xml/' + xml u.firmar_xml(in_xml, xml, token, password) if not os.path.isfile('xml_signed/' + xml): print 'No se encuentra el xml firmado!' return 1 71 factura_file = open('xml_signed/' + xml, "r") factura_xml = factura_file.read() factura_file.close() factura_firmada_xml = libxml2.parseDoc(factura_xml) archivo_xml = base64.encodestring(factura_firmada_xml.serialize()) if id_tipo_ambiente == 1: print 'Ambiente de PRUEBAS' url = ("https://celcer.sri.gob.ec/comprobantes-electronicos-ws/" "RecepcionComprobantes?wsdl") url2 = ("https://celcer.sri.gob.ec/comprobantes-" "electronicos-ws/AutorizacionComprobantes?wsdl") elif id_tipo_ambiente == 2: print 'Ambiente de PRODUCCION' url = ("https://cel.sri.gob.ec/comprobantes-electronicos-ws/" "RecepcionComprobantes?wsdl") url2 = ("https://cel.sri.gob.ec/comprobantes-" "electronicos-ws/AutorizacionComprobantes?wsdl") enviar_nuevamente = False ciclo_clave_registrada = False while True: # Ciclo general while True: # Ciclo de envio de comprobante try: print 'Enviando comprobante...' client = suds.client.Client(url) respuesta_envio_comprobante = client.service.validarComprobante(archivo_xml) break except Exception, e: print e print 'WebService Recepcion Comprobante NO disponible!!!' if respuesta_envio_comprobante: estado_comprobante = respuesta_envio_comprobante[0] enviar_nuevamente = False while True: # ciclo de CLAVE ACCESO REGISTRADA if estado_comprobante == 'RECIBIDA': ciclo_clave_registrada = True print 'Se ha recibido el comprobante!' reintento_respuesta = 0 while True: # Ciclo de respuesta while True: # Ciclo de autorizacion de comprobante try: client = suds.client.Client(url2) respuesta_autorizacion = client.service.autorizacionComprobante(clave_acceso) break except Exception, e: print e print 'WebService de Consulta Autorizacion NO disponible' print 'Reintentando...' if respuesta_autorizacion: print 'Numero de envios al SRI: %d' % (int(respuesta_autorizacion[1]),) numero_intentos_autorizacion = int(respuesta_autorizacion[1]) print 'Clave: ', respuesta_autorizacion[0] i=0 if respuesta_autorizacion[1] == 0: print 'Esperando Respuesta....' time.sleep(3) continue try: j = respuesta_autorizacion.autorizaciones[0] except Exception, e: reintento_respuesta += 1 print 'Respuesta vacia Reintento %s...' % (reintento_respuesta,) time.sleep(3) if reintento_respuesta == 6: enviar_nuevamente = True break # Rompe el ciclo de respuesta continue # Vuelve ciclo de respuesta 72 for autorizacion in respuesta_autorizacion.autorizaciones[0]: i += 1 if autorizacion.estado == 'NO AUTORIZADO': u.create_dir('no_aut') archivos = open('no_aut/' + xml, 'a') archivos.write(str(respuesta_autorizacion)) archivos.close() print '\nIntento:', i print 'ERROR AL AUTORIZAR COMPROBANTE!!!' print '\nEstado: ', autorizacion.estado estado = autorizacion.estado print 'Fecha de autorizacion: ', autorizacion.fechaAutorizacion fecha_autorizacion = autorizacion.fechaAutorizacion #print 'Tipo ambiente: ', autorizacion.ambiente desc_error = [] codigo_error = [] info_adicional = [] ind = 0 try: for mensaje in autorizacion.mensajes[0]: print 'Nro Identificador:', mensaje.identificador print 'Mensaje: ', mensaje.mensaje print 'Tipo de mensaje: ', mensaje.tipo if mensaje.tipo == 'ERROR': codigo_error.append(mensaje.identificador) desc_error.append(mensaje.mensaje) try: print 'Información adicional: ', mensaje.informacionAdicional info_adicional.append(mensaje.informacionAdicional) except Exception, e: info_adicional.append('') ind += 1 except Exception: pass # CLAVE ACCESO REGISTRADA if int(codigo_error[0]) == 43: sql = '''SELECT count(*) FROM %s WHERE clave_acceso = '%s' AND NOT dado_baja ''' % (tabla_comprobante, clave_acceso) resp = u.data_read(sql) numero_comprobante = resp[0] n_comprobantes = int(numero_comprobante['count']) if n_comprobantes <= 1: for aut in respuesta_autorizacion.autorizaciones[0]: if aut.estado == 'AUTORIZADO': fecha_autorizacion = aut.fechaAutorizacion num_autorizacion = aut.numeroAutorizacion u.create_dir('aut') archivos = codecs.open('aut/' + clave_acceso + 'sri.xml', 'w', encoding='utf-8') archivos.write(aut.comprobante) archivos.close() u.create_dir('ride') if tipo_doc == FACTURA or tipo_doc == NOTA_CREDITO: pdf_generator.generarPdf('aut/' + clave_acceso + 'sri.xml', 'ride/' + clave_acceso + '.pdf', num_autorizacion, fecha_autorizacion, key, logo, key, datos_empresa, comprobante) elif tipo_doc == RETENCION: pdf_generator_retencion.generar_pdf('aut/' + clave_acceso + 'sri.xml', 'ride/' + clave_acceso + '.pdf', num_autorizacion, fecha_autorizacion, 73 key, logo, key) ruta_ride = os.getcwd() + '/ride/' + clave_acceso + '.pdf' sql = ''' UPDATE %s SET clave_acceso = '%s', estado_autorizacion = '%s', fecha_hora_autorizacion ='%s', numero_autorizacion='%s', numero_intentos_autorizacion='%s', ruta_ride='%s' WHERE id = %s; ''' % (tabla_comprobante, clave_acceso, aut.estado, fecha_autorizacion.strftime('%Y-%m-%d %H:%M:%S'), num_autorizacion, numero_intentos_autorizacion, ruta_ride, id_documento) u.updateSql(sql) print 'DOCUMENTO AUTORIZADO ANTERIORMENTE OK...' print 'ID: ', id_documento, ' actualizado.\n' print 'KEY FIREBIRD: ', key, '\n\n' elif n_comprobantes > 1: print 'Documento DUPLICADO %s veces ' % (n_comprobantes,) sql = ''' UPDATE %s SET clave_acceso='%s', estado_autorizacion='%s', codigo_error=%d, nombre_error='%s', fecha_hora_autorizacion='%s', descripcion_error='%s', numero_intentos_autorizacion= %s WHERE id = %s; ''' % (tabla_comprobante, clave_acceso, estado, int(codigo_error[0]), desc_error[0], fecha_autorizacion.strftime('%Y-%m-%d %H:%M:%S'), 'DUPLICADO', numero_intentos_autorizacion, id_documento) u.updateSql(sql) print 'ID: ', id_documento, ' actualizada.\n' print 'KEY FIREBIRD: ', key, '\n\n' else: sql = ''' UPDATE %s SET clave_acceso='%s', estado_autorizacion='%s', codigo_error=%d, nombre_error='%s', fecha_hora_autorizacion='%s', descripcion_error='%s', numero_intentos_autorizacion= %s WHERE id = %s; ''' % (tabla_comprobante, clave_acceso, estado, int(codigo_error[ind-1]), desc_error[ind-1], fecha_autorizacion.strftime('%Y-%m-%d %H:%M:%S'), info_adicional[ind-1], numero_intentos_autorizacion, id_documento) u.updateSql(sql) print 'ID: ', id_documento, ' actualizado.\n' print 'KEY FIREBIRD: ', key, '\n\n' if autorizacion.estado == 'AUTORIZADO': print 'ÉXITO!!!' 74 print ('El SRI retorno una AUTORIZACION válida para el comprobante:'), clave_acceso print '\nEstado: ', autorizacion.estado estado = autorizacion.estado print 'Fecha de autorizacion: ', autorizacion.fechaAutorizacion fecha_autorizacion = autorizacion.fechaAutorizacion print 'Numero de Autorizacion: ', autorizacion.numeroAutorizacion num_autorizacion = autorizacion.numeroAutorizacion #print 'Tipo ambiente: ', unicode(autorizacion.ambiente) try: for mensaje in autorizacion.mensajes[0]: print 'Nro Identificador:', mensaje.identificador print 'Tipo de mensaje: ', mensaje.tipo print 'Mensaje: ', mensaje.mensaje try: print 'Información adicional: ', mensaje.informacionAdicional except Exception: pass except Exception: pass u.create_dir('aut') archivos = codecs.open('aut/' + clave_acceso + 'sri.xml', 'w', encoding='utf-8') archivos.write(autorizacion.comprobante) archivos.close() u.create_dir('felect') archivos = open('felect/' + clave_acceso + '.xml', 'w') resp_xml = client.last_received().getChild("soap:Envelope").getChild( "soap:Body").getChild("ns2:autorizacionComprobanteResponse").getChild( "RespuestaAutorizacionComprobante") archivos.write(str(resp_xml)) archivos.close() ruta = os.getcwd() rutaxml = ruta + '/felect/' + clave_acceso + '.xml' u.create_dir('ride') if tipo_doc == FACTURA or tipo_doc == NOTA_CREDITO: pdf_generator.generarPdf('aut/' + clave_acceso + 'sri.xml', 'ride/' + clave_acceso + '.pdf', num_autorizacion, fecha_autorizacion, key, logo, key, datos_empresa, comprobante) elif tipo_doc == RETENCION: pdf_generator_retencion.generar_pdf('aut/' + clave_acceso + 'sri.xml', 'ride/' + clave_acceso + '.pdf', num_autorizacion, fecha_autorizacion, key, logo, key) ruta_ride = os.getcwd() + '/ride/' + clave_acceso + '.pdf' sql = ''' UPDATE %s SET clave_acceso = '%s', estado_autorizacion = '%s', fecha_hora_autorizacion ='%s', numero_autorizacion='%s', numero_intentos_autorizacion='%s', ruta_xml='%s', ruta_ride='%s' WHERE id = %s; ''' % (tabla_comprobante, clave_acceso, estado, fecha_autorizacion.strftime('%Y-%m-%d %H:%M:%S'), num_autorizacion, numero_intentos_autorizacion, rutaxml, ruta_ride, id_documento) u.updateSql(sql) print '\nID DOCUMENTO ACTUALIZADO: %s' % (id_documento,) print 'KEY FIREBIRD:', key email = str(comprobante['email']) # email = 'lb@inprise.ec' email_regex = re.compile(r"[^@]+@[^@]+\.[^@]+") 75 if email_regex.match(email): numero_doc = '%s %s %s' % (comprobante['establecimiento'], comprobante['punto_venta'], comprobante['numero_documento']) if tipo_doc == FACTURA: tipo_documento = 'FACTURA' cliente = comprobante['razonsocialcomprador'] elif tipo_doc == RETENCION: tipo_documento = 'RETENCION' cliente = comprobante['razonsocialsujetoretenido'] elif tipo_doc == NOTA_CREDITO: tipo_documento = 'NOTA CREDITO' cliente = comprobante['razonsocialcomprador'] subproceso = Thread(target=u.enviar_correo, args=(email, cliente, numero_doc, clave_acceso, num_autorizacion, tipo_documento, nombre_comercial, [ruta_ride, rutaxml])) subproceso.start() else: print 'Correo %s inválido' % (email, ) if respuesta_autorizacion[1] > 1: break break # Rompe ciclo de respuesta if ciclo_clave_registrada: break # Rompe ciclo de clave acceso registrada else: print 'El Documento NO FUE RECIBIDO...' estado = respuesta_envio_comprobante[0] ciclo_clave_registrada = True for res_comprobante in respuesta_envio_comprobante.comprobantes[0]: print 'ERROR EN RECEPCIÓN DEL COMPROBANTE!!!!' print 'Comprobante: ', res_comprobante.claveAcceso print '*** DETALLES DEL ERROR ***' for mensajes in res_comprobante.mensajes: for mensaje in mensajes[1]: print 'Mensaje: ', mensaje.mensaje msj = mensaje.mensaje codigo_error = int(mensaje.identificador) print 'Identificador: ', mensaje.identificador print 'Tipo: ', mensaje.tipo try: print 'Información Adicional: ', mensaje.informacionAdicional info_adicional = mensaje.informacionAdicional except Exception: info_adicional = ""+"\n" if codigo_error == 43: ciclo_clave_registrada = True print '\n************************************' print '* CLAVE ACCESO REGISTRADA *' print '* Verificando en la base duplicado *' print '************************************' sql = '''SELECT count(*) FROM %s WHERE clave_acceso = '%s' AND NOT dado_baja ''' % (tabla_comprobante, clave_acceso) resp = u.data_read(sql) numero_comprobante = resp[0] n_comprobantes = int(numero_comprobante['count']) if n_comprobantes <= 1: print '...No existe Duplicado' estado_comprobante = 'RECIBIDA' continue print '...Documento Duplicado...' # si el numero de autorizaciones mas 3 incremento el codigo numerico if codigo_error == 70 and int(comprobante['numero_intentos_autorizacion']) > 2: cod_numerico = int(codigo_numerico) + 1 76 sql = ''' UPDATE %s SET codigo_numerico = %d WHERE id = %s ''' % (tabla_comprobante, cod_numerico, id_documento) u.updateSql(sql) sql = ''' UPDATE %s SET clave_acceso = '%s', estado_autorizacion = '%s', nombre_error = '%s', descripcion_error = '%s', codigo_error = %d WHERE id = %s ''' % (tabla_comprobante, res_comprobante.claveAcceso, estado, msj, info_adicional.replace("'", ''), codigo_error, id_documento) u.updateSql(sql) print 'ID DOCUMENTO ACTUALIZADO:', id_documento print 'KEY FIREBIRD:', key if ciclo_clave_registrada: break # termino ciclo de clave registrada # fin ciclo clave acceso registrada else: print 'Error en la recepcion del documento' if not enviar_nuevamente: break # Rompe el ciclo general 3.4.3.4. Función que me permite mostrar los comprobantes emitidos en la aplicación web def filtro_comprobantes(frm): filtros_qs = [] fecha_desde = frm.cleaned_data.get('fecha_inicio') fecha_hasta = frm.cleaned_data.get('fecha_fin') tipo_comprobante = frm.cleaned_data.get('tipo') fuente = frm.cleaned_data.get('fuente') estado_autorizacion = frm.cleaned_data.get('estado_autorizacion') numero = frm.cleaned_data.get('numero') cliente = frm.cleaned_data.get('cliente').strip() emisor = frm.cleaned_data.get('emisor').strip() if fecha_desde is not None and fecha_hasta is not None: if fecha_desde == fecha_hasta: # agregar 23:59:59 a la fecha cuando son iguales fecha_hasta = datetime.datetime.combine( fecha_hasta, datetime.datetime.min.time() ) fecha_hasta = datetime.datetime.combine( fecha_hasta, datetime.datetime.max.time() ) filtros_qs.append(Q(fecha_hora__gte=fecha_desde, fecha_hora__lte=fecha_hasta)) if tipo_comprobante != '': filtros_qs.append(Q(tipo_documento=tipo_comprobante)) if fuente != '' and fuente is not None: 77 filtros_qs.append(Q(app_name=fuente)) if estado_autorizacion != '' and estado_autorizacion is not None \ and estado_autorizacion != 'SIN ENVIAR': filtros_qs.append(Q(estado_autorizacion=estado_autorizacion)) if estado_autorizacion.strip() == 'SIN ENVIAR': filtros_qs.append(Q(estado_autorizacion__isnull=True)) if numero is not None and numero != '': filtros_qs.append(Q(numero=numero)) if cliente is not None and cliente != '': filtros_qs.append(Q(cliente__nombre__contains=cliente.encode("utf-8"),)) if emisor is not None and emisor != '': filtros_qs.append( Q(id_empresa__razon_social__contains=emisor.encode("utf-8"),) ) return filtros_qs 3.4.3.5. Función que me permite exportar archivos en formato CSV def export_comprobantes_csv(request): response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = \ 'attachment; filename="Integral-comprobantes.csv"' writer = csv.writer(response, delimiter=';') writer.writerow(['Fecha', 'Emisor', 'Cliente', 'Direccion', 'Numero', 'Nro. Autorizacion', 'Clave Acceso', 'Tipo Comprobante', 'Fuente', 'Estado', 'Importe']) comprobante_qs = Comprobante.objects.none() comprobante_qs.query = pickle.loads(request.session['comprobante_qs']) for item in comprobante_qs: writer.writerow( [ item.fecha_hora.strftime('%Y-%m-%d'), item.razon_social_emisor.encode( "utf-8") if item.razon_social_emisor is not None else '', item.cliente.nombre.encode("utf-8"), item.cliente.direccion.encode( "utf-8") if item.cliente.direccion is not None else '', item.numero, item.numero_autorizacion, item.clave_acceso, item.tipo_documento, 'BUZON' if item.app_name == 'BUZON' else 'PORTAL', 'SIN AUTORIZACION' if item.estado_autorizacion is None else item.estado_autorizacion, item.valor_total ] ) return response 78 3.4.4. Implementación (esquema de la Aplicación web) Mediante el diseño de la aplicación web se podrá observar los servicios que brinda la empresa INPRISE en la emisión de comprobantes electrónicos, en donde los usuarios puedan visualizar los RIDES y XML en sus cuentas de correo electrónico y en la aplicación. Inicio Administración Usuarios Inicio de Sesión Administración Cajero Gerente Empresa Gerente INPRISE Ingresos Ingreso de Clientes Ingreso de Productos Ingreso de Categoría Ingreso de Empresa Procesos Ingreso Consultas Modificación Factura Estructura del archivo XML Reportes Emisión de Comprobantes (RIDE y XML Documentos Excel Documentos CSV Usuario Administración Tipo Usuario Figura 29 Diseño entrada de la Aplicación Web Elaborado por: El autor 3.4.4.1. Trabajando con la aplicación En el navegador de la estación de trabajo deberá digitalizar http://facturas.integral.ec A continuación indicamos como ingresar: Figura 30 Ingreso de la dirección web para acceder a la aplicación Elaborado por: El autor 79 Ingreso a la aplicación web la cual se encuentra distribuida de la siguiente manera Figura 31 Ingreso a la pantalla donde deberá ingresar el usuario y contraseña Elaborado por: El autor Usuario deberá ingresar el usuario emitido por la empresa INPRISE Contraseña corresponde a la clave otorgada por la empresa INPRISE La pantalla principal está conformada de la siguiente manera: Figura 32 Ingreso a la pantalla principal cuando esta logueado Elaborado por: El autor 80 Productos nos permite ingresar los nuevos productos que ofrece la empresa. Clientes en este formulario se debe ingresar los datos generales de los clientes nuevos. Categorías si la empresa cree necesario crear una nueva categoría podrá ingresar la información. Nueva factura cuando la empresa no tiene un sistema contable INPRISE ofrece el módulo de facturación básico. Comprobantes electrónicos se visualizarán todos los documentos electrónicos que fueron emitidos por las empresas a cada uno de sus usuarios. Subir CSV las empresas que no tengan sistemas contables podrá ser una opción subir sus CSV para emitir los comprobantes electrónicos a sus usuarios. Administración permite crear una nueva empresa y seleccionar empresa para su administración. Para poder visualizar los RIDES y XML emitidos a los usuarios se debe dar click en Comprobantes Emitidos, luego asignar un rango de fechas incio y fin, para oberservar se dará click en la parte de documentos y se obtendrá el siguiente reporte. Figura 33 Documentos emitidos por la Aplicación: RIDE y XML al usuario Elaborado por: El autor 81 Los documentos antes mencionados también se envía al correo electrónico de cada uno de los usuarios de las empresas, a continuación se mostrará cómo llega el correo: Figura 34 Correo emitido a los usuarios de las empresas con los documentos electrónicos Elaborado por: El autor Para descargar reportes como CSV o en formato EXCEL se debe dar clic en la opción o botón CSV o EXCEL Figura 35 Reportes en CSV ó EXCEL Elaborado por: El autor 82 3.4.5. Pruebas de Funcionalidad 3.4.5.1. Pruebas con datos reales La prueba con datos reales sirven para observar casos que se presentan, combinaciones y aspectos que son visibles para el usuario del sistema o que surgieron dentro del trabajo diario y que no fueron vistos o tenidos en cuenta en las etapas de desarrollo, de esta manera se realizará la verificación de los formularios al momento de realizar el ingreso de información que se solicita para la comprobación de validaciones que se encuentra en dicha aplicación. Una vez que se haya ingresado todos los datos correctos del nuevo cliente en el formulario podrá almacenar los datos en la aplicación. Figura 36 Pruebas con datos reales Elaborado por: El autor 3.4.5.2. Prueba con datos erróneos Al momento de ingresar datos incorrectos en el formulario como se muestra en este caso el ingreso de un cliente que algunos campos son obligatorios, no podrá realizar el almacenamiento de dicho cliente. 83 Figura 37 Prueba con datos erróneos Elaborado por: El autor Además la aplicación muestra datos erróneos como el XML no autorizado por parte del web service de la Administración Tributaria SRI. Figura 38 Error emitido por el Web Service del SRI Elaborado por: El autor 84 3.4.5.3. Pruebas de velocidad en navegadores Uno de los componentes deficientes más críticos para el usuario, se puede decir que es la velocidad de carga de una aplicación web. Ya que a veces finalizan de leer información y todavía el servidor está intentando descargar imágenes, datos o partes de la web. Sin embargo uno de los aspectos más importantes es el tiempo de carga, es decir si tarda mucho en mostrar el contenido, el usuario no podrá tener un rendimiento eficiente. Para poder saber cuál es la velocidad de la aplicación existen varias soluciones, una de ellas es en la siguiente dirección electrónica http://gtmetrix.com, ya que permite encontrar el tamaño, el tiempo de carga y determinar el promedio de velocidad por KB/s, este programa realiza test de velocidad de respuesta como se demuestra en el siguiente gráfico. Figura 39 Pruebas de velocidad Fuente: http://gtmetrix.com/reports/facturas.integral.ec/ngCwyurk Resultado del análisis de la aplicación: Tamaño página: 1.35MB, Velocidad de carga total: 2.11s. Como se puede observar el test de velocidad es satisfactorio con una carga aceptable. 85 3.4.5.4. Pruebas de Hardware y Software Detalle: La prueba radicó en acceder a la aplicación web, en algunos computadores que poseen características diferentes, en cuanto a hardware y software (en lo que concierne a S.O), y se apreciaron los siguientes resultados: Resultados obtenidos en máquinas con S.O propietario. PROCESADOR MEMORIA DISCO S.O PROPIETARIO TIEMPO USUARIOS Pentium Dual 1GB 320GB WINDOWS 7 21.36s 1 CORE 2 DUO 2GB 320GB WINDOWS 7 9.58s 1 CORE i5 4GB 500GB WINDOWS 7 3.16s 5 CORE i7 4GB 500GB WINDOWS 7 1,76s 8 Tabla 7 Pruebas de Hardware y Software propietario Elaborado por: El autor Resultados obtenidos en máquinas con S.O libre PROCESADOR MEMORIA DISCO S.O PROPIETARIO TIEMPO USUARIOS Pentium Dual 1GB 320GB Linux Mint 17.25s 1 CORE 2 DUO 2GB 320GB Linux Mint 7.60s 1 CORE i5 4GB 500GB Linux Mint 2.07s 5 CORE i7 4GB 500GB Linux Mint 1,05s 8 Tabla 8 Pruebas de Hardware y Software libre Elaborado por: El autor Mediante esta prueba se determina que la aplicación web trabaja mejor con el sistema operativo libre puesto que las herramientas de diseño tienen las mismas características (herramientas libres), no obstante con un sistema operativo propietario la aplicación web rinde de una manera eficiente, a sumiendo que la demora en los tiempos de respuestas son mínimos. 3.4.5.5. Pruebas de seguridad lógica REQUERIMIENTOS FUNCIONALES Consiste en la autenticación de los usuarios a través de la Autentificación asignación de claves en el módulo correspondiente. Información que servirá para identificar al usuario por medio de la consulta en la base de datos. 86 En este módulo se puede crear, actualizar e incluso eliminar a Gestión de datos según los usuarios asignados los usuarios. Realizar operaciones y búsquedas (filtro). MD5 es uno de los algoritmos de reducción criptográfica. La Encriptación de datos codificación del MD5 de 128 bits es representada típicamente como un número de 32 dígitos hexadecimal. Respaldos de Base de datos Consiste en sacar un respaldo de la base de datos de la aplicación web para almacenarlo en un lugar específico. Tabla 9 Opciones del módulo de seguridad Elaborado por: El autor 3.4.6. Mantenimiento La aplicación web posterior a su implantación y manipulación por parte de los usuarios sufrirá cambios, es por ello que se recomienda realizar mantenimiento cada tres meses, sacando un respaldo de la base de datos y de los módulos existentes de dicha aplicación. Además en la aplicación se podrán realizar agregaciones futuras según los requerimientos que se presenten por los clientes de INPRISE. 87 CONCLUSIONES El uso de software libre en ambientes empresariales (como el Framework de desarrollo Django, lenguaje Phyton) es de gran utilidad hoy en día, por cuanto ahorra recursos y presupuesto para las empresas que lo utilizan además proporcionan la flexibilidad y ahorro de tiempo en el desarrollo de aplicaciones.. Es importante hoy en día incluir la tecnología en los procesos de negocio de las empresas en el Ecuador y en todo el mundo, permite a las empresas mejorar en la calidad de servicios hacia sus clientes y les permitirá cumplir a cabalidad las disposiciones legales y reglamentarias. Es importante para los usuarios finales de estas soluciones empresariales el disponer de su información en medios electrónicos en los cuales podrá consultar en el momento que crean necesario, lo que representa el beneficio de usar la tecnología en cualquier área de la vida del ser humano. Las empresas al utilizar estas tecnologías para emisión de comprobantes electrónicos contribuyen al medio ambiente al ahorrar el uso de recursos como el papel, tinta de impresoras, entre otros. 88 RECOMENDACIONES Es recomendable que las empresas al momento de adoptar tecnología para sus procesos vean la alternativa de software libre versus el software privativo pues ahorran costos y son más fáciles de utilizar. Se recomienda a las empresas ya sean grandes o pequeñas adoptar este tipo de soluciones tecnológicas que les permitirá cumplir en forma correcta con los requerimientos de la Administración Tributaria en el Ecuador. Se recomienda a las empresas designar y capacitar a una persona responsable que administre la información que generan sus procesos, además que se encargue del soporte a los clientes en cuanto a la emisión de comprobantes electrónicos, esto garantizará la imagen y calidad de servicio hacia los clientes tanto por parte de la empresa INPRISE como de las empresas a sus usuarios. Se recomienda a las empresas clientes de INPRISE difundir la importancia del uso de mecanismos de generación de comprobantes de manera electrónica y el uso de las herramientas tecnológicas como el correo electrónico para poco a poco ir reduciendo el uso de papel para contribuir con el medio ambiente y adoptar la tecnología en los procesos empresariales. 89 BIBLIOGRAFÍA Beati, H. (2012). PHP Creación de páginas Web dinámicas. Méxicp: ALFAOMEGA. Ceballos, F. J. (2011). Java 2: Curso de Programación. México: Alfaomega. Cuadra, D., Castro, E., Iglesias, A. M., & al., e. (2013). Desarrollo de Bases de Datos. Cursos prácticos desde el análisis a la implementación. México: Alfaomega Grupo Editor. Dávila Sguerra, M. (2009). GNU/Linux y el Software Libre y sus multiples aplicaciones. Bogotá - Colombia: Alfaomega. De la Cruz Paisig, H. B. (2012). Linux. El Sistema Operativo del futuro. Lima - Perú: Empresa Editora Macro. De la Cruz Paisig, H. B. (2012). Servidores en Linux. Alta seguridad. Lima - Perú: Empresa Editora Macro. Freeman, A. (2012). Pro JavaScript for Web Apps. New York: Apress Editorial. Freeman, A. (2013). Pro jQuery 2.0. New York: Apress. García, S. (2015). La guía definitiva de django. Desarrolla aplicaciones web de forma rápida y sencilla. México: Django Software Corporation. González Duque, R. (S/A). Python para todos. España: Creative Commons Reconocimiento. Hernández Sampieri, R., Fernández Collado, C., & Baptista Lucio, P. (2010). Metodología de la Investigación. México: Mc Graw Hill. Herrera Ríos, E. (2012). Arrancar con HTML5. Curso de Programación. México: Alfaomega. López Montalbán, I., Castellano Pérez, M. J., & Orpino Rivas, J. (2013). Base de Datos. México: Alfaomega Grupo Editor. Moreno Pérez, J. C. (2012). Programación. Bogotá - Colombia: Ediciones de la U. Moro Vallina, M., & Rodés Bach, A. (2014). Marketing Digital. Madrid - España: Ediciones Paraninfo. Pérez Fernández de Velasco, J. A. (2013). Gestión por procesos. México: Alfaomega. Publicaciones, C. d. (2012). Ley de Comercio electrónico, firmas electrónicas y mensajes de datos. Reglamento, Legislación conexa, concordancias. Quito: Corporación de Estudios y Publicaciones. Publicaciones, C. d. (2014). Ley Orgánica de Régimen Tributario Interno. Legislación Conexa, concordancias. Quito - Ecuador: Corporación de Estudios y Publicaciones. Roldán Martínez, D., Valderas Aranda, P. J., & Óscar, P. L. (2010). Aplicaciones Web: Un enfoque práctico. México: Alfaomega. Sawyer McFarland, D. (2009). CSS. Madrid - España: Anaya Multimedia. Schulz, R. (2009). Diseño Web con CSS. México: Alfaomega. Veloso, C. E. (2011). Computación Básica para Adultos. Buenos Aires: Alfaomega. LINKOGRAFÍA Alvarez, M. A. (2012). Desarrolloweb.com. Obtenido de http://www.desarrolloweb.com/manuales/manual-jquery.html DesdeLinux. (2013). DesdeLinux Usemos Linux para ser libres. Obtenido de http://blog.desdelinux.net/nginx-una-interesante-alternativa-a-apache Pérez Samiento, M. (Junio de 2015). SCRIBD. Obtenido de http://es.scribd.com/doc/15806438/SISTEMAS-CONTABLES#scribd PosgrestSQL-es. (2013). PosgrestSQL-es Portal en español sobre PostgreSQL. Obtenido de http://www.postgresql.org.es/sobre_postgresql Servicio de Rentas Internas. (2015). SRI. Obtenido de http://www.sri.gob.ec/web/guest/145 Wikipedia. (2015). Wikipedia La enciclopedia libre. Obtenido de http://es.wikipedia.org/wiki/Nginx SRI. (2015). Obtenido de http://www.sri.gob.ec/web/guest/67;jsessionid=hYVS9gDdGYLYU-rRsqT4B6ex SRI. (Abril de 2015). Obtenido de http://www.sri.gob.ec/web/guest/10116 ANEXOS ANEXO 1 ANEXO 2 ENTREVISTA DIRIGIDA AL GERENTE-PROPIETARIO DE LA EMPRESA INPRISE Nombre del entrevistado: ……………………………………………………………… Cargo: …………………………………………………………………………………… La presente entrevista tiene como objetivo recolectar información acerca de los procesos y servicios que realiza la empresa INPRISE a sus clientes. 1. Cuáles son las actividades a las que se dedica INPRISE? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 2. Qué área de cobertura de servicios tiene INPRISE? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 3. Cuál es la gama de servicios que la empresa ofrece a sus clientes? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 4. Tiene la empresa INPRISE solicitudes de soluciones de facturación electrónica? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 5. Cómo ve usted los temas relacionados con las disposiciones por parte del SRI para que las empresas (ciertos sectores) emitan sus comprobantes electrónicamente? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 6. Cuáles considera usted que son los beneficios para la empresas, disponer de una solución de facturación electrónica? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 7. Considera usted que los costos de implementación de facturación electrónica son altos para las empresas y negocios? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 8. A su criterio qué dificultades enfrentan las empresas para implementar la facturación electrónica? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 9. Considera usted que por parte del SRI existe la suficiente guía y ayuda hacia las empresas para implementar facturación electrónica? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 10. Qué aspectos de seguridad deben tomarse en cuenta para implementar facturación electrónica? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 11. En qué forma los clientes de INPRISE solicitan la implementación de la facturación electrónica? ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ANEXO 3 MANUAL DE USUARIO APLICACIÓN WEB PARA LA EMSIÓN DE COMPROBANTES ELECTRÓNICOS DE LOS CLIENTES DE LA EMPRESA INPRISE DE LA CIUDAD DE IBARRA Para trabajar con la aplicación en el navegador de su computador deberá digitalizar https://facturas.integral.ec A continuación indicamos como ingresar: Ingreso a la aplicación web la cual se encuentra distribuida de la siguiente manera Usuario deberá ingresar el usuario emitido por la empresa INPRISE Contraseña corresponde a la clave otorgada por la empresa INPRISE En la pantalla principal está conformada de la siguiente manera cuando el usuario es ADMINISTRADOR: Descripción de Menú Productos: Esta opción permite crear productos en el caso que la empresa contratante emitiría su factura desde la aplicación Clientes: Esta opción permite crear clientes en el caso que la empresa contratante emitiría su factura desde la aplicación Categorías: Esta opción permite crear categorías en el caso que la empresa contratante emitiría su factura desde la aplicación Nueva Factura: Permitirá crear la factura desde la aplicación misma. Comprobantes Emitidos: Esta opción permite mostrar todos los comprobantes creados ya sean estos por creación desde la aplicación, archivo CSV o por replicación de la base de datos. Subir CSV: Como su nombre lo indica permitirá subir el archivo CSV con los datos de las facturas a procesar Administración: En este menú al realizar un click sobre él nos desplegará un submenú con opciones propias de administración. En el menú de Administración se puede observar las siguientes opciones: Seleccionar Empresa Crear Empresa Crear Establecimiento Reporte Empresas CREACIÓN DE EMPRESA Para la creación de una nueva empresa se accede al menú de Administración y se selecciona Crear Empresa Como se puede observar se despliega los campos para la creación de la empresa los cuales son necesarios para la conformación del XML que exige el SRI, para la emisión del documento electrónico, a continuación se describe cada uno de los campos que están presentes en el formulario. Ruc: Registro Único de Contribuyentes Razón Social: Se refiere al nombre del representante o nombre de la empresa Dirección: La dirección donde se encuentra ubicado el establecimiento matriz Obligado a Llevar Contabilidad: Campo boleano Resolución: El número de resolución entregado por el SRI Tipo de emisión: Seleccionamos la opción Normal Tipo de Ambiente: Es muy importante ya que este campo determina en qué ambiente enviaremos el documento al SRI. Pruebas y Producción cabe recalcar si enviamos en modo producción los documentos serán objeto de tributario Código Numérico: Requerimiento del SRI dígito de 8 enteros por defecto ponemos 1 y el sistema completará el resto de números faltantes con cero. IP Cliente: Este campo será únicamente lleno si la empresa a la que se le está creando emitirá la factura por medio de réplica de datos. Ruta de Base de Datos: En este campo corresponde al nombre de la base de datos si se tratara de base de datos Postgres o si se trata de una base de datos Firebird se ingresará la ruta absoluta. Si la réplica es por medio de SCV o creación de factura desde la aplicación se dejará en blanco. Contribuyente especial: Equivale al número de contribuyente especial el caso de no tenerlo colocar cuatro ceros. Alias: Este campo al igual que todos es muy importante porque por medio de éste alias conoceremos a la empresa a la cual se realiza el proceso de Replicación y Autorización. Logotipo: Es la imagen que se reflejará en el documento impreso llamado RIDE Token: Corresponde a la firma digital de la empresa adquirida en el Banco Central o en los establecimientos autorizados. El formato del archivo por lo general es de extensión .pk12. Password Token: Como su nombre lo indica es la contraseña de la firma digital. Usuario: Es el nombre del usuario con el cual le daremos acceso a la empresa para ingresar a la aplicación Password Usuario: La contraseña que se le asigna a la empresa para ingresar a la aplicación Una vez ingresados todos los datos antes descritos presionamos en el botón guardar. INGRESO DEL ESTABLECIMINETO El ingreso del establecimiento es muy importante para la generación del XML requerido por el SRI en el cual explicamos los campos requeridos como son: Empresa: Refiere a la empresa que creamos anteriormente la cual generamos su establecimiento. Número de Establecimiento: El número de establecimiento del cual vamos a emitir las facturas para su autorización. PERMISOS A LA EMPRESA CREADA Para la asignación de permisos debemos dar clic en la pestaña Establecer Permisos, y se observará el siguiente formulario: Una vez ingresado escogeremos la última opción la cual dice USERS En la pantalla que se despliega seleccionaremos el nombre de usuario que le asignamos al momento de crear la empresa, si no se puede visualizar a simple vista podemos buscar el nombre de usuario ingresando en el cuadro de búsqueda el cual tiene una imagen de una lupa. Al seleccionar el usuario nos desplegará una pantalla Modificar USERS en la misma que nos dirigimos al campo Permisos de Usuarios y seleccionamos los permiso que sean necesarios para nuestro caso hemos seleccionando el permiso facturacion|factura|Puede hacer una factura facturacion|producto|Puede administrar productos Una vez realizado este paso nos queda cerrar sesión con el usuario administrador e ingresar con el usuario de la empresa que hemos creado. INGRESAR COMO USUARIO (EMPRESA) CREADA Para ello ingresamos a la dirección https://facturas.integral.ec Usuario deberá ingresar el usuario emitido por la empresa INPRISE Contraseña corresponde a la clave otorgada por la empresa INPRISE Una vez ingresado observamos la siguiente pantalla de la empresa creada Como podemos observar en la imagen anterior se muestra los permisos asignados y una pantalla de estadísticas en la cual nos muestran los clientes creados, los productos destacados la venta más alta del mes, semana y el valor de ingreso del mes, último mes y última semana. Además un gráfico de ventas de todos los meses. CREACIÓN DE UNA FACTURA DESDE LA APLICACIÓN Para la creación de una factura como es común primero se debe ingresar los productos y clientes, luego se procede a explicar la creación de los mismos para poder emitir nuestra factura Para la creación de los productos nos dirigimos a la opción del menú Productos, luego presionamos el botón Agregar Producto y llenamos sus datos requeridos. Luego de ingresar el producto procedemos a ingresar un nuevo cliente para realizar la factura, para ello ingresamos en el menú Clientes en el cual nos desplegará una lista de los clientes creados. Una vez desplegado los clientes presionamos en el botón Agregar Cliente en la cual llenamos los datos requeridos y guardamos. Es importante mencionar el ingreso del Email (Correo Electrónico) ya que será la dirección la cual se enviará la información de autorización de la factura como son el RIDE y el XML. Una vez que hemos ingresado los productos y los clientes podemos generar nuestra factura desde la aplicación para ello nos ingresamos en el menú Nueva Factura en el formulario que nos aparece completaremos los datos para generar nuestra factura como se muestra en la siguiente imagen. Una vez completo los datos procedemos a guardar la factura y nos dirigimos a la opción del menú Comprobantes Emitidos la cual nos mostrará todos los comprobantes emitidos con sus diferentes filtros que nos ayudarán para la búsqueda. Como se muestra en la imagen nuestra factura emitida se encuentra en estado SIN ENVIAR para lo cual esperaremos un lapso de tiempo para que la factura se envíe al SRI para su respectiva autorización luego de este tiempo actualizaremos nuestra página en el botón BUSCAR. Cabe mencionar que los documentos electrónicos llegan al correo del cliente registrado. Una vez realizado este proceso podemos ver si nuestra factura fue autorizada o devuelta en este caso como podemos mirar en el siguiente gráfico nuestra factura efectivamente fue AUTORIZADA Opciones de Comprobantes Emitidos. Para acceder al nuestro documento pre impreso llamado RIDE o a su respectivo XML en la columna DOCUMENTO encontramos unos gráficos los cuales son hipervínculos que nos muestra lo que elijamos, el RIDE se mostrará siempre y cuando haya sido autorizado. De igual manera podremos acceder a los datos con más detalle de la factura hacemos click en el hipervínculo de la columna número que se encuentra resaltada con azul al presionar nos muestra una pantalla como la siguiente. CREACIÓN DE FACTURAS A PARTIR DE UN ARCHIVO CSV Para la creación de una factura a partir de un formato CSV lo primero que debemos hacer es crear los productos que van hacer vendidos una vez creados los productos nos iremos a la parte del menú y seleccionaremos Subir CSV Como se muestra en la siguiente imagen. FORMATO O CAMPOS QUE DEBE CONTENER NUESTRO ARCHIVO CSV La aplicación web permite subir archivos CSV de facturas para su autorización la opción se ha incrementado para todas las empresas o personas que tienen su propio sistema de facturación pero no poseen el módulo de facturación electrónica y tampoco desean cambiar o migrar a otro sistema para lo cual esas empresas solo deben generar un archivo en formato CSV con los siguientes campos separados por comas: marca,establecimiento,puntoventa,nrofiscal,packing,fecha,tipoid,clienteid,cliente,direccion,tel efono,agencia,cuartof,mawb,hawb,dae,fules,piezas,tallos,detalle,pu,subtotal,iva,total 1,"001","001",26735,37273,03/03/2015,8,"136","LEON","UI. GAGARINA 25 174 3 MOSCOW RUSSIA-RUSIA","79217919474","ECUCARGA","","07429758654","1783062","4000120628",1.000,4,720,"FLORES",0.16500,118.80,0.00,118.80 En este caso los datos anteriores corresponden a un CSV de una Florícola Una vez completo los datos procedemos a guardar la factura y nos dirigimos a la opción del menú Comprobantes Emitidos la cual nos mostrará todos los comprobantes emitidos con sus diferentes filtros que nos ayudarán para la búsqueda. De igual manera que la anterior esperaremos el lapso de 60 segundos y refrescamos con el botón BUSCAR para ver si nuestras facturas en estado sin enviar se han procesado tanto en replicar los datos del CSV como el envío al webservice del SRI para su respectiva autorización o devolución.