# Corrección de timeout en emisión FE desde CukPOS

## Causa

El panel llegó correctamente a la API FE, pero la API no devolvió respuesta antes del timeout del panel:

```text
Operation timed out after 30001 milliseconds with 0 bytes received
```

Eso ocurre cuando la ruta `/api/v1/documentos/add` tarda demasiado antes de responder, normalmente por token/envío a Hacienda o por una operación de firma/envío que queda esperando red.

## Cambios

Archivos afectados:

- `appife/app/Http/Middleware/InjectBranchContext.php`
- `appife/app/HttpClients/Clients/HaciendaClient.php`
- `appife/app/Services/DocumentoService.php`

Cambios principales:

1. La API registra fases internas de emisión:
   - `API_FE_ADD_DOC_START`
   - `API_FE_HACIENDA_AUTH_PRECHECK_START`
   - `API_FE_HACIENDA_AUTH_PRECHECK_OK`
   - `API_FE_SIGN_START`
   - `API_FE_SIGN_OK`
   - `API_FE_DOC_STORED`
   - `API_FE_HACIENDA_SEND_START`
   - `MH_AUTH_START`
   - `MH_AUTH_RESPONSE`
   - `MH_SEND_START`
   - `MH_SEND_RESPONSE`
   - `API_FE_HACIENDA_SEND_DEFERRED`

2. Se reducen y parametrizan los timeouts contra Hacienda:

```env
MH_TOKEN_TIMEOUT=5
MH_TOKEN_CONNECT_TIMEOUT=3
MH_SEND_TIMEOUT=8
MH_SEND_CONNECT_TIMEOUT=3
MH_STATUS_TIMEOUT=6
MH_STATUS_CONNECT_TIMEOUT=3
```

3. Si Hacienda no responde a tiempo, la API ya no debe dejar al panel sin respuesta. El documento queda `firmado` y pendiente de reintento.

4. Se agrega opción para desactivar el envío síncrono desde el cobro POS:

```env
FE_SYNC_SEND_TO_HACIENDA=false
```

Con esa opción la API firma, guarda y responde de inmediato. Luego se debe usar el cron/reintento existente para enviar firmados:

```text
/api/v1/documentos/enviar-firmados
```

## Recomendación de producción

Para POS en restaurante, conviene evitar que el cobro quede esperando red externa de Hacienda. La operación correcta es:

1. POS cobra.
2. API genera clave/consecutivo/XML firmado.
3. Responde al panel con estado `firmado` o `enviado`.
4. Envío/reintento a Hacienda corre por cron/webhook.

Si se requiere envío inmediato, dejar:

```env
FE_SYNC_SEND_TO_HACIENDA=true
```

pero mantener timeouts bajos.

Después de subir los archivos:

```bash
php artisan optimize:clear
php artisan config:clear
php artisan cache:clear
```
