amap-csv

Última modificación por Administrator el 2020/05/26 11:34

AMAPCSV-3.2.0 2020/05/26

  • Se añaden los métodos normalizar y desnormalizar Urls.

AMAPCSV-3.1.0 2020/04/23

  •  Incluir en cajetín con motivo delegación de firma

AMAPCSV-3.0.12 2020/03/12

  •  Correción en el escalado auxiliar en caso de que el pdf tenga unas dimensiones superiores a las de un din A4

AMAPCSV-3.0.11 2020/03/06

  •  Permite plasmar la información del certificado en el cajetín de la firma del pdf.

AMAPCSV-3.0.10 2020/03/05

  •  Solución de errores menores

AMAPCSV-3.0.9 2020/02/28

  •  Soluciona bug en la comprobación de rotaciones 

AMAPCSV-3.0.8 2020/02/28

  •  Soluciona bug en la comprobación de rotación interna de 180 grados del pdf 

AMAPCSV-3.0.7 2020/02/27

  •  Agrega una comprobación en la rotación interna del pdf

AMAPCSV-3.0.6 2020/02/26

  •  Cambio de texto para COPIA_COMPULSADA

AMAPCSV-3.0.5 2020/02/20

  •  Cambios de texto en la validez de los documentos

AMAPCSV-3.0.4 2020/02/14

  •  Plantilla personalizada

AMAPCSV-3.0.3 2020/01/27

  •  Ordenar de firmantes por fecha de firma.

AMAPCSV-3.0.2 2020/01/22

  •  Cambio de aspecto del informe de firma para uno y dos firmantes

AMAPCSV-3.0.1 2020/01/21

  •  Cambio de aspecto del informe de firma

AMAPCSV-3.0.0 2019/11/14

  •  Modificación en la creación de los cajetines
  •  Eliminar funcionalidad para generar informes de firma y creación de documentos

AMAPCSV-2.1.0 2019/04/25

  •  Soporte de nuevo api de firma
  •  Alineación de componentes bouncy castle a la versión jdk15on
  •  Correción en rotación de 90 grados

AMAPCSV-2.0.1 2019/03/05

  •  Cambios en la codificación de la url de referencia documental

AMAPCSV-2.0.0 2019/02/25

  •  Se añaden servicios para generar y desencriptar la referencia documental

AMAPCSV-1.9.0 2019/01/15

  •  Se elimina el sello registro, solo aparecerá la información de registro en el cajetín.

AMAPCSV-1.8.2 2019/01/02

  •  Corrección en el cajetín lateral

AMAPCSV-1.8.1 2018/12/17

  •  Corrección en el paginado de los cajetines
  •  Correción en rotación vetical

AMAPCSV-1.8.0 2018/11/12

  • Se añade soporte de pdfs con formularios

AMAPCSV-1.7.0 2018/10/15

  • nuevo método para obtener el original y firmado a partir de un CSV
     Este método implica estar dado de alta en VerificaCSV para utilizar este servicio

AMAPCSV-1.6.0 2018/09/21

  • Se elimina los métodos deprecated
  • Se añade mensaje de no verificado en pie
  • Registro de Entrada y Salida en los cajetines

AMAPCSV-1.5.6 2018/08/06

  • Limitación tamaño de los firmantes en el cajetín

AMAPCSV-1.5.5 2018/05/24

  • Se elimina la protección de los pdfs generados

AMAPCSV-1.5.4 2018/05/21

  • Corrección en firmantes

AMAPCSV-1.5.3 2018/04/26

  • Corrección en firmantes

AMAPCSV-1.5.1 2018/04/24

  • PDF protegido contra escritura.
  • Cambios menores formato cajetin

AMAPCSV-1.5.0 2018/02/12

  • Cambio de funcionalidad del componente, con nuevos cajetines y funciones de creación de documentos.
  • Cambio de groupid de es.gobcantabria.amap.utilidades a es.gobcantabria.amap.integracion

AMAPCSV-1.4.1 2017/07/03

  • Se crea el método para obtener el servicio con funcionalidad completa.

AMAPCSV-1.4.0 2017/06/01

  • Se añade la Versión 3 del tipo de código de CSV.
    A partir de esta versión la generación de la versión del CSV será con 38 caracteres en vez de 33 de las versiones anteriores

AMAPCSV-1.3.1 2017/02/16

  • Corrección de dependencia con con "amap-firma"

AMAPCSV-1.3.0 2017/02/22

  • Integración con "amap-firma" y "amap-gestor-documental".

