- MANUAL DE ECOFACTURAWS
- Conceptos previos
- Instalación: requerimientos
- Principales Funcionalidades
- Configuración de ecoFacturaWinService
- Licencia
- Auditoria de proceso (BBDD de registro de acciones)
- Trabajos
- Firma de PDF
- Resellado de PDFs
- Firma de XML
- Verificación de eFirma
- Envío de eMail
- Distribución de documentos PDF
- Estampa PDF
- MergePDF: Fusión de documentos PDF
- Opciones de la acción
- Separación de documentos PDF
- Impresión de documentos PDF
- Generación de ficheros PDF
- Envío vía FTP
MANUAL DE ECOFACTURAWS #
Conceptos previos #
Antes de comenzar la configuración, es necesario aclarar diferentes conceptos:
Auditoría de proceso | Auditoría de proceso es el registro de todas las acciones realizadas por el servicio. Se trata de una base de datos que se podrá consultar a través de un visor del proceso |
Trabajos- Acciones | Cada trabajo corresponde a una “bandeja de entrada” y se compone de diferentes acciones (o tareas). Cada acción es una tarea a realizar sobre los ficheros encontrados en dicha carpeta. Ejemplo de trabajo sería “Factura electrónica”, que se compone de varias acciones como pueden ser “firmar PDF” o “enviar eMail” |
Ruta Rutas son los directorios de red. | Bandeja de entrada: directorio dónde el servicio recogerá los ficheros para ser procesados. Bandejas de salida: directorios donde el servicio almacenarálos ficheros una vez procesados (firmados, imprimidos, enviados…) |
Multi-Proceso | El servicio es multi-proceso, con lo que puede configurarse más de un trabajo. De esta forma, se permite vigilar varias carpetas de entrada y se aplican acciones diferenciadas a los archivos encontrados en cada una de ellas |
Proceso desatendido | Significa que el servicio vigila constantemente las carpetas de entrada pactadas en la configuración. |
Licencia de Uso | |
TSP OCSP |
#
Instalación: requerimientos #
Para la instalación de ecoFacturaWinService se requiere:
- Servidor Windows : no es necesario un servidor dedicado, puesto que los procesos para la firma de documentos no suelen ser muy exigentes.
- Windows 2003 o superior
- .NET framework 2.0 o superior
- ecoFacturaWinService : el setup instalador realiza las siguientes tareas
- ejecutable instalado como servicio en C:\program files (x86)\ecoFacturaWS
- licencias de uso
- lib_pdf.ocx para el parseo de documentos PDF (depende de GDIplus.dll, que ya está instalada en los Win XP y posteriores). Ambas librerías se deben instalar en el mismo directorio del ejecutable.
- Hay que registrar el OCX:
- regsvr32 “C:\Archivos de programa\ecoFacturaWinService\lib_pdf.ocx”
- Auditoría de proceso : para el seguimiento de los ficheros procesados
- Base de Datos (Access, SQL, oracle…)
- IIS, si se desea acceder a la BBDD desde cualquier punto
- Visor de proceso en web
- Firma electrónica :
- Certificado electrónico
- Firma XL(opcional): Servidor OCSP y Servidor TSP
- Módulo de envío
- EnvíoeMail: servidor SMTP, parámetros de la cuenta de correo saliente y cuerpo del mensaje mail
- Impresión: impresora instalada en el servidor. Si no se especifica, se imprimirá en la impresora configurada por defecto
- Protocolo FTP: datos de acceso al servidor.
Principales Funcionalidades #
Las funcionalidades de ecoFacturaWinService se pueden agrupar:
● Generación de documentos : discriminación de ficheros, separación de PDFs con lotes de documentos, incluirmarcas de agua, acceso a BBDD para obtener datos (eMail, contraseña, path de FTP)
● Firma electrónica (PDF y XML), con posibilidad de TSP y OCSP
● Módulo de envío : email, FTP, impresión en papel
● Custodia : registro de proceso.Todas las acciones realizadas se pueden consultar en base de datos.
Las posibles acciones que realiza ecoFacturaWinService son:
- Firma electrónica de documentos, incluyendo OCSP y TSP
- firmaPDF Firma ficheros PDF
- firmaXML Firma ficheros XML
- Verificación de la firma electrónica
- Módulo de envío
- enviaEmail Envío de mensajes eMail, vía SMTP
- imprime Impresión de los documentos
- enviaFTP Envío por FTP
- Otros
- Acceso BBDD Recupera datos (como el eMail de envío) desde la BBDD
- SeparaPDF Separa lotes de PDF (de 1 PDF con 50 facturas a 50 ficheros)
- EstampaPDF Incluye logos o textos en ficheros PDF (simulación de pre-impreso)
- Merge Fusiona ficheros PDF (a partir de 2 ficheros se obtiene 1 solo PDF)
- Mueve Distribuye documentos PDF en función de parámetros. Por ejemplo, a procesos de eFactura diferenciados en función del CIF de las empresas que emiten dichas facturas).
Todas las acciones realizadas se registran en la base de datos de “auditoría de registro”.
Además, existe un log con información técnica sobre estado del proceso.
Configuración de ecoFacturaWinService #
ecoFacturaWinService se configura en base a un fichero XML con la siguiente estructura de nodos:
Formato | |
Configuración | Contiene la configuración del fichero |
Licencia | Información de la licencia. Elemento necesario para que el servicio funcione. |
Auditoria | Auditoría de proceso es el registro de todas las acciones acciones realizadas por el servicio, que se podrán consultar a través de un visor del proceso |
Database | Indica la Base de Datos en la que se registra la auditoría de proceso. Ruta y parámetros de acceso a laBBDD. Esta BBDD puede estar en Access, SQL, Oracle… |
Trabajos | Cada trabajo corresponde a una “bandeja de entrada” y se compone de diferentes acciones. Cada acción es una tarea a realizar sobre los ficheros encontrados en dicha carpeta. El servicio es multi-proceso, con lo que puede configurarse más de un trabajo. De esta forma, se permite acceder a varias carpetas de entrada y se aplican acciones diferenciadas a los archivos encontrados en cada una de ellas. Este nodo guarda la configuración de los distintos trabajos que puede realizar el servicio. Se empiezan a definir los trabajos |
Trabajo | Cada trabajo se compone de diversas acciones, o tareas. Aglutina todas las acciones que se van a realzar a un fichero que entra en la carpeta de entrada pactada. |
Ruta | Carpetas de entrada, donde el servicio recogerá los ficheros para procesar… …y carpetas de salida donde se almacenarán una vez procesados (firmados, imprimidos, enviados…) |
Acciones | Las acciones que se aplicarán a cada uno de los ficheros encontrados en la ruta de entrada. |
Mueve | Distribuye ficheros PDF en función de parámetros |
separaPDF | Separa ficheros PDF |
estampaPDF | Incluye logos y textos en ficheros PDF |
MergePDF | Fusiona varios ficheros PDF para obtener uno solo |
firma | PDF Firma ficheros PDF |
ReselladoPDF | Resella la firma de ficheros PDF |
firmaXML | Firma ficheros XML |
enviaEmail | Envío de mensajes eMail |
imprime | Impresión de los documentos PDF |
enviaFTP | Envío por FTP |
Comentarios | En el fichero de configuración, para ayudar al técnico o recordar determinados aspectos, se pueden añadir contenidos que no debe leer ecoFactura en su funcionamiento. Para ello, se comentan mediante los siguientes corchetes: <!– texto que no queremos –!> |
Licencia #
codigo:
Valoralfanuméricoquecontienelainformacióndelalicenciadelproducto
idMaquina:
Valoralfanuméricoquecontienelainformacióndelalicenciaparalamáquinaenl
aqueseejecutaelservicio
Ejemplo:
Incrustado en el fichero ecoFactura.config
<licencia codigo="..." idMaquina="--------(LicenseData)-------...--------(LicenseData)-------"/>
Incrustado en el fichero ecoFactura.config (facilita el copiar/pegar)
<licencia>
<api>...</api>
<maquina>--------(LicenseData)-------...--------(LicenseData)-------</maquina>
</licencia>
Especificando los archivos donde está la licencia.
- Las rutas relativas al directorio donde se encuentra el ejecutable (EcoFactura.Servicio.exe).
- Si no se especifica en el .config la sección por defecto busca los archivos de licenciaLicenciaApi.lic y LicenciaMaquina.lic
- Para que los cambios en los archivos surtan efecto hay que reiniciar el servicio.
<licencia>
<api archivo="LicenciaApi.lic"/>
<maquina archivo="LicenciaMaquina.lic"/>
</licencia>
Auditoria de proceso (BBDD de registro de acciones) #
La auditoría de proceso consiste en registrar en BBDD todas las acciones que realiza ecoFacturaWinService, así como si el resultado de la acción ha sido correcto o erróneo.
Para ello, se debe contar con una BBDD (SQL, Oracle, Access…), consistente en dos tablas hacia las que apunta el registro de ecoFactura. Una vez definida estas tablas, ecoFacturaWinService registrará las acciones para poder ser visualizadas desde cualquier puesto con privilegios de acceso a las tablas.
- Tabla de Registro de sesiones: registra cada sesión
- Tabla de Registro de acciones: registra todas las acciones realizadas sobre ficheros
La auditoría de proceso es opcional, por lo que puede permanecer inactiva.
- id-servicio: Valor alfanumérico. Referencia de la auditoría. Referencia única.
- databaseprovider: Proveedor de acceso a datos.
- connectionString: Cadena de conexión.
- Source: Origen de la información.
Ejemplo de configuración SQL
<auditoria id-servicio="f3f71470-ed22-11dd-ba2f-0800200c5444">
<database provider="System.Data.SqlClient" connectionString="data source=127.0.0.1;persistsecurity info=True;initial catalog=ECOFactura;user id=test;password=test" ></database>
</auditoria>
Ejemplo de configuración Access
<auditoria id-servicio="f3f71470-ed22-11dd-ba2f-0800200c5444">
<database provider="System.Data.OleDb"connectionString="Provider=Microsoft.Jet.OLEDB.4.0; DataSource=C:\BaseDatos\Ecofactura.mdb" ></database>
</auditoria>
Trabajos #
Cada trabajo es un conjunto de acciones que se realizan sobre todos los archivos que aparecen en la carpeta de entrada.
Por tanto, a la hora de configurar un trabajo, primeramente indicaremos las rutas
- Base : a partir de esta ruta se pueden configurar rutas relativas
- Entrada : donde ecoFactura buscará los archivos a procesar
- Salida : donde se dejaran los ficheros procesados (ver función “mueve”)
Existen otras carpetas que se pueden configurar de manera opcional. Por defecto,
ecoFactura las dejará en la carpeta de salida:
- Temporal: Preferiblemente, deberá estar en la misma máquina donde está instalado el servicio.
- Errores: donde se dejaran los archivos que no se hayan procesado correctamente
- Archivos imprimidos
- Carpeta de pre-impresión
El resto de parámetros a configurar serán útiles para el registro de auditoría de proceso. Es
decir, para la base de datos en la que se registran las diferentes acciones realizadas:
- id: Valor alfanumérico. Identificador.
- Nombre: Valor alfanumérico. Nombre del trabajo.
- Descripción: Valor alfanumérico. Descripción del trabajo.
Cuando existen problemas de monitorización de carpetas, también se puede añadir el parámetro
- intervalo-barrido-carpeta-entrada=»5″
A partir de esta “configuración de cabecera” para el trabajo, se comienza a insertar las diferentes acciones.
Ejemplo de configuración:
Ejemplo de configuración
<trabajo id="b2800000-eded-11dd-aaaa-000000000070" nombre="eFactura" descripcion="Separa Facturas" >
<rutas base-path="C:\ecoFacturaService\" mantener-arbol-carpetas-entrada="true" sobreescribir-archivo-si-existe="true">
<ruta id="entrada" path="01FirmaXML" />
<ruta id="salida" path="02Salida" />
<ruta id="error" path="C:\ ecoFacturaService\Error\" />
<ruta id="Temporal" path=" C:\ ecoFacturaService \Temporal\" />
<ruta id="Imprimidos" path="Imprimidos" />
<ruta id="PreImpresion" path=" PreImpresion" />
</rutas>
Ejemplo de configuración (problemas de monitorización de Windows):
En algunos servidores antiguos, el SO Windows no permite monitorizar más de N directorios. Cuando se requiere que ecoFacturaWS monitorice más carpetas de entrada, se requiere indicar la periodicidad del barrido.
<trabajo id="b2800000-eded-11dd-aaaa-000000000070" nombre="eFactura" descripcion="Separa Facturas" intervalo-barrido-carpeta-entrada="5">
Ejemplo de configuración (problemas de parseo de documentos PDF):
ecoFacturaWS realiza algunas acciones en base al contenido de texto del documento, por ejemplo, extraer direcciónes de eMail o separar páginas en función de un tag. Para ello, ecoFacturaWS «parsea» el documento.
En el momento de la generación del PDF, por diferentes motivos, en algunos casos se generan espacios entre los caracteres y no permiten a ecoFacturaWS procesar algunas acciones correctamente.
Se ha incorporado una funcionalidad de extracción y lectura del texto de los PDFs, que implica desactivar el parseo nativo. El comportamiento mejora conmutando el parseo nativo por una funcionalidad externa.
<trabajo id="b2800000-eded-11dd-aaaa-000000000100" nombre="DEMOeFactura" descripcion="DEMO Proceso de eFactura" parseoNativo="1">
--> equivale a no informar el parámetro "parseoNativo". El parseo lo realiza la librería lib_pdf.ocx
Para desactivar el parseo nativo:
<trabajo id="b2800000-eded-11dd-aaaa-000000000100" nombre="DEMOeFactura" descripcion="DEMO Proceso de eFactura" parseoNativo="0">
Firma de PDF #
ecoFacturaWinService es capaz de firmar documentos PDF con los más altos estándares indicados por Adobe. Incluyendo el estado de revocación del certificado en el momento de la firma (consulta OCSP) y el sellado de tiempo de servidores externos (consulta TSP)
Por otro lado, se permite incorporar los datos informativos que se visualizarán en la validación de la firma de Adobe: el Autor de la Firma, la razón (o motivo) de firma, la dirección y datos de contacto del firmante.
El certificado electrónico puede estar instalado en el almacén de certificados por defecto del servidor (CryptoAPI de Windows), o bien en un fichero pfx.
Para la representación gráfica de la firma en PDF, se permite la visualización de una imagen.
Ejemplo de configuración
<firmaPDF activa="true"filename-filter="*.pdf">
<pfx ruta="C:\edatalia\parametros\service.pfx" password="service"></pfx>
<!-- <cryptoAPI sha1="ca4a9e84f0def1eaf2295e5d83003af769da2a6f" /> -->
<info autor="Firmado por edatalia" razon="Factura Electrónica" contacto="Firma contacto" direccion="Firma direccion"></info>
<ocsp activo="false" url="http://ocsp.camerfirma.com"></ocsp>
<selloTSP activo="false" url="http://ocsp.izenpe.com:8093"></selloTSP>
<!--<grafico visible="true" visible-en-impresos="true" alto="40" ancho="40" pagina="ultima" ruta-imagen=" C:\edatalia\parametros \logo_100x100.jp2" />-->
<grafico visible="true" visible-en-impresos="true" alto="100" ancho="100" x="100" y="200" font-size="6"/>
</firmaPDF>
Resellado de PDFs #
Puesto que el Sello de Tiempo es una firma realizada con el certificado electrónico de la Autoridad de Sellado, cuando ese certificado caduca, el sello y, por tanto, la firma dejan de ser válidas.
Por eso, antes de que el certificado de la TSA caduque es necesario resellar o aplicar de nuevo el Sello Temporal para mantener la validez temporal de la firma.
De acuerdo a los estándares PDF, en el momento de la primera firma electrónica, se debe preparar el documento para aceptar resellados posteriormente. Para ello, se reservará un espacio extra para futuros resellados, cada resellado supone alrededor de 3KB (3072 bytes).
La cantidad que se reserva genera un «sobrepeso» del PDF firmado, de manera que el buffer se incrementa en el doble (2x) de la cantidad especificada en el siguiente parámetro.
Ejemplo de configuración
Para especificar el tamaño extra en el momento de la firma
<firmaPDF activa="true"filename-filter="*.pdf">
<extraspace bytes="12500"></extraspace>
<!-- por defecto, si no se informa, el expacio extra es cero 12500 bytes permitiran aprox 2 resellados -->
<pfx ruta="C:\edatalia\parametros\service.pfx" password="service"></pfx>
<info autor="edatalia" razon="eFactura" contacto="Firma contacto" direccion="Firma direccion"></info>
<ocsp activo="false" url="http://ocsp.camerfirma.com"></ocsp>
<selloTSP activo="false" url="http://ocsp.izenpe.com:8093"></selloTSP>
<grafico visible="true" visible-en-impresos="true" alto="100" ancho="100" x="100" y="200" font-size="6"/>
</firmaPDF>
Para resellar
<resellarPDF activa="false" filename-filter="*.pdf">
<selloTSP activo="true" url="http://ocsp.izenpe.com:8093"></selloTSP>
</resellarPDF>
Firma de XML #
La firma XML también sigue los más altos estándares XAdES, permitiendo firmar cualquier tipo de fichero XML, tanto facturas en formato facturae, UBL como cualquier otro.
Ejemplo de configuración
<firmaXML activa="false" filename-filter="*.xml">
<pfx ruta="C:\edatalia\parametros\service.pfx" password="service"></pfx>
<!--Por defecto UTF-8-->
<charset>UTF-8</charset>
<!-- Normaliza el XML durante la carga-->
<normaliza-durante-carga>true</normaliza-durante-carga>
<!-- {Canonical, CanonicalPlusComents, Minimal}-->
<canocalizacion>Canonical</canocalizacion>
<!-- {DSS, RSA_SHA1, RSA_MD5, RSA_SHA256, RSA_SHA384, RSA_SHA512, RSA_RIPEMD160}-->
<algoritmo-firma>RSA_MD5</algoritmo-firma>
<!-- 1.1.1, 1.2.2, 1.3.2-->
<xades-version>1.2.2</xades-version>
<!-- {false=Firma BES, true=Firma BES+}-->
<incluircertificados>true</incluircertificados>
<!-- {true,false} Incluir información de comisiones en XAdES. Activado es válido para Facturae.-->
<rinc>true</rinc>
<!-- {true,false} Comisión de ser el emisor. Activado es válido para Facturae. -->
<remisor>true</remisor>
<!-- {true,false} Comisión de ser receptor-->
<rreceptor>true</rreceptor>
<!-- {true,false} Comisión de ser tercero-->
<rtercero>true</rtercero>
<!-- RCustomComisiones a medida separadas por ';'-->
<rcustom></rcustom>
<!-- {true,false} Incluir información de políticas Activado es válido para Facturae -->
<pinc>true</pinc>
<!-- Descripción de la política de firma Política de firma electrónica para facturación electrónica con Facturae-->
<pdesc>Política de firma electrónica para facturación electrónica con formato Facturae</pdesc>
<!-- Referencia a la política de firma -->
<pref></pref>
<!-- Identificador de la política de firma
http://www.facturae.es/politica%20de%20firma%20formato%20facturae/politica%20de%20firma%20formato%20 facturae%20v3_0.pdf -->
<pid>http://www.facturae.es/politica%20de%20firma%20formato%20facturae/politica%20de%20firma%20formato%20facturae%20v3_0.pdf</pid>
<!-- Hash SHA1 del documento apuntado por PID HQvPemjDslVpcNmaJPpbHzhdZ50 -->
<pidhash>HQvPemjDslVpcNmaJPpbHzhdZ50</pidhash>
<!-- {true,false} Inclusión o no de información de contacto del firmante -->
<sinc>true</sinc>
<!-- País del firmante -->
<spais>Spain</spais>
<!--localidad Del firmante -->
<slocalidad>San Sebastian</slocalidad>
<!-- Código Postal del firmante -->
<scodigopostal>20005</scodigopostal>
<!-- Dirección del firmante -->
<sdireccion>San Marcial 50</sdireccion>
</firmaXML>
Verificación de eFirma #
La función de verificación valida que un documento PDF o XML
- Está firmado electrónicamente
- La firma es integra: el documento no ha sido modificado
- El certificado está emitido por una CA de confianza
- Confiamos directamente en el certificado
Ejemplo de configuración
#
<verifica activa="true" filename-filter="*.pdf,*.xml" informe-firma="true">
<cas directorio="C:\Users\USUARIO\Desktop\00Demo\11VerificaFirmas\CAconfianza" />
<certificados-confianza>
<grupo validar-tsp="false" validar-ocsp="false" validar-ca="false">
Esta funcionalidad no está implementada: validará que el TSP y el OCSP sean de confianza <incluir directorio="C:\Users\USUARIO\Desktop\00Demo\11VerificaFirmas\CertificadoConfianza" />
<!-- <incluir sha1="" />-->
</grupo>
</certificados-confianza>
<!-- En estas carpetas, si la ruta es relativa se toma como raíz la carpeta de salida, las condiciones se aplican por orden, si no se aplica ninguna condición se manda a error el documento -->
<carpetas>
<carpeta directorio="Error\NoFirmados">
<incluir>${contexto.Documento.VerificacionFirma.TieneFirma == false}</incluir>
</carpeta>
<carpeta directorio="Error\NoIntegros">
<incluir>${contexto.Documento.VerificacionFirma.IntegridadOk == false}</incluir>
</carpeta>
<carpeta directorio="Error\CertificadoNoValido\CANoValida">
<incluir><![CDATA[${(contexto.Documento.VerificacionFirma.CAConfianza == false) && (contexto.Documento.VerificacionFirma.CertificadoValido == false)}]]></incluir>
</carpeta>
<carpeta directorio="Error\CertificadoNoValido">
<incluir>${(contexto.Documento.VerificacionFirma.CertificadoValido == false)}</incluir>
</carpeta>
</carpetas>
</verifica>
Envío de eMail #
La configuración de envío de email nos permite enviar el documento procesado por correo electrónico. Cada documento, se puede enviar a uno o varios destinatarios en modo “destinatario de envío”, “en copia” o “en copia oculta”.
Las direcciones de correo electrónico a las que se enviará se pueden obtener:
- una dirección fija: parámetro fijado en la configuración del servicio
- del propio archivo: el servicio recorre el archivo en busca de direcciones de email y envía a todas las direcciones encontradas.
- La función {contexto.Documento.ExtraeEmails()} extrae las direcciones de eMail de todo el doc
- Primera pagina ${contexto.Documento.ExtraeEmails(1)}
- Ultima página: ${contexto.Documento.ExtraeEmails(contexto.Documento.NumeroPaginas)}
- Primera, tercera y cuarta página: ${contexto.Documento.ExtraeEmails(1,3,4)}
- De la segunda a la decimo cuarta:
${contexto.Documento.ExtraeEmails(contexto.Documento.CreaNumerosDePagina(2, 14))} - En este caso, mediante la configuración, se pueden “excluir” direcciones a las que no queremos que se envíen los correos.
- de una BBDD: en la que buscaríamos, por ejemplo, mediante un CIF obtenido en el propio archivo
El asunto se fija mediante un parámetro y el cuerpo del mensaje puede configurarse mediante ficheros en formato de texto (txt o html).
En el caso de archivos PDF, ecoFacturaWinService puede discriminar los documentos que no contienen direcciones de envío para imprimirlos en la impresora configurada a tal efecto.
En caso de envío de documentos XML, se puede extraer el mail de una etiqueta concreta o detectando la dirección desde cualquier punto del documento.
ecoFacturaWinService puede enviar también documentos anexos al archivo que está procesando. Por ejemplo, si lo que se pretende es enviar las “condiciones generales de contratación” o algún documento relacionado con una factura (albarán, nota de gastos…).
Ejemplo de configuración para el envío de Mails a partir de documentos PDF
<enviaEmail activa="true" acuse-recibo="true">
<plantilla>
<to>
<incluir>pbe@edatalia.com</incluir>
<incluir>${contexto.Documento.ExtraeEmails()}</incluir><excluir>empresa@empresa.com</excluir>
</to>
<cc><incluir>cc@edatalia.com</incluir></cc>
<bcc><incluir>bcc@edatalia.com</incluir></bcc>
<from>ecoFacturaService@edatalia.com</from>
<asunto>Adjunto Factura ${contexto.Documento.Nombre}</asunto>
<cuerpo archivo="C:\edatalia\parametros\CuerpoMail.htm"></cuerpo>
<adjuntos>
<!-- por defecto borrar="false" requerido="false" -->
<adjunto ruta="C:\temp\anexos\${contexto.Documento.NombreSinExtension}_detalle.pdf" borrar="true" requerido="false" />
</adjuntos>
</plantilla>
<servidor tipo="smtp" username="pruebas" password="pruebas" uri="smtp://mail.edatalia.com:25"></servidor>
<if-email-sin-destinatarios imprimir="false" />
</enviaEmail>
En el envío se puede limitar el número de conexiones y el tiempo que estas se quedaran abiertas aún cuando no haya actividad.
<servidor tipo="smtp" uri="smtp://nombre_servidor_correo:25/?ConnectionLimit=2&MaxIdleTime=60000"></servidor>
<!-- El MaxIdleTime está en micro-segundos: 60000 es un minuto) -->
En caso de envío a partir de documentos XML
<enviaEmailactiva="true" acuse-recibo="true" filename-filter="*.xml">
<plantilla>
<to>
<incluir>${contexto.Documento.ExtraeEmails()}</incluir>
<incluir>${contexto.Documento.ExtraeMedianteXPath("//BuyerParty/*/ContactDetails/ElectronicMail//text()")}</incluir>
</to>
<!--Si el xml esta en formato facturae, se puede utilizar “ExtraeEmails()“ -->
Extraer mail en base a cadena regular de caracteres
Ejemplo de configuración (Solo utilizaría el primer correo encontrado)
<enviaEmail activa="true" filename-filter="*.pdf">
<plantilla>
<to>
<incluir>${contexto.Documento.ExtraeMeditanteExpresionRegularValorUnico(@"\b[A-Za-z0-9._]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b")}</incluir>
</to>
Distribución de documentos PDF #
ecoFacturaWinService permite distribuir archivos PDF en función de un parámetro contenido en el propio documento.
Es interesante utilizar esta función, por ejemplo, en un entorno multiempresa en el que las facturas de una empresa se quieren firmar con un certificado, o enviar por eMail en un idioma, y los de otra Empresa siguen una proceso diferente.
También, en el caso de las facturas que se imprimen varias veces, podemos separar las facturas que contienen la palabra «copia»
Ejemplo de configuración
<acciones>
<mueve activa="true" filename-filter="*.pdf">
<carpeta ruta="A28065480">
<incluir>${contexto.Documento.ContieneTexto("A28065480")}</incluir>
<excluir>${contexto.Documento.ContieneTexto("excluyeme")}</excluir>
</carpeta>
<carpeta ruta="B48836027">
<incluir>${contexto.Documento.ContieneTexto("B48836027")}</incluir>
<excluir>${contexto.Documento.ContieneTexto("excluyeme")}</excluir>
</carpeta>
<carpeta ruta="A48990543">
<incluir>${contexto.Documento.ContieneTexto("A48990543")}</incluir>
<excluir>${contexto.Documento.ContieneTexto("excluyeme")}</excluir>
</carpeta>
</mueve>
</acciones>
Estampa PDF #
Mediante la función “estampaPDF”, ecoFacturaWinService sustituye el formato del papel preimpreso. Esta función permite agregar logos y textos a los documentos PDF.
Por defecto, esta función pone las imágenes y textos en la capa superior del PDF. De esta forma, se ocultarían logos o textos que quedaran por debajo. Si se pretende que las marcas de agua queden “por debajo” del contenido original, se debe activar la función “transparente”.
NOTAS:
Las cordenadas x,y son 0,0 en la esquina inferior izquierda (un A4 tiene un tamaño de 594,842)
El origen de la rotación es el vértice inferior izquierdo del texto o imagen.
Para los textos de más de una línea, el interlineado mínimo es “1”, por defecto toma el valor“1.5”.
Excluir páginas
· Todas menos la primera: paginas=”todas, -primera”
· Todas menos la segunda: paginas=”todas, -2”
Ejemplo de configuración
<acciones>
<estampaPDF activa="true" filename-filter="*.pdf">
<texto>
<cuadro x="15" y="0" alto="18" ancho="842" contenido-aling="center" angulo="90"transparente="true"/>
<fuente familia="Courier" size="7" color="Green" />
<contenido>Registro Mercantil de PROVINCIA, Tomo 123. Libro de Sociedades, Folio 123, Hoja 12345</contenido>
</texto>
<texto paginas="ultima">
<cuadro x="6" y="0" alto="80" contenido-aling="left"transparente="true"/>
<fuente familia="Arial" size="8" color="#0000CC" interliniado="1" />
<contenido ruta=" c:\eFactura\Empresa1\TextoLOPD.txt" />
</texto>
<imagen>
<cuadro x="408" y="767" alto="75" ancho="186"transparente="true" />
<contenido ruta=" c:\eFactura\Empresa1\LogotipoEcoFactura.jpg" />
</imagen>
<imagen paginas="todas,-ultima">
<cuadro x="408" y="767" alto="75" ancho="186" transparente="true"/>
<contenido ruta=" c:\eFactura\Empresa1\LogotipoEcoFactura1.jpg" />
</imagen>
<imagen paginas="ultima">
<cuadro x="408" y="767" alto="75" ancho="186"transparente="true" />
<contenido ruta=" c:\eFactura\Empresa1\LogotipoEcoFactura2.jpg" />
</imagen>
</estampaPDF>
</acciones>
Para estampar textos o imágenes en diferentes páginas:
Sólo la última: <texto paginas=»ultima»><imagen paginas=»primera»>
Sólo la primera: <texto paginas=»primera»><imagen paginas=»ultima»>
Todas, salvo la primera: <texto paginas=»todas -primera»><imagen paginas=»todas -primera»>
Todas de la uno a la veinte menos la quinta y la octava: <imagen paginas=»1-20,-5,-8″>
paginas = selectorPagina, selectorPagina, selectorPagina
pagina = rango 4-10 o por nombre {primera, ultima, *, todas} o por numero 1
MergePDF: Fusión de documentos PDF #
El objetivo de esta funcionalidad es la de fusionar Ficheros PDF de forma que, a partir de varios archivos PDF, se obtiene un solo archivo. Al configurarse como una acción, se podría conseguir un anexado múltiple concatenando acciones MergePDF.
Por ejemplo, se podría utilizar esta acción cuando las facturas electrónicas deben adjuntar una página de “condiciones generales de compra” o un documento anexo (albarán, detalle de los servicios…)
En el tratamiento de cada una de la facturas, se busca si existe un albarán asociado y se fusionan ambos ficheros obteniendo un solo PDF. Por ejemplo, en el proceso de una factura (archivo PDFde 3 páginas) se encuentra que lleva asociado un albarán (también PDF, de 2 páginas). El resultado de la acción sería 1 PDF de 5 páginas.
El fichero a anexar se podrá identificar mediante el nombre del archivo, de forma homogénea con el “anexar” del envío de eMails: parte del nombre del archivo a fusionar coincide con el del fichero en proceso. Se pueden utilizar comodines (*, ?).
Ejemplo: <adjunto ruta=»C:\eFactura${contexto.Documento.NombreSinExtension}_anexo.pdf»/>
Ejemplo: <adjunto ruta=»C:\eFactura${contexto.Documento.NombreSinExtension}_??.pdf»/>
La función no revisará que los PDF tengan la misma configuración de página (alineación vertical/ horizontal, dimensiones de la hoja…)
Opciones de la acción #
- Opciones por defecto: borrar=»false» à a true borraría el fichero anexado
- Opciones por defecto: requerido=»false» à a true daría error si el fichero no existe
- Opciones por defecto: posición = “ultima” à el fichero anexo se añadirá después del procesado (también podría ser primera)
- La ruta puede ser absoluta o relativa a ecoFactura.servicio.exe.
- Admite comodines * y ? en la ruta (solo en el nombre del fichero)
<acciones>
<mergePDF activa="true" filename-filter="*.pdf">
<anexo ruta="c:\anexos\MergePDF\${contexto.Documento.NombreSinExtension}_detalle.pdf" posicion="utlima" borrar="false" requerido="false" />
</mergePDF>
</acciones>
Separación de documentos PDF #
Muchos sistemas de gestión son capaces de imprimir facturas en formato PDF, pero en ocasiones generan un solo PDF con todas las facturas.
EWS es capaz de separar estos lotes de PDFs en base a dos criterios: cada N páginas o cada vez que encuentra un parámetro “secuencia de separación”. También permite exluirPDFsentre los documentos resultantes, en base a contenidos (por ejemplo, los
documentos que contengan la palabra “copia”)
Para nombrar el fichero de salida, podemos utilizar
- Una “ secuencia de numeración ”: de forma que el nombre del fichero resultante se tomará del texto inmediatamente posterior a esta secuencia de numeración (##FileName: FRV-123456)
- Expresiones regulares : de forma que el nombre del fichero se tomará de la primera cadena de caracteres que cumpla con la expresión regular. Por ejemplo: «\b(FVR-[0-9]{5,6})\b»
Ejemplo de configuración
<separaPDF borrar-original="true" algoritmo="porPagina" filename-filter="*.pdf">
<!-- el parámetro de excluir documentos se puede comentar <addkey="texto.paginas.exluidas" value="COPIA" /> -->
<addkey="paginas.porbloque" value="1" />
<addkey="texto.numeracion" value="(##FileName:" />
</separaPDF>
Otro ejemplo
<separaPDF borrar-original="true" algoritmo="porTexto" filename-filter="*.pdf">
<addkey="texto.paginas.exluidas" value="COPIA FACTURA" />
<add key="texto.separacion" value="TOTAL FACTURA" />
<add key="texto.numeracion" value="NombrePDF:" />
<add key="texto.numeracion.formato" value="Lote_{0}_{2}_{3:yyyyMMdd_hhmm}.{1}" />
</separaPDF>
Valores del renombrado
ABCD: se permite incluir cadenas de caracteres fijas. En el ejemplo, la palabra “Lote” y los guiones bajos.
{0}: nombre del fichero original
{2}: valor extraido en la variable “textoseparacion”
{3}: fecha.
Se puede indicar el formato. Por ejemplo :yyyyMMdd_HHmm}
Importante diferenciar las MM del mes y los mm de los minutos
Las horas HH van del 0 al 24h. poniendo minúsculas, hh toma el valor entre 0 y 12h.
{1}: extensión del fichero. PDF.
Renombrado en base a expresiones regulares
La separación permite utilizar expresiones regulares en la numeración. Ejemplo:
Para que el texto numeración extraiga mediante expresiones regulares (regexpal.com) hay que comenzar con \b y cerrar \b.
<separaPDF borrar-original="true" algoritmo="porTexto" filename-filter="*.pdf">
<addkey="texto.separacion" value="Importe Total Factura" />
<addkey="texto.numeracion" value="\b(FVR-[0-9]{5,6})\b" />
<addkey="texto.numeracion.formato">{2}.{1}</add>
</separaPDF>
Otro ejemplo de configuración, para separar facturas de una página
<separaPDF borrar-original="true" algoritmo="porPagina" filename-filter="*.pdf">
<add key="paginas.porbloque" value="1" />
<add key="texto.numeracion" value="\b(?:Factura Nº: )(\w*)\b" />
<add key="texto.numeracion.formato" value="{2}.{1}" />
</separaPDF>
Impresión de documentos PDF
#
En el caso de documentos PDF, ecoFacturaWinService es capaz de imprimir documentos.
Para ello, se permite la configuración de cualquier impresora disponible en el puesto, utilizándose la impresora por defecto si no se especifica ninguna.
Para la configuración de la impresora, es importante conocer que el nombre no es sensible a mayúsculas (‘HP 845c’ es equivalente a ‘hp 845C’)
Ejemplo de configuración
<imprime activa="true" filename-filter="*.pdf">
<impresora activa="true"nombre="hp deskjet 845c" numero-copias="1" />
<carpetapreimpresion activa="true" />
</imprime>
Una opción puede ser la de mover todas las facturas sin e-Mail a la carpeta de preimpresión, para que otra aplicación gestione la impresión de los documentos en papel.
<enviaEmail
...
<if-email-sin-destinatarios imprimir="true" />
</enviaEmail>
<imprime activa="false" filename-filter="*.pdf">
<impresora activa="false" />
<carpetapreimpresion activa="true" />
</imprime>
Generación de ficheros PDF #
A partir de un fichero de texto, con la utilidad » StaplesFacturasAPdf.exe» se pueden generar de documentos PDF. El formato del PDF resultante (logos, textos…) será el que aporte una plantilla definida a tal efecto (fichero Plantilla_Factura.pdf)
Ejemplo de configuración
<ejecuta activa="true" filename-filter="*.txt">
<aplicacion ruta="C:\Program Files\ecoFacturaWS\exe\StaplesFacturasAPdf.exe" use-shell="false"/>
<parametros>"${contexto.Documento.SourceFile.FullName}" "D:\eFactura\01_generadas" "C:\program files\ecofactura\Plantilla_Factura.pdf" </parametros>
</ejecuta>
Envío vía FTP #
El protocolo de envío mediante FTP también está incluido en el módulo de envío de ecoFacturaWinService.
Ejemplo de configuración
<enviaPorFTP activo="true">
<servidor>
<host>127.0.0.1</host>
<port>21</port>
<remotedir>/upload/ecofactura/</remotedir>
<pasv>true</pasv>
<user>eco</user>
<password>pweco</password>
</servidor>
</enviaPorFTP>
Ejemplo de configuración, con acceso a BBDD y carpeta variable en el servidor FTP
<sources>
<database id="clientes" providerName="System.Data.OleDb" connectionstring="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\CRM_Database.mdb">
<consulta id="buscaCorreoByNif" sql="SELECT Email FROM DatosEcoFactura WHERE NIF = ?"></consulta>
</database>
</sources>
<!--... sigue la configuración con trabajos y acciones, hasta que llega la acción de envío por FTP. -->
<enviaPorFTP>
<servidor>
<host>127.0.0.1</host>
<port>21</port>
<!-- <remotedir>/upload/${contexto.Documento.ExtraeNifOVatId()}</remotedir> -->
<remotedir>/upload/${contexto.Sources["clientes"].Consulta("buscaCorreoByNif",contexto.Documento.ExtraeNifOVatId())}</remotedir>
<pasv>true</pasv>
<user>eco</user>
<password>pweco</password>
</servidor>
</enviaPorFTP>