Skip to content

[16.0][IMP] pms_l10n_es: INE occupancy surveys for IRIA: fix hotel XML and add tourist apartments (EOAP) - #233

Open
davidpachecop wants to merge 9 commits into
HOTFIX-16-pmsfrom
david/ine-iria-surveys
Open

[16.0][IMP] pms_l10n_es: INE occupancy surveys for IRIA: fix hotel XML and add tourist apartments (EOAP)#233
davidpachecop wants to merge 9 commits into
HOTFIX-16-pmsfrom
david/ine-iria-surveys

Conversation

@davidpachecop

@davidpachecop davidpachecop commented Aug 4, 2026

Copy link
Copy Markdown

Contexto (resumen para revisión)

El INE apagó ARCE y la subida de cuestionarios XML pasó a IRIA. Un cliente de apartamentos no conseguía subir su fichero: el portal lo rechazaba en la línea 1 ("Cannot find the declaration of element 'ENCUESTA'"). El motivo es que su establecimiento tiene asignada la encuesta de apartamentos turísticos (EOAP), un cuestionario distinto del hotelero, que Roomdoo no generaba: le estábamos dando el guión de hoteles.

Con las claves IRIA que nos facilitó el cliente generamos su cuestionario EOAP de julio con el enfoque de esta PR y el INE lo aceptó y registró (acuse de recibo). Después consultamos al equipo de IRIA del INE por correo y nos han confirmado por escrito los criterios que aplica esta rama (detalle en los comentarios de la PR).

Qué hace esta PR

1. Nueva encuesta de apartamentos turísticos (EOAP)

  • survey_type en pms.ine.tourism.type.category (+ semilla de las categorías de apartamentos, 0–4 llaves). El wizard elige el guión según la categoría INE de la propiedad: sin configuración extra ni campos nuevos que decidir.
  • Tipología de apartamento en pms.room (estudio / 2-4 pax / 4-6 pax / otros), con inferencia por capacidad si no se establece.
  • Datos del informante en pms.property (bloque INFORMANTE, obligatorio en EOAP).
  • Builder EOAP completo: CABECERA reducida, CABECERA_APARTAMENTOS (llaves), INFORMANTE, ALOJAMIENTO (bloque compartido con la encuesta hotelera, refactorizado a helper común), CAPACIDAD y OCUPACION por tipología, PRECIOS por tipología y PERSONAL_OCUPADO.
  • Simplificación de tarifas: toda la ocupación de cada tipología se declara como tarifa normal con su ADR (PCTN_TARIFA_NORMAL = 100). Cumple las validaciones de contenido del INE y está aceptada en un envío real.

2. Correcciones en la encuesta hotelera (EOH)

Sin cambiar el formato que los establecimientos ya suben con éxito:

  • Decimales y porcentajes exactos: todos los decimales salen con 2 posiciones y los porcentajes se normalizan en centésimas enteras, de modo que la suma impresa es exactamente 100.00 por construcción. Es el origen de tickets recurrentes (ficheros rechazados por porcentajes que sumaban más de 100.00 o por decimales largos, con cuatro commits históricos parcheándolo en float) y ahora es más importante que antes, porque IRIA ya no permite editar el fichero en el portal como hacía ARCE.
  • UTF-8 real: el fichero declaraba ISO-8859-1 mientras codificaba UTF-8.
  • Literal de provincia del INE (res.country.state.ine_tourism_province_name, con semilla para las 52 provincias tomada del anexo oficial): la cabecera espera el literal de la especificación (máx. 25 caracteres) y varios nombres de provincia de Odoo lo superan, por ejemplo "Illes Balears (Islas Baleares)" (30) → "BALEARES".
  • DIAS_ABIERTO_MES_REFERENCIA con dos dígitos y URL omitida cuando la propiedad no tiene web.
  • Datos de referencia alineados con los anexos que publica el INE (incluida la pareja tipo/categoría que faltaba).

3. Espacio de nombres: configurable, sin cambiar el comportamiento actual

Existen dos variantes de cada esquema: la que publica el INE, sin espacio de nombres, y la que la aplicación de IRIA genera para el cuestionario, con espacio de nombres. El INE nos ha confirmado que la de referencia es la publicada y que a la generada por la aplicación "no debería hacérsele caso".