AMAPCSV-1.2.0 2015/12/15

  • Nuevos formatos de csv en el pdf: se distinguen documentos firmados con certificado digital y no firmados. 

AMAPCSV-1.1.7 2014/11/14

  • Añadida la posibilidad de mostrar un código QR en lugar del código de barras.
  • Añadidos enlaces a la aplicación de validación en las códigos.
  • Correcciones generales.

AMAPCSV-1.1.5 2014/09/23

  • Añadido la posibilidad de añadir pies con código de verificación a documentos pdf.  

AMAPCSV-1.1.0-SNAPSHOT 2012/10/09

  • Se modifica el acceso al diccionario de datos  

AMAPCSV-1.0.0-SNAPSHOT 2012/09/03

  • Primera versión del componente.
<dependency>
<groupId>es.gobcantabria.amap.utilidades</groupId>
<artifactId>amap-csv</artifactId>
<version>3.2.0</version>
</dependency>

N/A

Sin recursos disponibles.

Configuración

Creación de servicio CSV para las operaciones de cajetínes

ServicioCSVInterface servicioCajetin = ServicioCSVFactory.getServicioCajetin();

Creación de servicio CSV para las operaciones de codificar/decodificar

ServicioCodificaCSVInterface servicioPDFCSV = ServicioCSVFactory.getServicioCodificacion(clave, diccionario);
ServicioCodificaCSVInterface servicioPDFCSV = ServicioCSVFactory.getServicioCodificacion(diccionario, propiedades);

Configuración de la factoría de servicios para generar InfoReferenciaDocumental

String urlBaseReferencia = "http://aplicacioneswebdes.intranet.gobcantabria.es/verificacsv";
String app = "estafeta";
String claveEncriptacion;  

ServicioReferenciaDocumentalInterface servicioGenerador;
servicioGenerador = ServiceReferenciaDocumentalFactory.getServicioGenerador(urlBaseReferencia, app, claveEncriptacion);

Configuración de la factoría de servicios para obtener DocumentoReferenciaDocumental

String claveEncriptacion;

Map<String,String> datosAlfresco = new HashMap<>();
datosAlfresco.put("sistemas.app.amap.alfresco.<APP>.usuario", usuario);
datosAlfresco.put("sistemas.app.amap.alfresco.<APP>.password", password);
datosAlfresco.put("sistemas.app.amap.alfresco.<APP>.repositorio", repositorio);

InfoServicioGestorDocumental inforServicioGestorDocumental = new InfoServicioGestorDocumental ();
inforServicioGestorDocumental.setUsuarioProxy(idaplicacion);
inforServicioGestorDocumental.setUsuarioAuditoria(usuarioAuditoria);
inforServicioGestorDocumental.setUrlServicioGestordocumental(cmisUrl);
inforServicioGestorDocumental.setUrlServicioAuditoria(auditoriaUrl);
inforServicioGestorDocumental.setImplementacionServicioGestorDocumental(alfrescoImplementacion);
inforServicioGestorDocumental.setImplementacionServicioAuditoria(auditoriaImplementacion); 

ServicioReferenciaDocumentalInterface servicioDescifrado;
servicioDescifrado = ServiceReferenciaDocumentalFactory.getServicioDescifrado(claveEncriptacion, datosAlfresco, 
                                                                                          inforServicioGestorDocumental);

El servicio concreto a usar se definirá a partir de un fichero de properties junto con el resto de los parámetros:

KeyDescripciónEjemplo
sistemas.app.amap.alfresco.usuarioUsuario necesario para autenticarse en el gestor documentalg_sidgdit
sistemas.app.amap.alfresco.passwordPassword necesaria para autenticarse en el gestor documental*
sistemas.app.amap.alfresco.repositorioRepositorio del gestor documental con el que se va a trabajarsidgdit
sistemas.app.amap.alfresco.usuarioAuditoriaUsuario necesario para realizar la auditoría de el gestor documental. Puramente informativo. La gestión de este usuario se realiza desde la aplicación consumidora del serviciog_sidgdit
sistemas.app.proxy.idaplicacionUsuario del Proxy de servicios corporativo. De no informar de este usuario no se realizará la autorización (Basic Authorization)sidgdit
sistemas.global.amap.alfresco.cmis.urlEndpoint del servicio web de Alfresco.http://*****/alfresco
sistemas.app.amap.alfresco.implementacionImplementación del gestor documental a usar. Existen tres: cmis, alfresco y mock, el uso de la implementación "alfresco" está obsoleta y no debe utilizarse.cmis
sistemas.global.amap.auditoria.urlEndpoint del servicio web de auditoria. Necesaria cuando se emplee la implementación de CMIS.http://******/proxyws/services/AuditoriaWS
sistemas.app.amap.auditoria.implementacionImplementación del servicio web de auditoria. Al igual que ocurre con el parámetro "urlServicioAuditoria", necesaria cuando se emplee la implementación de CMIS.cxf
sistemas.global.amap.firma.urlEndpoint del servicio web de firma.http://*******/integraciongcnet/services
sistemas.global.amap.csv.claveencriptacionClave de encriptación.<clave_encriptación>
sistemas.global.amap.csv.educacion.claveencriptacionClave de encriptación.<clave_encriptación>
sistemas.global.amap.repositorioReferencia.claveencriptacionClave necesaria para encriptar y desencriptar*

