Skip to content

josesamos/comunicaXML

Repository files navigation

comunicaXML: Comunicación masiva en formato XML comunicaXML website

R-CMD-check Codecov test coverage

El objetivo de comunicaXML es facilitar la generación del archivo en formato XML para realizar el alta masiva de comunicaciones en el Sistema de Hospedajes.

Instalación

Puedes instalar la versión de desarrollo de comunicaXML desde GitHub con:

# install.packages("pak")
pak::pak("josesamos/comunicaXML")

Ejemplo

Este es un ejemplo que muestra cómo usar la funcionalidad que ofrece comunicaXML. El flujo de trabajo propuesto es el siguiente:

  1. Obtener la plantilla (un archivo en formato .ods o .xlsx).
  2. Completar los datos en la hoja de cálculo.
  3. Validar el archivo: detectar posibles errores
  4. Generar el archivo XML.

Obtener la plantilla

En primer lugar, obtenemos una plantilla de la hoja de cálculo con la que vamos a trabajar. Usamos la función obtener_hoja_calculo() a la que le pasamos el nombre y la ubicación donde queremos se cree el archivo (p.e., c:/datos/mis_datos.xlsx). Para el ejemplo siguiente, para que se pueda ejecutar aquí, le pasamos una ubicación temporal.

library(comunicaXML)

mis_datos <- file.path(tempdir(), "mis_datos.xlsx")

achivo <- obtener_hoja_calculo(mis_datos)

A continuación se muestra el contenido de las hojas del archivo obtenido.

Hoja: comunicacion

comunicacion_pk descripcion
1 Descripción de comunicación

Hoja: establecimiento

tipo nombre direccion direccionComplementaria codigoMunicipio nombreMunicipio codigoPostal pais comunicacion_fk
NA NA NA NA NA NA NA NA 1

Hoja: contrato

referencia fechaContrato fechaEntrada fechaSalida numPersonas numHabitaciones internet tipoPago fechaPago medioPago titular caducidadTarjeta comunicacion_fk
NA NA NA NA NA NA NA NA NA NA NA NA 1

Hoja: persona

rol nombre apellido1 apellido2 tipoDocumento numeroDocumento fechaNacimiento nacionalidad sexo direccion direccionComplementaria codigoMunicipio nombreMunicipio codigoPostal pais telefono telefono2 correo comunicacion_fk
TI NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1

Las hojas están relacionadas mediante los campos con los sufijos _pk y _fk. Hemos de procurar mantener esas relaciones al añadir nueva filas.

Completar los datos

Completamos las hojas de la plantilla con nuestros datos. A continuación se muestran unos datos de ejemplo.

Hoja: comunicacion

comunicacion_pk descripcion
1 Descripción de comunicación

Hoja: establecimiento

tipo nombre direccion direccionComplementaria codigoMunicipio nombreMunicipio codigoPostal pais comunicacion_fk
PARADOR El Parador Calle del Parador nº 3 18003 NA 18003 ESP 1

Hoja: contrato

referencia fechaContrato fechaEntrada fechaSalida numPersonas numHabitaciones internet tipoPago fechaPago medioPago titular caducidadTarjeta comunicacion_fk
X123ABC 2025-02-20 2025-02-21T00:00:00 2025-02-23T00:00:00 2 1 true TARJT 2025-02-20 Tarjeta Nombre Apellido1 Apellido2 01/2029 1

Hoja: persona

rol nombre apellido1 apellido2 tipoDocumento numeroDocumento fechaNacimiento nacionalidad sexo direccion direccionComplementaria codigoMunicipio nombreMunicipio codigoPostal pais telefono telefono2 correo comunicacion_fk
TI Nombre1 Apellido11 Apellido21 NIF 11111111H 1980-01-01 ESP H Dirección 1 Complemento 1 18001 NA 18001 ESP 111111111 211111111 correo1@correo.es 1
VI Nombre2 Apellido12 Apellido22 NIF 22222222J 1980-01-02 ESP M Dirección 2 NA 18002 NA 18002 ESP 222222222 NA correo2@correo.es 1
VI Nombre3 Apellido13 Apellido23 NIF 33333333P 1980-01-03 ESP O Dirección 3 Complemento 3 18003 NA 18003 ESP 333333333 233333333 correo3@correo.es 1
VI Nombre4 Apellido14 Apellido24 NIF 44444444A 1980-01-04 ESP NA Dirección 4 NA 18004 NA 18004 ESP 444444444 NA correo4@correo.es 1

Validar el archivo

Podemos validar nuestro archivo mediante la función validar_hoja_calculo() que comprueba las relaciones entre las hojas, los contenidos de los campos en función de las restricciones de formato y dependencias que se definen en la documentación del Sistema de Hospedajes.

validar_hoja_calculo(achivo)
#> [1] TRUE

Para facilitar la corrección de errores, se muestran avisos de los problemas detectados. En este caso, no hay ningún problema.

Generar el archivo XML

Cuando consideremos que el archivo está correcto, podemos generar el archivo XML mediante la función generar_xml(). Indicamos el nombre del archivo de nuestra hoja de cálculo y el nombre del archivo XML que queremos generar (p.e., c:/datos/resultado.xml), en este caso, para que se pueda ejecutar aquí, le pasamos también una ubicación temporal para el archivo resultado.

resultado_xml <- file.path(tempdir(), "resultado.xml")

archivo_2 <- generar_xml(achivo, resultado_xml)

A continuación se muestra el contenido del archivo que hemos obtenido.

