Files
iTartanas/CHANGELOG.md
T
2026-03-09 22:23:07 +01:00

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
  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:

    .\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