Los valores de las propieades aquí mostrados son meramente ilustrativos. En los entornos de desarrollo / preproducción y producción los valores de las variables han de ser externalizados tal y como se especifica en el documento Definición de acceso a propiedades de sistema

Ejemplo de contenido del fichero de propiedades:

sistemas.app.amap.alfresco.password=*****
sistemas.app.amap.alfresco.usuarioAuditoria=PROXYWS
#Necesario en caso de entrar por ProxyWS
sistemas.app.proxy.idaplicacion=sidgdit
sistemas.app.amap.alfresco.usuario=g_sidgdit
sistemas.app.amap.alfresco.repositorio=sidgdit
sistemas.global.amap.alfresco.cmis.url=http://*****/alfresco
sistemas.app.amap.alfresco.implementacion=cmis
sistemas.global.amap.auditoria.url=http://*****/proxyws/services/AuditoriaWS
sistemas.app.amap.auditoria.implementacion=cxf
sistemas.global.amap.firma.url=http://*******/integraciongcnet/services

Diccionario de datos

El diccionario define las aplicaciones existentes y compatibles con el componente CSV y, por tanto, se ha de actualizar con aquellas nuevas aplicaciones que se incorporen al sistema.

Para ello existe una clase DiccionarioProperties que implementa el interface DiccionarioInterface encargada de obtener el par "aplicación - traducción" de un fichero properties. El sistema se encarga automáticamente, en la inicialización, de crear los tablas de conversión en ambos sentidos.

El fichero "properties" con el par "aplicación - código" deberá llamarse amapcsv_diccionario.properties y estar cargado en la carpeta "comunes" dentro del "ruta_data".

A continuación, se muestra un snippet de ejemplo del fichero amapcsv_diccionario.properties:

A=PORTAFIRMAS_CORP
B=REC
C=COMPULSA
D=SIA
E=scsp
F=TREWA
G=SOGI
H=GICAS
I=SIACAN
J=SOLFORMASCE
K=PAC2015-20
L=FAECA
M=REGISTRO
N=EBRO
O=AYTOSTRAMITACION
P=REGENTFOR
Q=PUNTAL

A continuación, se configura la ruta del fichero amapcsv_diccionario.properties y se carga la clase DiccionarioProperties:

File fileProperties = new File(MessageResourceBean.RUTA_DATA+"/comunes/amapcsv_diccionario.properties");
DiccionarioProperties diccionarioProperties= new DiccionarioProperties(fileProperties);


public DiccionarioProperties(File fileProperties) {
  if (config == null) {
   LOG.info("Cargando diccionario.properties...");
   String nombreFicheroProperties = fileProperties.getAbsolutePath();
   loadDiccionario(nombreFicheroProperties);
  }
 }

MODELOS CAJETIN CSV ESTANDAR

Cajetín completo.

 Descargar

Cajetin por defecto vertical
Cajetin por defecto horizontal

Si el número de firmantes es superior a tres, de manera automática se agregará al documento un anexo con la información de los firmantes.

Documento con anexo firmantes

Descargar

Cajetin por defecto con anexo vertical
Cajetin por defecto con anexo horizontal
Anexo de firmantes

El código CSV y la url de verificación son de caracter obligatorio. El resto de elementos son de caracter opciónal.

Los firmantes, los datos de registro, la validez y el identificador ENI solo se mostrarán si son informados.

El paginado, el código Qr y el código csv en la url de verificación están activados por defecto, pero pueden ser ocultados indicándolo explícitamente en los datos del cajetín.

Nombreamap-csv
Identificadoramap-csv
Grupoes.gobcantabria.amap.utilidades
Versión3.2.0
Licencia
DesarrolladorGuadaltel / Gobierno de Cantabria
Descripción

Utilidad para la generación de códigos seguros de verificación en base al nombre de la aplicación y al uuid del documento generado. 

