Uecko_ERP/docs/document-series/manual-concurrency-validation.md

88 lines
2.2 KiB
Markdown
Raw Normal View History

# Manual concurrency validation
Validacion manual de concurrencia para `document-series` sin introducir framework nuevo.
## Objetivo
Comprobar que varias asignaciones simultaneas sobre la misma serie:
- no generan duplicados
- consumen numeros consecutivos
- avanzan `next_number` exactamente `N` posiciones
## Precondiciones
- BD de desarrollo segura
- serie de `proforma` activa y conocida
- backend arrancado contra esa BD
- capacidad de lanzar varias peticiones HTTP casi simultaneas
## Caso base recomendado
Serie inicial:
- `document_type = 'proforma'`
- `code = 'PF'`
- `next_number = 100`
Numero de asignaciones concurrentes:
- `N = 10`
Esperado:
- referencias unicas `PF-000100` a `PF-000109`
- `document_series.next_number = 110`
- cero duplicados
## Preparacion SQL
```sql
SELECT id, company_id, document_type, code, prefix, suffix, next_number, padding
FROM document_series
WHERE document_type = 'proforma'
AND code = 'PF';
```
Si hace falta preparar la serie manualmente en desarrollo, hacerlo de forma conservadora y reversible.
## Ejecucion HTTP manual
1. Preparar 10 peticiones de creacion de proforma para la misma empresa y misma serie destino.
2. Lanzarlas en paralelo desde el cliente HTTP disponible.
3. Registrar `proforma_reference`, `proforma_number` y `document_series_id` devueltos.
## Verificaciones SQL
```sql
SELECT proforma_reference, proforma_number, document_series_id
FROM proformas
WHERE document_series_id = '<document_series_id>'
ORDER BY created_at DESC
LIMIT 20;
```
```sql
SELECT proforma_reference, COUNT(*) AS duplicates
FROM proformas
WHERE document_series_id = '<document_series_id>'
GROUP BY proforma_reference
HAVING COUNT(*) > 1;
```
```sql
SELECT id, next_number
FROM document_series
WHERE id = '<document_series_id>';
```
## Criterio de aceptacion
- no hay filas en la query de duplicados
- aparecen `N` nuevas referencias distintas
- `next_number_final = next_number_inicial + N`
## Bloqueo actual en este workspace
En este workspace no se pudo ejecutar la prueba porque la terminal no pudo abrir conexion operativa a la BD de desarrollo. La configuracion detectada es de desarrollo, pero falta cliente `mysql` y el conector `mysql2` local no resuelve todas sus dependencias transitivas.