Los ficheros se generan por tanto según el esquema publicado, es decir igual que hasta ahora, y el espacio de nombres puede activarse por encuesta con un parámetro de configuración (pms_l10n_es.ine_xml_namespace_hotel / _apartments) para el cuestionario que exija la variante cualificada. Así el fichero hotelero queda idéntico al que la flota sube correctamente, y conservamos la vía rápida si algún cuestionario pide la otra variante.

4. Tests (27 en total, 9 nuevos)

  • Validación de los ficheros generados, hotelero y de apartamentos, contra los esquemas publicados por el INE y, con el parámetro activado, contra los esquemas versionados que entrega IRIA (fixtures en tests/fixtures/).
  • Suma de porcentajes impresa == 100.00 exacto (Decimal) y todos los decimales con dos dígitos.
  • Tipologías de apartamentos (unidades y plazas) y obligatoriedad de los datos del informante.
  • Suite completa en local: 0 failed / 0 errors de 27 tests.

Notas de despliegue

  • Requiere -u pms_l10n_es (campos nuevos y datos CSV).
  • Los tenants de apartamentos necesitan un cambio de configuración para que salga el guión correcto: asignarles una categoría INE de "Apartamentos turísticos" (llaves) y rellenar el informante. Con la categoría hotelera actual seguirían generando el fichero de hoteles.
  • Conviene revisar la tipología de las habitaciones en esos tenants; la inferencia por capacidad cubre el caso típico (2 pax estudio, hasta 4 el de 2-4, hasta 6 el de 4-6).
  • Los hoteles no necesitan configuración nueva.

Fuera del alcance, ya resuelto

  • Turismo rural, campings y albergues: el INE confirma que no hay canal XML (en rural se permitió hace años en ARCE, nadie lo usó, y ahora el cuestionario es mensual). No queda encuesta pendiente de desarrollar.
  • Presentación automatizada: IRIA tiene servicio web (iriaEngine/v2_0_0/SolicitudEncuestaWS) y el INE confirma que no hace falta alta previa, que las claves del cuestionario son el permiso. Sería una fase posterior: presentar el cuestionario desde el propio PMS en lugar de descargar el fichero.

… tourist apartments (EOAP)

The INE replaced the ARCE platform with IRIA. IRIA questionnaire schemas
are namespace-qualified, so the XML files generated so far are rejected
at upload time (XSD error on line 1: cannot find the declaration of the
root element). IRIA also removed the in-portal editing that ARCE allowed,
so the generated file must be exact.

Hotel survey (EOH) fixes:
- Qualify the root element with the IRIA namespace, configurable through
  the ir.config_parameter pms_l10n_es.ine_xml_namespace_hotel.
- Declare and encode the file as UTF-8 (it declared ISO-8859-1 while
  encoding UTF-8 bytes).
- Print DIAS_ABIERTO_MES_REFERENCIA zero-padded to 2 digits and omit the
  URL element when the property has no website (both rejected by the
  IRIA schema).
- Emit every decimal with exactly 2 digits and normalize the occupancy
  percentages in integer hundredths so the printed values add up to
  exactly 100.00: float artifacts have been a recurrent source of files
  rejected by the INE content validations.
- New INE province literal on res.country.state: the survey header
  expects the province literal of the INE specification (max. 25 chars)
  and several Odoo state names exceed it.

New tourist apartments survey (EOAP):
- New survey_type on the INE categories and seed data for the tourist
  apartments categories (0-4 keys). The wizard picks the questionnaire
  format from the property INE category.
- New apartment typology on rooms (studio / 2-4 pax / 4-6 pax / other),
  inferred from the room capacity when not set.
- New informant fields on the property (required block in EOAP).
- New XML builder with the EOAP blocks (CABECERA_APARTAMENTOS,
  INFORMANTE, CAPACIDAD, OCUPACION and PRECIOS per typology), sharing
  the guest movements and staff blocks with the hotel survey. The whole
  occupancy of each typology is reported under the normal rate with its
  ADR, which satisfies the INE content validations and has been accepted
  by the INE in a real submission.

Tests validate both generated files against the current IRIA schemas and
the exactness of the printed decimals and percentage sums.
…nexes