Documentaciónamap-csv (JavaDoc)
Binarioamap-csv (Jar)

Sin particularidades. Seguir las recomendaciones del fabricante.

CAMBIOS IMPORTANTES EN VERSIÓN 3.0.0

  • Desaparecen los servicios de creación de documentos "crearDocumento(...)" 
  • Los servicios para generación de informes de firma "generarInformeFirma(...)" no recaban información externa (gestor documental, firma, etc). Se limitan a pintar el cajetín de CSV sobre un documento con los valores aportados para él. 

En el componente amap-administracion-electronica se podrán encontrar los servicios que cubran las funcionalidades eliminadas.

En los ejemplos se utiliza la variable desKey como parámetro y como se especifica en la definición de acceso a propiedades de sistema esta variable deberá tomar el valor de las propiedades del sistema:

sistemas.global.amap.csv.claveencriptacion  
sistemas.global.amap.csv.educacion.claveencriptacion  

Para pruebas internas podrá utilizarse el valor "Constantes.TEST_DES_KEY" definido en el componente.

Codificación/Decodificación - Algoritmo corto (Recomendado)

 

El CSV generado por el primer algoritmo es de 76 caracteres. Utilizando el segundo algoritmo es posible obtener un CSV de 38  caracteres( a partir de la versión 1.4.0 del componente), lo que facilita su introducción manual en caso de que sea necesario.

A diferencia del anterior proceso de codificación/decodificación (algoritmo estándar), en este caso, necesitaremos de la existencia de
un diccionario de aplicaciones para que se pueda realizar la búsqueda de la correspondencia entre el nombre de la aplicación y el
prefijo correspondiente, que será el que junto con el identificador del documento en Alfresco, se codificará para formar el código
CSV. En el apartado de configuración, se detalla más sobre la creación de este diccionario de aplicaciones.
CodificacionCSV info = new CodificacionCSV();
info.setUuid(uuid);
info.setAplicacionCsv(aplicacion);
ServicioCSVInterface scsv = ServicioCSVFactory.getServicioCodificacion(desKey, diccionario);
String csv = scsv.codifica(doc);
String codCsv = "XXXXXXXXXX";
CodificacionCSV documento = scsv.descodifica(codCsv);

Añadir cajetín estandar


Se añadirá el cajetín CSV estandar al PDF aportado. Para el cual será obligatorio informar el código CSV y la url de verificacsv.

Por defecto todos los cajetines tendrán el logo del gobierno de Cantabria, el código Qr para verificación del documento, y el código csv incluido en la url de verificacsv. Estos datos podrán ser eliminados del informe si así se indica en los datos de configuración (DatosCajetin).


// Documento original
byte[] docOriginal;

//Datos obligatorios
String csv;
String urlVerificaCsv;

// Datos opcionales
List<Firmante> firmantes;
Date fechaCustodia;
DatosRegistro registro;
ValidezDocumentoEnum validez;
String idDocEni;


// Crear datos para cajetín con datos obligatorios
DatosCajetin datosCajetin = new DatosCajetinDefecto(urlVerificaCsv, csv);

//incluir los datos opcionales
datosCajetin.setFechaCustodia(fechaCustodia);
datosCajetin.setFirmantes(firmantes);
datosCajetin.setRegistro(registro);
datosCajetin.setValidez(validez);
datosCajetin.setIdDocEni(idDocEni);


// Añadir cajetín al documento
byte[] documentoConCajetin = servicioCajetin.addCajetin(docOriginal, datosCajetin);

Añadir cajetín portafirmas


Se añadirá el cajetín CSV de portafirmasal PDF aportado. Para el cual será obligatorio informar el código CSV y la url de verificacsv, se agrega también los campos de puesto y motivo de sustitución si fuera necesario.

Por defecto todos los cajetines tendrán el logo del gobierno de Cantabria, el código Qr para verificación del documento, y el código csv incluido en la url de verificacsv. Estos datos podrán ser eliminados del informe si así se indica en los datos de configuración (DatosCajetin).


// Documento original
byte[] docOriginal;

//Datos obligatorios
String csv;
String urlVerificaCsv;

// Datos opcionales
Date fechaCustodia;
DatosRegistro registro;
ValidezDocumentoEnum validez;
String idDocEni;

// Datos opcionales
List<Firmante> firmantes = new ArrayList<>();

Firmante firmante1 = new Firmante();
firmante1.setFirmante("Juan Cámra Español");
firmante1.setPuesto("Cargo realización pruebas gobierno");
firmante1.setMotivo("Motivo por el cual sutituye el cargo 1");
Calendar c = Calendar.getInstance();
c.set(2020, 1, 15, 9, 30); // 15/01/2020 09:30
firmante1.setTimestamp(c.getTime());
firmante1.setOrden(1);

