5.8 KiB
5.8 KiB
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
- Estado Inicial: Instrucciones y icono NFC
- Leyendo: Indicador de progreso circular
- Datos Leídos: Card con toda la información
- 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
-
Compilar e instalar:
.\gradlew installDebug -
Abrir la aplicación en un dispositivo con NFC
-
Acercar una Tarjeta Millennium al lector NFC
-
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 saldo2, 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