# Comprobación del estado del POS

Antes de iniciar una transacción, puedes verificar si la app Tap on Phone está correctamente inicializada y lista. Para ello, envía una solicitud de estado utilizando un broadcast de Android.

Esta guía muestra cómo solicitar el estado actual del Punto de Venta (POS) y cómo gestionar la respuesta.

## Paso 1: Registrar un Broadcast Receiver

La app Tap on Phone procesa tu solicitud de estado de forma asíncrona y devuelve el resultado a través de un broadcast. Debes registrar un `BroadcastReceiver` para escuchar esta respuesta.

Puedes escuchar la acción de respuesta predeterminada (`com.dejamobile.cbp.sps.STATUS_BROADCAST_RESPONSE`) o definir un nombre de acción personalizado.

```
// Define your broadcast action (default or custom)
val responseAction = "com.dejamobile.cbp.sps.STATUS_BROADCAST_RESPONSE"

val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        val status = intent?.getStringExtra("Status") ?: "Unknown"
        val info = intent?.getStringExtra("Info") ?: ""

        when (status) {
            "Initialized" -> println("POS is ready to process payments.")
            "None" -> println("POS is not initialized. Call InitActivity first.")
            "Failed" -> println("The status request failed. Try launching the POS app and retry.")
            else -> println("Unknown status received.")
        }

        // Unregister the receiver once handled
        context?.unregisterReceiver(this)
    }
}

// Register the receiver
val filter \= IntentFilter(responseAction)
registerReceiver(receiver, filter)
```

## Paso 2: Enviar el broadcast de estado

Una vez que tu receiver esté escuchando, construye y envía el intent de broadcast para solicitar el estado.

Debes especificar el paquete de Tap on Phone y la clase `StatusBroadcastReceiver`.

```
val intent = Intent().apply {
    action = "com.dejamobile.cbp.sps.STATUS_BROADCAST"
    component = ComponentName(
        "com.dejamobile.cbp.sps.app",
        "com.dejamobile.cbp.sps.app.broadcast.StatusBroadcastReceiver"
    )
    addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)

    // Optional: Specify your custom response action
    // putExtra("ResponseAction", responseAction)
}

// Send the broadcast
sendBroadcast(intent)
```

## Parámetros de respuesta de estado

Cuando tu receiver captura la respuesta, el intent contiene varios extras. El más importante es la cadena `Status`, que determina si puedes continuar con un pago.

| Valor de Estado | Significado |
| :---- | :---- |
| `Initialized` | La app POS se ha inicializado correctamente y está lista para procesar transacciones. |
| `None` | La app POS no está inicializada. Debes iniciar la `InitActivity` antes de procesar pagos. |
| `Failed` | La solicitud ha fallado. Intenta abrir la app POS manualmente y vuelve a intentarlo. |

Si el estado es `Initialized`, el intent de respuesta también incluye los siguientes extras opcionales:

* `merchantId`: El ID del comercio actual.  
* `userId`: El ID del usuario actual.  
* `merchantContractCode`: El código de contrato del comercio actual.

<Callout type="tip">

Utiliza el broadcast de estado para asegurarte de que el POS está listo cuando se reanuda tu app (`onResume`). Si el estado devuelve `None`, redirige al comercio a tu flujo de inicialización.

</Callout>