contenido <- readLines(archivo_2, warn = FALSE)

cat("```xml\n", paste(contenido, collapse = "\n"), "\n```", sep = "")
<?xml version="1.0" encoding="UTF-8"?>
<ns2:peticion xmlns:ns2="http://www.neg.hospedajes.mir.es/altaReservaHospedaje">
  <solicitud>
    <comunicacion>
      <!--Descripción de comunicación-->
      <establecimiento>
        <datosEstablecimiento>
          <tipo>PARADOR</tipo>
          <nombre>El Parador</nombre>
          <direccion>
            <direccion>Calle del Parador</direccion>
            <direccionComplementaria>nº 3</direccionComplementaria>
            <codigoMunicipio>18003</codigoMunicipio>
            <codigoPostal>18003</codigoPostal>
            <pais>ESP</pais>
          </direccion>
        </datosEstablecimiento>
      </establecimiento>
      <contrato>
        <referencia>X123ABC</referencia>
        <fechaContrato>2025-02-20</fechaContrato>
        <fechaEntrada>2025-02-21T00:00:00</fechaEntrada>
        <fechaSalida>2025-02-23T00:00:00</fechaSalida>
        <numPersonas>2</numPersonas>
        <numHabitaciones>1</numHabitaciones>
        <internet>true</internet>
        <pago>
          <tipoPago>TARJT</tipoPago>
          <fechaPago>2025-02-20</fechaPago>
          <medioPago>Tarjeta</medioPago>
          <titular>Nombre Apellido1 Apellido2</titular>
          <caducidadTarjeta>01/2029</caducidadTarjeta>
        </pago>
      </contrato>
      <persona>
        <rol>TI</rol>
        <nombre>Nombre1</nombre>
        <apellido1>Apellido11</apellido1>
        <apellido2>Apellido21</apellido2>
        <tipoDocumento>NIF</tipoDocumento>
        <numeroDocumento>11111111H</numeroDocumento>
        <fechaNacimiento>1980-01-01</fechaNacimiento>
        <nacionalidad>ESP</nacionalidad>
        <sexo>H</sexo>
        <direccion>
          <direccion>Dirección 1</direccion>
          <direccionComplementaria>Complemento 1</direccionComplementaria>
          <codigoMunicipio>18001</codigoMunicipio>
          <codigoPostal>18001</codigoPostal>
          <pais>ESP</pais>
        </direccion>
        <telefono>111111111</telefono>
        <telefono2>211111111</telefono2>
        <correo>correo1@correo.es</correo>
      </persona>
      <persona>
        <rol>VI</rol>
        <nombre>Nombre2</nombre>
        <apellido1>Apellido12</apellido1>
        <apellido2>Apellido22</apellido2>
        <tipoDocumento>NIF</tipoDocumento>
        <numeroDocumento>22222222J</numeroDocumento>
        <fechaNacimiento>1980-01-02</fechaNacimiento>
        <nacionalidad>ESP</nacionalidad>
        <sexo>M</sexo>
        <direccion>
          <direccion>Dirección 2</direccion>
          <codigoMunicipio>18002</codigoMunicipio>
          <codigoPostal>18002</codigoPostal>
          <pais>ESP</pais>
        </direccion>
        <telefono>222222222</telefono>
        <correo>correo2@correo.es</correo>
      </persona>
      <persona>
        <rol>VI</rol>
        <nombre>Nombre3</nombre>
        <apellido1>Apellido13</apellido1>
        <apellido2>Apellido23</apellido2>
        <tipoDocumento>NIF</tipoDocumento>
        <numeroDocumento>33333333P</numeroDocumento>
        <fechaNacimiento>1980-01-03</fechaNacimiento>
        <nacionalidad>ESP</nacionalidad>
        <sexo>O</sexo>
        <direccion>
          <direccion>Dirección 3</direccion>
          <direccionComplementaria>Complemento 3</direccionComplementaria>
          <codigoMunicipio>18003</codigoMunicipio>
          <codigoPostal>18003</codigoPostal>
          <pais>ESP</pais>
        </direccion>
        <telefono>333333333</telefono>
        <telefono2>233333333</telefono2>
        <correo>correo3@correo.es</correo>
      </persona>
      <persona>
        <rol>VI</rol>
        <nombre>Nombre4</nombre>
        <apellido1>Apellido14</apellido1>
        <apellido2>Apellido24</apellido2>
        <tipoDocumento>NIF</tipoDocumento>
        <numeroDocumento>44444444A</numeroDocumento>
        <fechaNacimiento>1980-01-04</fechaNacimiento>
        <nacionalidad>ESP</nacionalidad>
        <direccion>
          <direccion>Dirección 4</direccion>
          <codigoMunicipio>18004</codigoMunicipio>
          <codigoPostal>18004</codigoPostal>
          <pais>ESP</pais>
        </direccion>
        <telefono>444444444</telefono>
        <correo>correo4@correo.es</correo>
      </persona>
    </comunicacion>
  </solicitud>
</ns2:peticion>

Este es el archivo que podemos subir al sistema para realizar el alta masiva de comunicaciones.

Flujo de trabajo completo

A continuación se muestra el flujo de trabajo completo, indicando los archivos en la ubicación que deseemos.

library(comunicaXML)

achivo <- obtener_hoja_calculo("c:/datos/mis_datos.xlsx")

# Editar el archivo y guardar los datos.

validar_hoja_calculo(achivo)

generar_xml(achivo, "c:/datos/resultado.xml")

About

Comunicación masiva en formato XML

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published