The INE publishes the survey annexes as XML files. Checking the seed data
against them:
- The province literal expected for province 48 is VIZCAKAIA (as published
  in the province annex), not VIZCAYA.
- The hotel type/category table includes one pair that was missing.
@davidpachecop

Copy link
Copy Markdown
Author

Actualización: respuesta del INE (5-ago) y datos oficiales

El INE (equipo de IRIA) ha contestado a nuestras consultas y ha publicado los enlaces permanentes de los esquemas y anexos de cada encuesta. Resumen de lo que confirma y de lo que ha cambiado en la rama:

Confirmado por el INE:

  • El canal XML existe solo para Hoteles y Apartamentos. Turismo rural queda descartado (se permitió en ARCE hace años, nadie lo usó, y ahora el cuestionario es mensual, no día a día). Campings y albergues, tampoco previsto. → la fase de turismo rural se cierra: no hay trabajo pendiente ahí.
  • El fichero debe contener todos los días del mes, aunque las claves sean de un cuestionario quincenal. Es la regla que ya aplicamos.
  • Existe servicio web de presentación en IRIA (iriaEngine/v2_0_0/SolicitudEncuestaWS), con número de orden + código de control + XML en base64. Candidato claro para una fase posterior: presentar el cuestionario desde el propio PMS.
  • Nos ofrecen claves de prueba ficticias, ya solicitadas para Hoteles y Apartamentos: con ellas podremos validar el fichero hotelero de punta a punta antes de que ningún establecimiento lo presente.

Cambios en la rama a partir de sus anexos oficiales (commit "align INE reference data with the published INE annexes"):

  • El literal de la provincia 48 es VIZCAKAIA, tal como lo publica el INE en su anexo de provincias (parece errata suya, pero es el valor que esperan; se lo hemos hecho notar). Esto resuelve el punto 2 de las decisiones abiertas.
  • Añadida la pareja tipo/categoría que faltaba (Hostales especiales / HSG).
  • Verificado contra sus anexos: nuestros 52 literales de provincia y las 52 parejas tipo/categoría son válidos, y los 52 códigos NUTS III que usamos existen en su tabla.

Matiz importante sobre el espacio de nombres (decisión 1): el INE indica que "el esquema es exactamente igual que el de ARCE". Estructuralmente es cierto (mismos 65 elementos en el mismo orden), pero hay dos variantes del esquema y se excluyen mutuamente:

  • el publicado en su web (SchemaHoteles.xsd, schemaTurismoApartamentos.xsd) no declara targetNamespace;
  • el que IRIA entrega al informante desde su cuestionario ("Descargar esquema", XSD_HOT_2024_IDC_9.2 / XSD_APA_2024_IDC_9.7) , con elementFormDefault="qualified".

Comprobado: el fichero que el INE nos aceptó y registró lleva espacio de nombres y no valida contra el esquema publicado; y ese mismo fichero sin espacio de nombres no valida contra el del cuestionario. Es decir, la carga por el portal valida contra el esquema versionado (con espacio de nombres), que es lo que hace esta rama. Además, la documentación del servicio web apunta al esquema publicado (sin espacio de nombres), así que puede haber divergencia entre canales: otro motivo para mantener el espacio de nombres como parámetro configurable en lugar de fijarlo en el código. Pendiente de que el INE confirme ambos puntos (preguntado).

The INE confirmed that the reference schema of each survey is the one they
publish, which declares no target namespace, and not the one the IRIA
application generates for the questionnaire. Both variants have been
accepted on upload so far (hotel files without namespace, an apartments
file with it), so the files are built after the published schema and the
qualified variant can be enabled per survey with a config parameter for
the questionnaires that need it.

This keeps the hotel file byte-compatible with what the establishments
have been uploading successfully.
@davidpachecop

Copy link
Copy Markdown
Author

Corrección importante: el fichero hotelero NO estaba roto