Firmante firmante2 = new Firmante();
firmante2.setFirmante("Nora Gutierrez Alvarez");
firmante2.setPuesto("Analista de sistemas informáticos");
firmante2.setMotivo("Motivo por el cual sutituye el cargo 2Motivo por el cual sutituye el cargo 2");
firmante2.setUnidadOrganizativa("D.G. de organización y tecnología");
Calendar c2 = Calendar.getInstance();
c2.set(2020, 1, 20, 10, 45); // 20/01/2020 10:45
firmante2.setTimestamp(c2.getTime());
firmante2.setOrden(2);

firmantes.add(firmante2);
firmantes.add(firmante1);


// Crear datos para cajetín con datos obligatorios
DatosCajetin datosCajetin = new DatosCajetinDefecto(urlVerificaCsv, csv);

//incluir los datos opcionales
datosCajetin.setFechaCustodia(fechaCustodia);
datosCajetin.setFirmantes(firmantes);
datosCajetin.setRegistro(registro);
datosCajetin.setValidez(validez);
datosCajetin.setIdDocEni(idDocEni);


// Añadir cajetín al documento
byte[] documentoConCajetin = servicioCajetin.addCajetin(docOriginal, datosCajetin);

Añadir cajetín personalizado

 

Se añadirá el cajetín personalizado al PDF aportado.

Para este servicio es necesario una plantilla con cajetín personalizado generada por JasperReports. Aportanto el archivo compilado ".jasper" a fusionar con el documento.


// Plantilla cajetin personalizado
InputStream plantilla = new FileInputStream(new File("xxxx.jasper"));

// Mapa de datos para campos de la plantilla
Map<String, Object> datosJasper = new HashMap<String, Object>();
datosJasper.put("fieldJasperName", value);

// Crear datos para cajetín
DatosCajetin datosCajetinPersonalizado = new DatosCajetinPersonalizado(plantilla, datosJasper);

// Documento original
byte[] docOriginal;


// Añadir cajetín al documento
byte[] documentoConCajetin = servicioCajetin.addCajetin(docOriginal, datosCajetinPersonalizado);

Generar Referencia Documental

Se generará InfoReferenciaDocumetal  que contendrá el código de referencia y la url.

long fechaCreacion;
String uuid;
String aplicacion;
String descripcion;
String tipoDocumento;
String identificadorAppReferencia;
DatosReferenciaDocumental datosReferenciaDocumental = DatosReferenciaDocumentalFactory.create(
                                  aplicacion, uuid, fechaCreacion, descripcion, tipoDocumento, identificadorAppReferencia);

InfoReferenciaDocumental infoReferenciaDocumental = servicioGenerador.getInfoReferenciaDocumental(datosReferenciaDocumental);

normalizar/desnormalizar

El método normalizar tomará un String en Base64 como entrada y devolverá el String modificado en Base64 adaptado a las Urls.
Para el método denormalizar se hará el paso inverso.

//Normalizar
String var1 = "A0600NfnHQEfCL5pLQJAaRnjC/QjJLYdAU3n8j";
String var2 = "CumRAI9b8YN+QQceli2PJVzJLYdAU3n8j";
String var3 = "BRmH9qYbQb4zzE2ZZnqskQ==";
servicio.normalizarParaURL(var1);//A0600NfnHQEfCL5pLQJAaRnjC_QjJLYdAU3n8j
servicio.normalizarParaURL(var2);//CumRAI9b8YN-QQceli2PJVzJLYdAU3n8j
servicio.normalizarParaURL(var3);//BRmH9qYbQb4zzE2ZZnqskQ

//Desnormalizar
String var1 = "A0600NfnHQEfCL5pLQJAaRnjC_QjJLYdAU3n8j";
String var2 = "CumRAI9b8YN-QQceli2PJVzJLYdAU3n8j";
String var3 = "BRmH9qYbQb4zzE2ZZnqskQ";
servicio.desnormalizarParaURL(var1);//A0600NfnHQEfCL5pLQJAaRnjC/QjJLYdAU3n8j==
servicio.desnormalizarParaURL(var2);//CumRAI9b8YN+QQceli2PJVzJLYdAU3n8j===
servicio.desnormalizarParaURL(var3);//BRmH9qYbQb4zzE2ZZnqskQ==
© 2014 GOBIERNO DE CANTABRIA - AVISO LEGAL Y PROTECCIÓN DE DATOS