Estructura del pre-proyecto.docx

Anuncio
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 = '[email protected]'
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.
Descargar