En el comentario anterior daba por probable que los ficheros hoteleros estuvieran siendo rechazados en IRIA por no declarar el espacio de nombres. Era una inferencia y es incorrecta. Lo aclaran dos cosas de hoy:

  1. El INE, por escrito: "El ESQUEMA al que deben hacer caso es al que le hemos enviado nosotros con todos los enlaces. El otro es el que genera automáticamente la aplicación y no debería hacerse caso. Así que lo deben subir como el que les ha funcionado." Es decir, el esquema de referencia es el publicado, que no lleva espacio de nombres.

  2. Evidencia de la flota: revisando el historial de soporte, en marzo de 2026 (ya con IRIA) un establecimiento hotelero subió su fichero generado por Roomdoo y confirmó que "ya lo hemos subido correctamente" después de corregirle los decimales. O sea, el fichero sin espacio de nombres pasa la validación de esquema; los rechazos de esos meses eran de contenido (porcentajes y decimales), que es justo lo que arregla esta rama.

El rechazo que originó todo esto se explica entonces solo por el guión equivocado: se subía el fichero de hoteles a un cuestionario de apartamentos, y ahí ENCUESTA no existe como elemento raíz.

Cambio aplicado (commit "build the INE files after the published schema"): el espacio de nombres pasa a estar vacío por defecto en las dos encuestas, de modo que el fichero hotelero queda idéntico al que la flota sube con éxito, y la variante cualificada se puede activar por encuesta con un parámetro si algún cuestionario la exigiera. Los tests cubren ahora las dos variantes: por defecto validan contra los esquemas publicados por el INE y, con el parámetro puesto, contra los versionados que entrega IRIA. 27 tests, 0 fallos.

Otras confirmaciones del INE

  • Servicio web sin trámite de alta: "tienen que hacer la llamada como se indica en la documentación sin permisos adicionales. Las claves son 'el permiso'". Queda despejada la fase de presentación automatizada desde el PMS.
  • Turismo rural, campings y albergues: sin canal XML, no hay nada que desarrollar.
  • Nos ofrecen claves ficticias de prueba, ya solicitadas para hoteles y apartamentos. Con ellas validaremos los dos cuestionarios por las dos vías antes de dar por cerrado el tema; si de esa prueba saliera que algún cuestionario exige el espacio de nombres, se activa con el parámetro sin tocar código.

The INE questionnaire is also downloaded from the guest app through the
REST API, so the validation messages reach end users: translate the new
error messages, field labels and selections.
@davidpachecop

Copy link
Copy Markdown
Author

Traducciones al castellano de los mensajes nuevos

El cuestionario también se descarga desde la app a través de la API REST (GET /ine-report), así que estos mensajes de validación los lee el usuario final, no solo quien entre al backend. Añadidas al es.po las cadenas nuevas: los tres avisos de informante ausente, el del literal de provincia, el de tarifa a cero, y las etiquetas y selecciones de los campos nuevos.

Nota para el revisor: el es.po lo gestiona Weblate. Si preferís que sea Weblate quien las incorpore, este commit se puede descartar sin afectar al resto de la rama.

Sobre el lado de la app: propuesta de no tocar nada

El flag canDownloadIneReport de pms_api_rest (hoy ine_tourism_number AND ine_category_id) no contempla los datos del informante que exige la encuesta de apartamentos, así que una propiedad de apartamentos a medio configurar mostraría el informe y daría error al pulsarlo. Lo valoré y propongo dejarlo como está, por dos razones:

  1. Esos campos no se configuran desde la app (no hay endpoint de escritura de propiedad), así que ocultar el informe no le da al usuario ninguna vía de arreglarlo: solo hace desaparecer una opción sin explicación. En cambio el error dice exactamente qué falta, y con la traducción de este commit lo dice en su idioma.
  2. Meter la condición en la API acopla el despliegue: el flag tendría que leer campos que solo existen tras mergear esta rama.

Es un estado transitorio que solo aparece si se marca una propiedad como apartamentos sin completar el informante, así que encaja mejor en el checklist de configuración que en el gate.

Generating the file of every property with an INE category in the fleet
and checking it against the schema published by the INE and its official
content validations (XML_0..XML_17 of the web service documentation)
surfaced three cases that build a file the INE rejects:

- Properties whose phone has less than 9 digits: the schema requires
  between 9 and 13 characters in TELEFONO_1.
- Periods without guest movements: the schema requires at least one
  RESIDENCIA under ALOJAMIENTO, so an empty block cannot be uploaded.
- A client type reporting a rate with a zero percentage, or the other way
  around: the INE requires both to be consistent, on top of the
  percentages adding up to 100.

