# oscargines/consulta-reat architecture

> Architecture diagram of the GitHub repository oscargines/consulta-reat, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/oscargines/consulta-reat
- Repository: https://github.com/oscargines/consulta-reat

## Overview

Consulta Transportes is an Android field-support app for road-transport inspectors. The main workflow is to enter a REAT query, retrieve and parse public-register data (optionally enrich it from NAP), and review or retain the result and history. Separate tools support ADR lookups and calculations, sanction-baremo searches, school-transport inspections, and internal inspections using DNIe NFC. The graph combines README-documented capabilities with sampled call paths; several screen-to-data links rely on the documented MVVM structure, since those implementations were not sampled.

Main entry points: [`app/src/main/java/com/oscar/consultareat/ui/inicio/PantallaPrincipal.kt`](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/inicio/PantallaPrincipal.kt) (Home screen), [`app/src/main/java/com/oscar/consultareat/data/client/RgtClient.kt`](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/client/RgtClient.kt) (REAT client), [`app/src/main/java/com/oscar/consultareat/RgtRepository.kt`](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/RgtRepository.kt) (REAT repository), [`app/src/main/java/com/oscar/consultareat/ui/inspeccion/InspeccionInternaScreen.kt`](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/inspeccion/InspeccionInternaScreen.kt) (Internal inspection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_reat["REAT consultation"]
  node_query["Query form<br/>[ConsultaScreen.kt]"]
  node_captcha["CAPTCHA WebView<br/>[ConsultaScreen.kt]"]
  node_viewmodel["Query ViewModel"]
  node_repository["REAT repository<br/>[RgtRepository.kt]"]
  node_client["REAT client<br/>[RgtClient.kt]"]
  node_parser["HTML parser<br/>[RgtHtmlParser.kt]"]
  node_nap["NAP API client<br/>[ReatApiClient.kt]"]
  node_reatservice["Public REAT"]
  node_napservice["NAP platform"]
  node_results["Result cards<br/>[ResultadoScreen.kt]"]
  node_history["Query history<br/>[HistorialScreen.kt]"]
  node_historycache[("History cache<br/>[HistorialCache.kt]")]
end

subgraph group_reference["Reference tools"]
  node_adr["ADR lookup<br/>[AdrScreen.kt]"]
  node_adrrepo["ADR repository<br/>[AdrRepository.kt]"]
  node_adrdb[("ADR database<br/>[AdrDatabase.kt]")]
  node_points["1000-point tool"]
  node_onu["ONU search"]
  node_baremo["Sanction baremo<br/>[BaremoScreen.kt]"]
  node_baremorepo["Baremo repository"]
  node_baremodb[("Baremo database<br/>[BaremoDatabase.kt]")]
end

subgraph group_inspection["Inspection workflows"]
  node_school["School transport"]
  node_internal["Internal inspection"]
  node_nfc["NFC tag store"]
  node_dnireader["DNIe reader<br/>[NfcDniReader.kt]"]
  node_pdf["Inspection PDF"]
  node_printer["Bluetooth printing"]
  node_printerstore[("Printer storage")]
end

subgraph group_platform["App and support"]
  node_main["Main activity<br/>[MainActivity.kt]"]
  node_navigation["App navigation<br/>[AppNavigation.kt]"]
  node_home["Home screen"]
end

node_inspector(("Inspector"))

node_inspector -->|"opens app"| node_main
node_main -->|"hosts UI"| node_navigation
node_navigation -->|"routes"| node_home
node_home -->|"opens query"| node_query
node_query -->|"submits"| node_viewmodel
node_viewmodel -->|"requests"| node_repository
node_repository -->|"executes"| node_client
node_client -->|"posts query"| node_reatservice
node_client -->|"parses HTML"| node_parser
node_parser -->|"returns parsed data"| node_client
node_client -.->|"tries configured API"| node_nap
node_nap -.->|"fetches operators"| node_napservice
node_client -->|"signals CAPTCHA"| node_captcha
node_viewmodel -->|"presents result"| node_results
node_repository -->|"saves and reads"| node_historycache
node_history -->|"manages history"| node_repository
node_home -->|"opens tool"| node_adr
node_adr -->|"searches goods"| node_onu
node_adr -->|"opens calculation"| node_points
node_onu -->|"searches tables"| node_adrrepo
node_points -->|"gets categories"| node_adrrepo
node_adrrepo -->|"queries"| node_adrdb
node_home -->|"opens tool"| node_baremo
node_baremo -->|"filters entries"| node_baremorepo
node_baremorepo -->|"queries"| node_baremodb
node_home -->|"opens inspection"| node_school
node_school -->|"imports REAT data"| node_repository
node_home -->|"opens inspection"| node_internal
node_main -->|"stores detected tag"| node_nfc
node_internal -->|"gets latest tag"| node_nfc
node_internal -->|"requests DNIe read"| node_dnireader
node_internal -->|"generates document"| node_pdf
node_home -->|"opens settings"| node_printer
node_printer -->|"loads and saves"| node_printerstore

click node_main "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/MainActivity.kt"
click node_navigation "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/AppNavigation.kt"
click node_home "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/inicio/PantallaPrincipal.kt"
click node_query "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/consulta/ConsultaScreen.kt"
click node_captcha "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/consulta/ConsultaScreen.kt"
click node_viewmodel "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/viewmodel/ConsultaViewModel.kt"
click node_repository "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/RgtRepository.kt"
click node_client "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/client/RgtClient.kt"
click node_parser "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/parser/RgtHtmlParser.kt"
click node_nap "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/api/ReatApiClient.kt"
click node_results "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/resultado/ResultadoScreen.kt"
click node_history "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/historial/HistorialScreen.kt"
click node_historycache "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/cache/HistorialCache.kt"
click node_adr "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/adr/AdrScreen.kt"
click node_adrrepo "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/adr/AdrRepository.kt"
click node_adrdb "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/adr/AdrDatabase.kt"
click node_points "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/adr/AdrCalculo1000PuntosScreen.kt"
click node_onu "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/adr/AdrConsultaOnuScreen.kt"
click node_baremo "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/baremo/BaremoScreen.kt"
click node_baremorepo "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/baremo/BaremoRepository.kt"
click node_baremodb "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/baremo/BaremoDatabase.kt"
click node_school "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/inspeccion/InspeccionTransEscolarScreen.kt"
click node_internal "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/inspeccion/InspeccionInternaScreen.kt"
click node_nfc "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/datasource/nfc/NfcTagRepository.kt"
click node_dnireader "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/datasource/nfc/NfcDniReader.kt"
click node_pdf "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/pdf/InspeccionInternaPdfGenerator.kt"
click node_printer "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/impresora/BluetoothPrinterScreen.kt"
click node_printerstore "https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/repository/BluetoothPrinterStorage.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_query,node_captcha,node_viewmodel,node_repository,node_client,node_parser,node_nap,node_reatservice,node_napservice,node_results,node_history,node_historycache toneBlue
class node_adr,node_adrrepo,node_adrdb,node_points,node_onu,node_baremo,node_baremorepo,node_baremodb toneAmber
class node_school,node_internal,node_nfc,node_dnireader,node_pdf,node_printer,node_printerstore toneMint
class node_main,node_navigation,node_home toneRose
class node_inspector toneIndigo
```

## Components

### REAT consultation

- [Query form](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/consulta/ConsultaScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/consulta/ConsultaScreen.kt`
- [CAPTCHA WebView](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/consulta/ConsultaScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/consulta/ConsultaScreen.kt`
- [Query ViewModel](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/viewmodel/ConsultaViewModel.kt): `app/src/main/java/com/oscar/consultareat/ui/viewmodel/ConsultaViewModel.kt`
- [REAT repository](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/RgtRepository.kt): `app/src/main/java/com/oscar/consultareat/RgtRepository.kt`
- [REAT client](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/client/RgtClient.kt): `app/src/main/java/com/oscar/consultareat/data/client/RgtClient.kt`
- [HTML parser](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/parser/RgtHtmlParser.kt): `app/src/main/java/com/oscar/consultareat/data/parser/RgtHtmlParser.kt`
- [NAP API client](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/api/ReatApiClient.kt): `app/src/main/java/com/oscar/consultareat/data/api/ReatApiClient.kt`
- **Public REAT**
- **NAP platform**
- [Result cards](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/resultado/ResultadoScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/resultado/ResultadoScreen.kt`
- [Query history](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/historial/HistorialScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/historial/HistorialScreen.kt`
- [History cache](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/cache/HistorialCache.kt): `app/src/main/java/com/oscar/consultareat/data/cache/HistorialCache.kt`

### Reference tools

- [ADR lookup](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/adr/AdrScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/adr/AdrScreen.kt`
- [ADR repository](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/adr/AdrRepository.kt): `app/src/main/java/com/oscar/consultareat/data/adr/AdrRepository.kt`
- [ADR database](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/adr/AdrDatabase.kt): `app/src/main/java/com/oscar/consultareat/data/adr/AdrDatabase.kt`
- [1000-point tool](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/adr/AdrCalculo1000PuntosScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/adr/AdrCalculo1000PuntosScreen.kt`
- [ONU search](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/adr/AdrConsultaOnuScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/adr/AdrConsultaOnuScreen.kt`
- [Sanction baremo](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/baremo/BaremoScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/baremo/BaremoScreen.kt`
- [Baremo repository](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/baremo/BaremoRepository.kt): `app/src/main/java/com/oscar/consultareat/data/baremo/BaremoRepository.kt`
- [Baremo database](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/baremo/BaremoDatabase.kt): `app/src/main/java/com/oscar/consultareat/data/baremo/BaremoDatabase.kt`

### Inspection workflows

- [School transport](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/inspeccion/InspeccionTransEscolarScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/inspeccion/InspeccionTransEscolarScreen.kt`
- [Internal inspection](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/inspeccion/InspeccionInternaScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/inspeccion/InspeccionInternaScreen.kt`
- [NFC tag store](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/datasource/nfc/NfcTagRepository.kt): `app/src/main/java/com/oscar/consultareat/data/datasource/nfc/NfcTagRepository.kt`
- [DNIe reader](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/datasource/nfc/NfcDniReader.kt): `app/src/main/java/com/oscar/consultareat/data/datasource/nfc/NfcDniReader.kt`
- [Inspection PDF](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/pdf/InspeccionInternaPdfGenerator.kt): `app/src/main/java/com/oscar/consultareat/data/pdf/InspeccionInternaPdfGenerator.kt`
- [Bluetooth printing](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/impresora/BluetoothPrinterScreen.kt): `app/src/main/java/com/oscar/consultareat/ui/impresora/BluetoothPrinterScreen.kt`
- [Printer storage](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/data/repository/BluetoothPrinterStorage.kt): `app/src/main/java/com/oscar/consultareat/data/repository/BluetoothPrinterStorage.kt`

### App and support

- [Main activity](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/MainActivity.kt): `app/src/main/java/com/oscar/consultareat/MainActivity.kt`
- [App navigation](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/AppNavigation.kt): `app/src/main/java/com/oscar/consultareat/ui/AppNavigation.kt`
- [Home screen](https://github.com/oscargines/consulta-reat/blob/main/app/src/main/java/com/oscar/consultareat/ui/inicio/PantallaPrincipal.kt): `app/src/main/java/com/oscar/consultareat/ui/inicio/PantallaPrincipal.kt`

### Other components

- **Inspector**

## Connections

- Inspector → Main activity: opens app
- Main activity → App navigation: hosts UI
- App navigation → Home screen: routes
- Home screen → Query form: opens query
- Query form → Query ViewModel: submits
- Query ViewModel → REAT repository: requests
- REAT repository → REAT client: executes
- REAT client → Public REAT: posts query
- REAT client → HTML parser: parses HTML
- HTML parser → REAT client: returns parsed data
- REAT client → NAP API client: tries configured API
- NAP API client → NAP platform: fetches operators
- REAT client → CAPTCHA WebView: signals CAPTCHA
- Query ViewModel → Result cards: presents result
- REAT repository → History cache: saves and reads
- Query history → REAT repository: manages history
- Home screen → ADR lookup: opens tool
- ADR lookup → ONU search: searches goods
- ADR lookup → 1000-point tool: opens calculation
- ONU search → ADR repository: searches tables
- 1000-point tool → ADR repository: gets categories
- ADR repository → ADR database: queries
- Home screen → Sanction baremo: opens tool
- Sanction baremo → Baremo repository: filters entries
- Baremo repository → Baremo database: queries
- Home screen → School transport: opens inspection
- School transport → REAT repository: imports REAT data
- Home screen → Internal inspection: opens inspection
- Main activity → NFC tag store: stores detected tag
- Internal inspection → NFC tag store: gets latest tag
- Internal inspection → DNIe reader: requests DNIe read
- Internal inspection → Inspection PDF: generates document
- Home screen → Bluetooth printing: opens settings
- Bluetooth printing → Printer storage: loads and saves
