From 4ddd6618d10d94802194929c3e594b5cc03e17dc Mon Sep 17 00:00:00 2001 From: Pablo Date: Wed, 18 Mar 2026 18:32:57 +0100 Subject: [PATCH] limpieza --- CHANGELOG.md | 195 ------------------------------------------- DEBUG_MOVIMIENTOS.md | 175 -------------------------------------- 2 files changed, 370 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 DEBUG_MOVIMIENTOS.md diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 80e8a10..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,195 +0,0 @@ -# Changelog - iTartanas - -## Versión 1.0 - Implementación Completa - -### 🎉 Funcionalidades Implementadas - -#### ✅ Lectura NFC de Tarjeta Millennium -- **Comunicación ISO-DEP**: Implementado el protocolo completo de comunicación con tarjetas Calypso -- **Selección de red de transporte**: Comando APDU para inicializar la comunicación -- **Lectura de entorno y contrato**: Extracción de datos básicos de la tarjeta -- **Lectura de registros de eventos**: Obtención de los últimos 3 movimientos - -#### 💳 Procesamiento de Datos de Tarjeta - -##### Número de Tarjeta -- Decodificación BCD (Binary Coded Decimal) a decimal -- Conversión de PAN (Primary Account Number) a IEP según aplicación -- Cálculo y validación de dígito de verificación Luhn -- Enmascaramiento de primeros 8 dígitos por seguridad -- Formato visual en grupos de 4 dígitos - -##### Saldo -- Lectura desde bytes 29-31 del contrato (3 bytes big-endian) -- Conversión de céntimos a euros -- Formato con 2 decimales - -##### Últimos Movimientos (NUEVO) -- Lectura de registros de eventos (comando READ RECORD) -- Parseo de hasta 3 movimientos más recientes -- Extracción de información: - - **Fecha**: Días desde 01/01/1997 (formato Calypso) - - **Hora**: Minutos desde medianoche (convertido a HH:MM) - - **Tipo de evento**: Carga, Validación, Operación - - **Importe**: En euros (si aplica) - - **Ubicación**: Línea o parada (si está disponible) - -#### 🎨 Interfaz de Usuario - -##### Pantalla Principal -- Diseño Material 3 con Jetpack Compose -- Tema moderno y responsivo -- Edge-to-edge UI - -##### Estados de la Aplicación -1. **Estado Inicial**: Instrucciones y icono NFC -2. **Leyendo**: Indicador de progreso circular -3. **Datos Leídos**: Card con toda la información -4. **Error**: Card roja con mensaje descriptivo - -##### Visualización de Datos -- **Número de tarjeta**: Tipografía destacada, parcialmente enmascarado -- **Saldo**: Display prominente en color primario, tamaño grande -- **Movimientos**: Lista compacta con diseño tipo timeline - - Fecha y hora - - Tipo de operación con estilo diferenciado - - Importe con código de color (Cargas en azul, Validaciones en gris) - - Ubicación/línea cuando está disponible - -#### 🔧 Características Técnicas - -##### Arquitectura -- **Patrón Repository**: Separación de lógica de negocio -- **Coroutines**: Operaciones asíncronas sin bloqueo -- **Compose State Management**: Estado reactivo de UI -- **Manejo de errores robusto**: Try-catch en múltiples niveles - -##### Comandos APDU Implementados -``` -SELECT Transport Network: 0x80 0x26 0x4F 0x11 0x0A -READ Environment: 0x80 0x32 0x00 0x00 0x18 -READ Contract: 0x80 0x2E 0x01 0x00 0x20 -READ Event Log (1-3): 0x80 0x2B 0x0N 0x05 0x1D -``` - -##### Seguridad y Privacidad -- ✅ Sin conexión a Internet -- ✅ Sin almacenamiento persistente -- ✅ Solo lectura (no puede modificar datos) -- ✅ Enmascaramiento de información sensible -- ✅ Validación de datos antes de mostrar - -### 📋 Archivos Creados/Modificados - -#### Nuevos Archivos -``` -app/src/main/java/com/pjpmosteiro/itartanas/nfc/ - └── CardRepositoryImpl.kt (270 líneas) - -app/src/main/res/xml/ - └── nfc_tech_filter.xml - -docs/ - ├── README.md - ├── INSTALLATION_GUIDE.md - └── CHANGELOG.md (este archivo) -``` - -#### Archivos Modificados -``` -app/src/main/AndroidManifest.xml - - Añadidos permisos NFC - - Configurado intent-filter para NFC - - Añadido launchMode="singleTop" - -app/src/main/java/com/pjpmosteiro/itartanas/MainActivity.kt - - Implementada gestión completa de NFC - - Añadida UI de lectura de tarjeta - - Implementado componente MovementItem - - Gestión de estados (leyendo, éxito, error) -``` - -### 🛠️ Dependencias - -Todas las dependencias ya estaban presentes: -- Kotlin 2.1.0 -- Jetpack Compose BOM -- Material 3 -- Lifecycle Runtime KTX -- Android NFC API (incluida en SDK) - -### ✅ Testing y Calidad - -- ✅ Build exitoso sin errores -- ✅ Código sin warnings críticos -- ✅ Uso correcto de Locale para formateo -- ✅ Manejo apropiado de excepciones -- ✅ Compatibilidad con Android 7.0+ (API 24) -- ✅ Soporte para Android 13+ (API 33) con APIs actualizadas - -### 📱 Cómo Probar - -1. Compilar e instalar: - ```bash - .\gradlew installDebug - ``` - -2. Abrir la aplicación en un dispositivo con NFC - -3. Acercar una Tarjeta Millennium al lector NFC - -4. Verificar que se muestran: - - Número de tarjeta enmascarado - - Saldo actual - - Últimos 3 movimientos con detalles - -### 🎯 Objetivos Cumplidos - -- ✅ Lectura de número de tarjeta -- ✅ Consulta de saldo -- ✅ Visualización de últimos movimientos (NUEVO) -- ✅ Interfaz moderna y usable -- ✅ Detección automática NFC -- ✅ Manejo robusto de errores -- ✅ Documentación completa - -### 🔮 Posibles Mejoras Futuras - -- Guardar historial de lecturas en base de datos local -- Gráficos de evolución de saldo -- Notificaciones de saldo bajo -- Múltiples tarjetas en una cuenta -- Exportar historial a PDF -- Widget de pantalla de inicio -- Modo oscuro/claro manual -- Soporte para otros sistemas de transporte - -### 📝 Notas Técnicas - -#### Formato de Fechas Calypso -Las fechas se almacenan como días transcurridos desde el 01/01/1997 (epoch Calypso). - -#### Formato de Hora -Las horas se almacenan como minutos desde medianoche (0-1439). - -#### Tipos de Evento -- `1`: Carga de saldo -- `2, 3`: Validación en transporte -- Otros: Operaciones diversas - -#### Estructura de Registros -Cada registro de evento tiene 29 bytes útiles con la siguiente estructura aproximada: -- Bytes 0-1: Fecha (días desde epoch) -- Bytes 2-3: Hora (minutos desde medianoche) -- Byte 4: Tipo de evento -- Bytes 5-7: Importe (céntimos, big-endian) -- Bytes 8-11: Información adicional -- Bytes 10-11: Código de ubicación/línea - ---- - -**Desarrollado por**: Pablo Mosteiro -**Basado en**: Análisis de código decompilado de iTranvias -**Fecha**: Marzo 2026 -**Versión**: 1.0 - diff --git a/DEBUG_MOVIMIENTOS.md b/DEBUG_MOVIMIENTOS.md deleted file mode 100644 index 64e056c..0000000 --- a/DEBUG_MOVIMIENTOS.md +++ /dev/null @@ -1,175 +0,0 @@ -# 🔧 Actualización - Debug de Movimientos - -## Problema Reportado -Los movimientos no se estaban mostrando en la aplicación, solo el número de tarjeta y el saldo. - -## ✅ Cambios Implementados - -### 1. Mejorado el Manejo de Errores -- **Antes**: Los errores al leer movimientos se "tragaban" silenciosamente -- **Ahora**: Se capturan y muestran en la UI para debugging - -### 2. Comandos APDU Múltiples -He implementado 3 intentos diferentes para leer los registros de eventos: - -```kotlin -// Intento 1: SFI 0x08 (file 8) -0x80 0x2B [record] 0x45 0x1D - -// Intento 2: SFI 0x07 -0x80 0x2B [record] 0x3D 0x1D - -// Intento 3: Comando simplificado -0x80 0x2B [record] 0x05 0x1D -``` - -Esto aumenta las posibilidades de éxito con diferentes implementaciones de tarjetas Calypso. - -### 3. Status Words Flexibles -Ahora la app reconoce: -- `9000` - Éxito -- `6A83` - Registro no encontrado (normal si no hay movimientos) -- `6A82` - Archivo no encontrado (tarjeta sin historial) - -### 4. UI con Información de Debug - -Ahora verás uno de estos escenarios: - -#### Caso A: Movimientos Encontrados ✅ -``` -┌─────────────────────────────┐ -│ Últimos Movimientos │ -│ │ -│ Carga +10.00 € │ -│ 15/03/2026 14:30 │ -│ Línea 12 │ -│ ... │ -└─────────────────────────────┘ -``` - -#### Caso B: Sin Movimientos (con debug) 🔍 -``` -┌─────────────────────────────┐ -│ Últimos Movimientos │ -│ │ -│ No se pudieron leer los │ -│ movimientos │ -│ │ -│ Debug: Registro no │ -│ encontrado │ -└─────────────────────────────┘ -``` - -## 🧪 Qué Probar Ahora - -1. **Reinstala la app** con el nuevo APK: - ``` - app\build\outputs\apk\debug\app-debug.apk - ``` - -2. **Lee tu tarjeta nuevamente** - -3. **Observa la sección "Últimos Movimientos"**: - - Si ves movimientos: ¡Perfecto! ✅ - - Si ves "No se pudieron leer...": Lee el mensaje de debug - -## 📊 Posibles Resultados - -### Resultado 1: Funciona Ahora ✅ -Si los movimientos aparecen, significa que uno de los nuevos comandos funcionó. - -### Resultado 2: "Debug: Registro no encontrado" ⚠️ -**Significado**: La tarjeta no tiene registros de eventos disponibles para leer. - -**Posibles causas**: -- La tarjeta es nueva y no tiene movimientos todavía -- Los registros de eventos están en un archivo diferente -- La tarjeta Millennium usa un formato propietario diferente - -**Solución**: Es normal. Algunas tarjetas no almacenan historial localmente. - -### Resultado 3: Otro mensaje de error 🔍 -Si ves otro error, por favor compártelo conmigo para investigar más. - -## 🔬 Próximos Pasos según el Resultado - -### Si Funciona: -- ✅ Ya está todo listo -- Puedes usar la app normalmente -- Los movimientos se mostrarán cuando estén disponibles - -### Si No Funciona: -Necesitaré más información: - -1. **¿Qué dice el mensaje de debug?** - - El texto exacto que aparece en rojo - -2. **¿Es una tarjeta usada o nueva?** - - Si es nueva, puede no tener historial - -3. **¿Puedes leer movimientos en la app oficial de iTranvias?** - - Esto confirmaría que los datos existen - -## 💡 Información Técnica - -### Por qué pueden faltar los movimientos: - -1. **Formato Propietario**: Algunas ciudades usan extensiones propietarias del formato Calypso - -2. **Archivo Diferente**: Los eventos pueden estar en un SFI (Short File Identifier) diferente - -3. **Sin Historial Local**: Algunas tarjetas no almacenan historial en el chip, solo en servidores - -4. **Encriptación**: Algunos campos pueden estar encriptados y requerir claves específicas - -### Comandos que estamos probando: - -Las tarjetas Calypso usan el comando READ RECORD (`0x2B`) con diferentes parámetros: - -- **P1**: Número de registro (1, 2, 3) -- **P2**: SFI × 8 + modo (ej: `0x45` = SFI 8, modo 5) -- **Le**: Longitud esperada (`0x1D` = 29 bytes) - -Estamos probando los SFI más comunes: -- SFI 7 (típico para eventos de validación) -- SFI 8 (típico para log de transacciones) -- Modo directo sin SFI - -## 📱 Instalación del APK Actualizado - -El nuevo APK está en: -``` -app\build\outputs\apk\debug\app-debug.apk -``` - -Para instalar: -1. Transfiere el APK a tu teléfono -2. Abre el APK y permite la instalación -3. Si ya tenías la app instalada, se actualizará automáticamente - -## ✅ Build Exitoso - -``` -BUILD SUCCESSFUL ✅ -35 tareas ejecutadas -7 cambios aplicados -``` - ---- - -## 🎯 Resumen - -He mejorado significativamente la lectura de movimientos: -- ✅ Múltiples comandos APDU (3 intentos) -- ✅ Mejor manejo de errores -- ✅ Información de debug visible -- ✅ Status words más flexibles - -**Próximo paso**: Prueba la app actualizada y cuéntame qué mensaje ves en la sección de movimientos. - ---- - -**Actualización**: 9 de Marzo, 2026 -**Versión**: 1.1 (Debug Build) -**Estado**: Listo para probar -