# DH Inspección Android · release de campo 0.19.12 ## Candidata vigente - `versionName`: **0.19.12**; `versionCode`: **40**. - API: `https://dhv2.korexlabs.com/api/v3/`; compatible con API 0.29.0-13 / WEB 0.23.0-10. - Antes de cerrar el contenido, el inspector escribe una descripción real de lo actuado. - La descripción se sincroniza antes del bloqueo, también cuando se trabajó sin conexión. - Un acta anterior, ya sellada, conserva el texto originalmente registrado. ## Referencia de 0.19.10 ### Candidata anterior - Fase funcional: **Flujo final de campo · Inspección → Acta → Hallazgos → Firma**. - `versionName`: **0.19.10**. - `versionCode`: **38**. - Application ID release: `com.korexlabs.dhinspeccion`. - Application ID debug/QA: `com.korexlabs.dhinspeccion.debug`. - API: `https://dhv2.korexlabs.com/api/v3/`. - Servidor compatible de esta candidata: **API 0.29.0-8 / WEB 0.23.0-5**. La variante debug es independiente de la app productiva y puede instalarse para QA/presentación sin sobrescribir una instalación release histórica. ### Ajustes 0.19.10 - **Trabajo offline seguro:** Room conserva operaciones pendientes y WorkManager las sincroniza cuando vuelve la red, respetando el orden en que fueron creadas. - La cola offline queda separada por usuario autenticado para impedir que una sesión sincronice trabajo de otra persona en el mismo dispositivo. - Inspecciones, Actas, Inventario, Hallazgos, fotos, representante, manifestación y cierre conservan una identidad de cliente estable para reintentos idempotentes. - Las listas de trabajo, Inventario, Actas, cierres, Hallazgos y estado de firma usan caché local por usuario para poder consultar contexto ya descargado sin conectividad. - Antes de incorporar una foto de Hallazgo se muestra **Revisar fotografía** con **Usar esta foto**, **Volver a tomar** y **Eliminar foto**. - Corrige el cierre que enviaba `uploadMode=ONLINE`; el contrato vigente usa `IMMEDIATE` o `DEFERRED`. - La APK consulta el estado real de la firma reutilizable del Inspector y no afirma que existe cuando todavía no fue configurada. - El Dashboard de Actas prioriza el **PDF real del Acta** y muestra directamente las fotografías de Hallazgos y del Inventario relacionado. - En toda la interfaz activa, la antigua expresión “clasificación técnica” se presenta como **Tipo de instalación** o **Tipo de subinstalación**. - Corrige el cierre de Actas evitando `NaN` en el versionado de LOCKED/SEALED. - El cierre pasa a **Para firmar**; la APK captura sólo la manifestación/firma del acompañante. - La firma del Inspector se guarda una vez en Mi perfil y se copia de forma inmutable al sellar cada Acta. - Elimina la tarjeta duplicada del Acta seleccionada y simplifica la jerarquía visual inspirada en la referencia Figma. - El encabezado de **Mis inspecciones** separa las acciones para que **Salir** nunca se comprima ni se corte en pantallas angostas. - El alta de Hallazgos corrige la captura de versión que podía transformar el número en `NaN` después del INSERT y devolver error 500. - Un Hallazgo admite **múltiples fotografías con GPS**; después de cada captura queda disponible **Agregar otra foto con GPS** y se muestra el contador. ## Procedimiento operativo validado La APK 0.19.10 fija como recorrido principal de campo: 1. **Iniciar Inspección**. Al iniciarla se habilita el circuito de **Actas y Hallazgos**; Inventario no es una acción independiente de la Inspección. 2. **Crear o abrir un Acta**. Puede haber varias Actas dentro de una misma Inspección, pero sólo una puede permanecer en elaboración al mismo tiempo. La urgencia todavía no se define. 3. **Agregar Hallazgos**. Recién desde esta acción se selecciona la Instalación/Subinstalación afectada. 4. Si el elemento ya existe, se lo selecciona desde el Inventario del Área/Yacimiento de la Inspección. 5. Si no existe, se da de alta desde campo sin abandonar el Acta. 6. Un elemento nuevo debe completar **GPS + fotografía** antes de poder recibir Hallazgos. 7. Antes del cierre se identifican, para esa Acta, los datos del **Representante de la empresa** que acompañó el recorrido: nombres y apellidos, DNI, cargo/función y email. Si coincide con el Acta anterior, la APK puede precargarlos, pero deben confirmarse nuevamente. 8. Al terminar el contenido del Acta se elige **Urgente / No urgente** y luego se usa **Cerrar contenido y pasar a firma**. La urgencia pertenece al Acta completa, nunca a cada Hallazgo; desde ese momento el contenido queda inmutable y el estado visible es **Para firmar**. 9. En **Para firmar**, el acompañante de la empresa registra su manifestación: **conformidad**, **disconformidad con motivo obligatorio**, **negativa a firmar con motivo obligatorio** o **ausencia documentada**. La firma del Inspector no se dibuja en la tablet: se guarda una sola vez desde **Mi perfil** del Dashboard y el servidor copia esa firma de forma inmutable a cada Acta al usar **Aplicar mi firma y cerrar Acta**. 10. La Inspección sólo puede cerrarse cuando todas sus Actas no canceladas están firmadas y cerradas. La nomenclatura técnica interna de API (`DRAFT`, `LOCKED`, `SEALED`, etc.) no se muestra al inspector: la interfaz usa textos operativos en castellano. ## Alta de Instalaciones y Subinstalaciones El alta móvil queda alineada con el Dashboard y con las validaciones del servidor. ### Instalación - contexto territorial: Yacimiento/Área de la Inspección; - clasificación técnica compatible; - **Nombre técnico** obligatorio; - Nombre habitual opcional; - Descripción opcional; - atributos técnicos definidos por el tipo; sólo los marcados como obligatorios bloquean el guardado; - código DH generado por el sistema cuando corresponde; - GPS de la tablet; - fotografía obligatoria antes de crear Hallazgos. ### Subinstalación Además de lo anterior requiere elegir primero la **Instalación padre**. El buscador consulta mientras se escribe y cada resultado es seleccionable tocando la tarjeta. La clasificación y los atributos se obtienen dinámicamente desde el mismo catálogo administrado por el Dashboard; la APK no mantiene listas técnicas paralelas. ## Alta de Hallazgos El alta de Hallazgos usa un selector desplegable con búsqueda por nombre. La pantalla muestra sólo la información necesaria para decidir, mantiene **Otro / No está en la lista** como salida manual y evita exponer códigos o leyendas internas del catálogo. La fecha de corrección no se solicita al inspector al crear un Hallazgo; los plazos administrativos se gestionan fuera de este alta de campo. Los campos de carga son compactos y el teclado avanza con **Siguiente** entre ellos. ## Actas y firma La terminología visible se simplifica: - `DRAFT` → **En elaboración**; - `LOCKED` → **Pendiente de firma**; - `SEALED` → **Firmada y cerrada**. Cerrar el contenido no cierra automáticamente la Inspección y tampoco obliga a terminar la firma en ese instante: puede continuarse con otra Acta. La urgencia se decide en ese cierre, nunca al crear el borrador. Una vez cerrado el contenido, el Acta es inmutable. Después de la firma/cierre definitivo se mantiene el circuito documental existente: PDF del Acta e informe INF editable (DOCX) para oficina. ## Castellano e identidad visual Se revisaron las pantallas activas de campo para evitar exponer estados y opciones internas en inglés. Entre otros cambios: Pasaporte/Otro en documentos, estados de Inspección/Acta/Hallazgo en castellano, Correo electrónico, Huella de integridad y terminología de cierre orientada al usuario. La pantalla de ingreso y el desbloqueo biométrico utilizan la identidad visual de Mendoza ya incorporada al proyecto. ## Barrera obligatoria Todo cambio Android o de API que pueda afectar al cliente móvil debe pasar `Android CI / RC`: 1. validación de identidad, HTTPS y políticas básicas del manifest; 2. Android lint; 3. pruebas unitarias Android reales, con verificación de que exista al menos una prueba ejecutada; 4. `assembleDebug`; 5. `assembleRelease` para comprobar que la variante productiva compile; 6. empaquetado del APK debug con SHA-256 y metadata de commit/versionado. Además, `DH V2 CI` debe mantener verdes API, WEB y contrato Docker/migraciones antes de promover cambios que afecten al servidor. ## Firma release La clave histórica de firma **no se versiona ni se reemplaza**. La CI compila la variante release para detectar roturas, pero una APK productiva que deba actualizar `com.korexlabs.dhinspeccion` tiene que firmarse con la clave histórica. No se debe crear una clave nueva para resolver una falta de acceso: eso rompería la continuidad de actualización de tablets que ya tengan una versión firmada con la clave anterior. ## Criterio de distribución Antes de distribuir una APK productiva: - todas las barreras de CI del SHA exacto deben estar verdes; - comprobar certificado/huella de firma contra la versión histórica si se distribuirá como actualización productiva; - realizar actualización sobre al menos una tablet con la versión productiva anterior cuando corresponda; - ejecutar smoke funcional: ingreso, iniciar Inspección, crear Acta, seleccionar/crear Instalación o Subinstalación, GPS/foto, Hallazgo, cerrar Acta → Pendiente de firma, firma/manifestación, cierre de Acta y cierre de Inspección; - registrar el SHA Git y SHA-256 de la APK distribuida. ## Revisión 0.19.1 - Renovación de sesión coordinada entre los cuatro clientes API; no cierra sesión por pérdida de red, HTTP 429/500 o cancelación. - Una respuesta tardía no puede restaurar una sesión cerrada ni usar la de otro inspector. - Guardia de escrituras contra doble toque y conteo correcto de operaciones pendientes. - Búsquedas descartan respuestas antiguas. Cambio de inspección limpia el Acta anterior. - Mensajes visibles de permisos/GPS en evidencia y respeto de barras de sistema/teclado. - Diez nuevas pruebas de comportamiento sobre sesión y concurrencia. ### Alcance real Esta candidata requiere conexión. No implementa trabajo offline ni cola persistente de sincronización; un fallo de red no equivale a guardado. Tras un timeout de escritura debe verificarse el registro antes de repetir. No se presenta el artefacto debug como una release productiva. La firma histórica y el smoke en tablet siguen siendo requisitos para distribuir la release final. ### Segunda pasada funcional - Coordenadas normalizadas al contrato API (6 decimales, precisión 3). - Yacimiento seleccionable para Hallazgos y como padre explícito de nuevas Instalaciones. Se elimina el fallback que podía presentar un tipo Yacimiento como alta de Instalación. - Formulario Datos técnicos sobre el elemento seleccionado: carga y guarda las definiciones/valores por familia mediante los endpoints existentes del Dashboard; valida obligatorios, números, Sí/No, fechas y opciones. Es un paso separado del alta estructural y GPS/foto. - Se agregan siete pruebas para coordenadas y valores técnicos. ## Revisión 0.19.3 · flujo conceptual corregido - Se elimina **Inventario de campo** como acción independiente de la pantalla de Inspección. - El alta o selección de Inventario existe únicamente dentro de **Agregar Hallazgo**. - El borrador de Acta nace vacío, sin Inventario y sin urgencia predeterminada. - La urgencia se exige al cerrar el Acta y se persiste en la misma operación que la vuelve inmutable. - `inspection_acts.urgency` puede quedar pendiente durante el borrador; el bloqueo exige la decisión y calcula el vencimiento desde allí.