The first two now raise a message explaining what to fix instead of
building an invalid file, and the percentages are normalized keeping
their consistency with the rates.

The file must also carry the whole reference month even though the
questionnaire asks for a single week (hotels) or fortnight (apartments),
so a partial period is rejected up front.
@davidpachecop

Copy link
Copy Markdown
Author

Prueba de la flota completa contra las validaciones oficiales, sin gastar claves

El INE nos ha dado claves ficticias de prueba, pero el código de control es de un solo uso (así lo dice la documentación del servicio web: "Sólo es válido para una vez, pues corresponde a un único cuestionario"). Antes de gastar ninguna, hemos hecho la comprobación en frío con datos reales:

  1. Generado el fichero de las 30 propiedades de la flota que tienen categoría INE (24 tenants), en modo lectura y con el código que hay hoy en producción.
  2. Validado cada fichero contra el esquema publicado por el INE y contra la lista oficial de validaciones de contenido XML_0..XML_17, que aparece documentada en la especificación del servicio web y que hemos implementado como verificador.
  3. Repetido la validación aplicando las reglas de esta rama, para comprobar que corrigen lo que aparece.

Lo que ha salido

Rechazos de esquema reales, hoy, en producción:

Caso Propiedades Estado con esta rama
PROVINCIA supera los 25 caracteres 2 Corregido: con el literal del anexo el fichero valida
TELEFONO_1 con menos de 9 caracteres 1 Nuevo aviso explicando qué corregir
ALOJAMIENTO sin ninguna RESIDENCIA (mes sin movimientos) 3 Nuevo aviso explicando qué corregir

Los otros dos son ficheros que hoy se generan sin protestar y que el INE rechazaría, así que esta rama los convierte en un mensaje claro en lugar de un fichero inválido.

Sobre los porcentajes, conviene matizar lo que decía el primer comentario: con el código actual la suma sale exactamente 100.00 en los 21 ficheros que se generan, así que el arreglo de 2024-2025 funciona. Lo de esta rama es endurecerlo (normalización en centésimas enteras, exacta por construcción) y añadir la coherencia entre tarifa y porcentaje por tipo de cliente, que es otra validación oficial (XML_15 y XML_16) y que la normalización podía romper al redondear un grupo pequeño a cero.

Y una regla que no estábamos cumpliendo por diseño: el fichero debe llevar el mes completo aunque el cuestionario pida una sola semana (hoteles) o quincena (apartamentos). El asistente aceptaba cualquier rango, así que quien elegía la semana que le pedía la carta del INE se llevaba un fichero incompleto. Ahora se rechaza el periodo parcial indicando qué fechas seleccionar.

Configuración pendiente en 8 propiedades (no es código): 3 con huéspedes españoles sin provincia, 2 con huéspedes sin país de residencia y 3 con las plazas del INE mal configuradas (una a cero). Hoy ya no pueden generar el fichero; queda como tarea de soporte.

31 tests, 0 fallos.

The order number identifies the establishment in the INE questionnaire
and is fixed, so it is stored in the property and prefilled in the INE
wizard, where it can also be filled in for the first time. The control
code is deliberately not stored: it belongs to a single questionnaire
and is single use.
The establishment used to find out about a rejected file days later, on
the INE portal, with a message naming an XML element. Two changes move
that feedback to the moment the file is generated.

The reference period is now expanded to the natural month of the start
date instead of being rejected when it is not the whole month. A range
reaching into the next month was the worst case: it repeats day numbers
inside a place of residence, and the day is a key in the survey schema,
so the INE answered with a duplicate key error that says nothing to a
receptionist who only picked the wrong end date.

The content validations the INE runs after the schema are now applied to
the built file, and a failure names the day and the figures involved
instead of the XML element. Checked against 97 files generated from two
real fleets: the only two files reported are the two the INE would
reject, both for overnight stays exceeding the seats declared in the
property.

The empty month error now points at the check-in data, which is where
the survey is built from: several establishments with real occupancy and
no completed check-ins would otherwise report an empty month.
@davidpachecop

Copy link
Copy Markdown
Author

Actualizacion 07/08: el fichero se valida antes de entregarlo

Dario, resumen de lo que anade el commit 088e92e sobre lo que ya habias visto.

Por que

