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.
Puedes instalar la versión de desarrollo de comunicaXML desde
GitHub con:
# install.packages("pak")
pak::pak("josesamos/comunicaXML")Este es un ejemplo que muestra cómo usar la funcionalidad que ofrece
comunicaXML. El flujo de trabajo propuesto es el siguiente:
- Obtener la plantilla (un archivo en formato .ods o .xlsx).
- Completar los datos en la hoja de cálculo.
- Validar el archivo: detectar posibles errores
- Generar el archivo XML.
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.
| comunicacion_pk | descripcion |
|---|---|
| 1 | Descripción de comunicación |
| tipo | nombre | direccion | direccionComplementaria | codigoMunicipio | nombreMunicipio | codigoPostal | pais | comunicacion_fk |
|---|---|---|---|---|---|---|---|---|
| NA | NA | NA | NA | NA | NA | NA | NA | 1 |
| 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 |
| 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.
Completamos las hojas de la plantilla con nuestros datos. A continuación se muestran unos datos de ejemplo.
| comunicacion_pk | descripcion |
|---|---|
| 1 | Descripción de comunicación |
| tipo | nombre | direccion | direccionComplementaria | codigoMunicipio | nombreMunicipio | codigoPostal | pais | comunicacion_fk |
|---|---|---|---|---|---|---|---|---|
| PARADOR | El Parador | Calle del Parador | nº 3 | 18003 | NA | 18003 | ESP | 1 |
| 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 |
| 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 |
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] TRUEPara facilitar la corrección de errores, se muestran avisos de los problemas detectados. En este caso, no hay ningún problema.
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.
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")