Receptor Android

La app que lee las notificaciones de tu banco

El código completo del proyecto Expo está en la carpeta mobile/ de este repositorio. Puedes descargar todo el código fuente (Mobile + Backend Python + Scripts) aquí:

Endpoint al que envía el teléfono

POST https://project--9bad81ff-c7cc-476f-9fc6-40f6028a8134-dev.lovable.app/api/public/bank-notification
Content-Type: application/json

{
  "texto_crudo": "Su cuenta *1234 recibe Pago Movil de MARIA GONZALEZ por Bs. 250,00 Ref: 004512789"
}

También acepta datos ya parseados (monto, referencia, pagador, fecha_pago). Si defines el secreto DEVICE_TOKEN, el teléfono debe enviar la cabecera x-device-token.

Cómo obtener el APK instalable

No existe un APK precompilado: Android exige firmar y compilar el proyecto nativo. Con una cuenta gratuita de Expo (EAS) el APK se genera en la nube en ~10 min y te da un enlace de descarga directo al teléfono.

cd mobile
npm install
npm i -g eas-cli
eas login                                  # cuenta gratuita de expo.dev
eas build --profile preview -p android      # APK instalable (perfil ya incluido en eas.json)
# al terminar: abre el enlace del build en el teléfono y descarga el .apk

Alternativa local (necesita Android Studio + SDK): npx expo prebuild -p android && cd android && ./gradlew assembleRelease — el APK queda en android/app/build/outputs/apk/release/.

Tras instalarlo: abre la app → Activar permiso de notificaciones → activa “Conciliar.ve Receptor” y desactiva la optimización de batería. Desde ese momento cada Pago Móvil del BDV aparece en el panel de este sitio.

Flujo de trabajo: ¿Qué pasa cuando alguien paga?

1. Recepción en el móvil

Cuando un cliente te hace un Pago Móvil, la notificación del Banco de Venezuela (BDV) llega a tu teléfono. La app receptora la captura automáticamente (incluso en segundo plano) y la envía a este panel en milisegundos.

2. Reporte del cliente

El cliente entra a tu sitio (en la ruta /reportar) y llena el formulario con los datos de su pago (monto, referencia y opcionalmente una foto del comprobante).

3. Conciliación automática (Match)

El sistema busca coincidencias entre los reportes de clientes y las notificaciones del banco.

  • Match Perfecto: Si el monto y la referencia coinciden exactamente, el pago se marca como
    CONCILIADO
    al instante.
  • Duda o Error: Si el cliente escribió mal un número de referencia pero el monto coincide, entra en juego la IA de Conciliar.ve para analizar el comprobante y dar el visto bueno.

"no entiendo si go si un pago mobil esta a nombre de una persona pero resulta que lo reporta otro con la opcion de llevar otro nombre pero coincide los nomeros de referencia tambien puede ser validado osea es tener tambien esa opcion lo digo porque se acaba de hacer un registro pero no esta el mash del mismo con reporte con las notificaciones"

"otra cosa note que si tengo la aplicacion de mi telefono abierta en primer pano es que si llegan a mi plataforma de foma inmediata"

"que hago vuelvo a complitar la app...."

"no retira lo indicado en el mensaja anterior si llega sin tener la app abierta solo hay que esperar unos minutos y llega"

"si veredicto final llegan las notificaciones cuando la app esta en segundo plano si esta cerrada no funcionara...aunque estamos de pruebas funciona optimamente pero deberia funcionar asi esta cerrada la app en mi telefono"

"ok ahora necesitamos hacer algo mas practico como ya sabemos que las notificaciones si llegan debemos ver si es posible que en vez de tomar los datos de los campo referencia monto numro etc los tome el sistema del capture que sube el cliente a la platafoma haciendo un scraping de esa imagen y los deposite en la base de datos de manera que aunque el clinete declare los datos de manera manual si los coloca de forma equivoca con el escraping es imposible fallos"

"pero eso deberia estar en el sistema no apliaccion instalada en el telefono correcto"

"es bueno que en el tab de reporte el pago cuando se envie los datos de reporte se quiete los campos de reportes y enseguida salga el mensaje si ya esta conciliado y si existe en la base de datos o si no esta enviar un mensaje que su pago estara en espera de conciliacion o que se ponga en contacto con administrador este mensaje es decirle a la persona que reporta que su pago aunque esta haciendo reportado aun la operacion bancaria no esta realizada"

"por cada conciliacio efectic¡va debe mostrase tambien con una nueva cards en dolares usando esta api oficial de banco central de venzuela https://ve.dolarapi.com al momento que esta conciliacion exista debe congelarse con esa taza tanto para cuando llego la notificacion de pago y en el momento que se declara se declara con la fecha y hora donde la taza es la de esa momento sera validada si esta fuera de ella la conciliacion fallara"

"recuerda y asegurate que si cambia la taza de cambio dolar si ya hay pagos conciliados de fechas anteriores al cambio deben mantenerse sin alterar montos conciliados eso nos dara un cierre diario y si existe un cierre mensual o quincenal debe ser detallado por la tazas de cambio dia a dia semana a semana mes a mes"

Importante sobre Expo Go

Atención
Leer notificaciones de otras apps requiere el permiso nativo NotificationListenerService, que Expo Go no incluye. La app se corre con un development build (EAS) usando la librería react-native-android-notification-listener. Expo Go solo sirve para probar la pantalla y el envío manual al backend.

cd mobile
npm install
npx expo prebuild --platform android      # genera el proyecto nativo
npx eas build --profile development -p android   # o: npx expo run:android
# Instala el APK, abre la app y toca "Activar permiso de notificaciones"
# Ajustes de Android > Notificaciones > Acceso a notificaciones > Conciliar.ve

Parsing de la notificación (mismo Regex que el backend)

const RE_MONTO = /(?:Bs\.?|Bss\.?)\s*([\d.,]+)/i;
const RE_REF   = /Ref(?:erencia)?[:.\s]*([0-9]{4,})/i;
const RE_QUIEN = /(?:de|del)\s+([A-ZÁÉÍÓÚÑ][A-Za-z\s.]{3,40}?)\s+por/i;
// "1.200,50" (formato Venezuela) -> 1200.50

Backend Flask de referencia

Este sitio ya trae el cerebro completo (base de datos, motor de match y IA). Si prefieres ejecutarlo local en Python:

cd backend-flask
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python app.py            # http://localhost:5000

# en otra terminal
python ../scripts/test_simulate_reception.py
python ../scripts/test_simulate_report.py