Hoy ha entrado un ticket urgente de Beratxa (TR1365131) con dos fallos seguidos del INE en el mismo dia. El segundo es el interesante y ha cambiado una decision de diseno de la PR.

El hotel selecciono del 1 de julio al 1 de agosto, que es la forma natural de "marcar julio" en un selector de rango. El fichero salio con el dia 01 repetido dentro de la misma RESIDENCIA (el 1 de julio y el 1 de agosto), y el dia es una clave en el esquema, asi que el INE lo rechazo con cvc-identity-constraint.4.2.2: Duplicate key value [01] declared for identity constraint "CLAVE_N_DIA". Reproducido en su BD:

Rango pedido Esquema IRIA Residencias con dia duplicado
1 - 31 julio valida 0
1 julio - 1 agosto rechaza 6
1 julio - 7 agosto rechaza 13

El PMS le dejo pedir ese rango y no dijo nada. El hotel se entera por el portal del INE, con un mensaje que nombra un elemento XML.

Que cambia

1. El periodo se expande al mes natural de la fecha inicial. Antes esta rama daba error si el rango no era el mes completo; ahora lo normaliza y punto. Motivos: la app manda dateFrom/dateTo libres, asi que dar error habria convertido un fichero malo en un bloqueo para todos; y el nombre del fichero ya era mensual (INE_07_2026.xml), asi que normalizar es coherente con lo desplegado. El rango que cruza de mes tambien se normaliza: "1 de julio a 1 de agosto" significa julio sin ambiguedad.

2. Las validaciones de contenido del INE se aplican al fichero construido (_ine_check_xml_content): cadena diaria por residencia, dias duplicados, pernoctaciones frente a entradas, habitaciones ocupadas frente a pernoctaciones y plazas, dias abiertos. El error nombra el dia y las cifras en vez del elemento XML:

Day 4: 44 overnight stays exceed the 43 available seats plus 0 extra beds. Check the seats declared in the property.

3. El error de mes vacio apunta a los check-ins. El informe se construye desde los check-ins, no desde las reservas. En la flota hay establecimientos con ocupacion real y cero check-ins completados que declararian un mes vacio (Route 42: 100 reservas y 193 noches vendidas en julio; Alda Borox: 18 reservas; y tres hoteles de Alda igual). Ahora el mensaje lo dice.

Verificacion

  • 23 tests de TestWizardINE en verde en doodba local, incluidos tres nuevos: expansion de un rango parcial, regresion del caso de hoy (rango que cruza de mes -> ningun N_DIA repetido y valida contra el esquema versionado, que es el que lleva la clave) y deteccion de una cadena diaria rota.
  • El validador se ha ejecutado contra 97 ficheros reales generados desde dos flotas (roomdoo01 y Alda). Pasan 95. Los 2 que fallan son exactamente los dos que el INE rechazaria, ambos por pernoctaciones por encima de las plazas declaradas (Alda Corrubedo dia 4: 44 > 43; Alda Galeria Coruna dia 18: 35 > 34). Cero falsos positivos.

Pendiente por mi parte en esta rama

  • Traducciones al espanol de los mensajes nuevos.
  • ine_ready + motivos de bloqueo en pms.property, para que la app pueda pintar un checklist de configuracion en vez de un boton que a veces revienta. Esto revierte la decision que registre el 05/08 de no tocar canDownloadIneReport: entonces la descarte porque el usuario no podia arreglar nada desde la app; si vamos a tocar la UI, el checklist es la respuesta correcta.

Duda para ti, no la decido yo

DIAS_ABIERTO_MES_REFERENCIA se emite siempre como los dias naturales del mes. Para un establecimiento de temporada que abrio a mitad de mes eso es falso y le diluye su propia tasa de ocupacion en la estadistica. Se podria derivar de la disponibilidad, pero cambia el criterio de lo que ya han declarado todos. Lo dejo como esta.

The configuration checks move from the wizard to the property, as
ine_configuration_problems(), and report every missing field at once
instead of only the first one. Two computed fields expose the result,
ine_ready and ine_blocking_reasons, so the interface can list what to
fix instead of offering a download that fails.

The seats check joins them: it used to live in the middle of the file
generation, and it is the most frequent blocker in the fleet, where
establishments have the seats unset while their rooms already offer
capacity.

Spanish translations for the new messages are included, since the app
shows them to the end user through the API. The help texts are left to
Weblate.
The INE settings page now lists what is missing before the occupancy
survey can be built, instead of leaving the operator to find it out when
the download fails.
@davidpachecop

Copy link
Copy Markdown
Author

Estado final de la rama y lo que queda fuera de ella

Dario, con 8f074a1 y 75b1478 doy la rama por cerrada por mi parte. Resumen de los dos commits y, sobre todo, de lo que NO entra aqui y por que, para que no se pierda.

Lo que anaden estos dos commits

Las comprobaciones de configuracion pasan del asistente a la propiedad, como pms.property.ine_configuration_problems(), y devuelven todas las que fallan en vez de solo la primera. Antes el hotel arreglaba un campo, volvia a intentarlo y le salia el siguiente: con 4 campos vacios eran 4 intentos y a menudo 4 tickets.

Dos campos calculados lo exponen: ine_ready y ine_blocking_reasons, y la pagina de ajustes del INE de la propiedad muestra el aviso.

La comprobacion de plazas se une al checklist. Estaba en medio de ine_generate_xml y es el bloqueo mas frecuente de la flota: 23 propiedades en Alda y 1 en roomdoo01 no pueden generar el fichero porque las plazas declaradas estan por debajo de la capacidad que ya ofrecen sus propias habitaciones (16 de ellas directamente a cero). Ahora se ve en la ficha sin tener que intentar la descarga.

Traducciones al espanol de los 17 mensajes nuevos, porque son los que ve el usuario final a traves de la API. Los help los dejo a Weblate, como en el commit de traducciones anterior.

26 tests de TestWizardINE en verde y pre-commit limpio.

Lo que NO entra en esta rama, a proposito

El gate de la app. canDownloadIneReport sigue siendo ine_tourism_number and ine_category_id en pms_api_rest. Lo natural es que pase a ine_ready y que el endpoint devuelva ine_blocking_reasons, para que la app pinte el checklist en vez de un boton que a veces revienta. No lo toco aqui por dos razones: esta en otro repo (roomdoo-modules, y ademas duplicado en pms_api_rest y roomdoo_fastapi), y acoplaria su despliegue a que esta rama estuviera mergeada.

Esto revierte la decision que registre el 05/08 de no tocar canDownloadIneReport. Entonces la descarte porque el usuario no podia arreglar nada desde la app, asi que ocultarle el informe no le daba salida. Ahora que la propiedad sabe enumerar lo que falta, el checklist si le da salida: los campos que puede arreglar el (plazas, personal, telefono) separados de los que configura soporte (numero de registro, categoria INE, tipologia de habitaciones, informante).

El envio por servicio web. IRIA no exige alta: la credencial es el par que viene impreso en la carta del cuestionario, Numero de Orden (11 car., fijo por establecimiento, ya lo guardamos) + Codigo de Control (8 car., de un solo uso, cambia cada cuestionario). Eso pide, como minimo:

  • un modelo no transitorio pms.ine.submission con propiedad, encuesta, periodo, XML enviado, acuse en PDF, estado y respuesta del INE. Sin el, el hotel no tiene justificante y nosotros no tenemos trazabilidad, y el justificante es lo primero que piden en los tickets;
  • cliente de SolicitudEncuestaWS;
  • POST /ine-report/submit en las dos capas;
  • en la UI: selector de mes (no de rango), el Numero de Orden precargado y editable, el Codigo de Control pedido en cada envio y nunca guardado, e historial con descarga del acuse.

Va en PR aparte. Tenemos 4 claves de prueba del INE sin gastar (2 EOH + 2 EOAP). Las subidas de validacion en el portal no consumen el codigo: solo lo consume el envio. El plan es gastar el envio del cartucho #1 de cada encuesta cuando el cliente del WS este escrito y probado contra un fichero ya validado, y dejar el #2 de cada una en recamara.

Y la duda de siempre, que sigue siendo tuya

DIAS_ABIERTO_MES_REFERENCIA se emite como los dias naturales del mes. Para un establecimiento de temporada que abrio a mitad de mes es falso y le diluye su ocupacion en la estadistica oficial. Se podria derivar de la disponibilidad, pero cambia el criterio de lo ya declarado por todos. Lo dejo como esta.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant