Antecedentes
Antecedentes
- ✓Dado que inicié sesión en el CRM como
carlos.mendez@opencrm.com
- ✓Y existe la cuenta
Minera Atacama SpA
con RUT96.790.240-3
Reporte de QA · CUST-001
Los subtítulos del video muestran el escenario en curso (arriba) y el paso Gherkin que se ejecuta (abajo). Haz clic en un capítulo o en la marca de tiempo de un paso para saltar a ese momento.
| ID | Criterio | Escenarios | Resultado |
|---|---|---|---|
| AC1 | Al crear o editar una cuenta se puede ingresar un RUT, y el campo es opcional. | E1 E5 E6 | APROBADO |
| AC2 | El RUT se guarda y se muestra normalizado como XX.XXX.XXX-D, sin importar si se ingresó con o sin puntos o guion, o con k minúscula. | E1 E5 | APROBADO |
| AC3 | Un RUT con dígito verificador inválido se rechaza con un mensaje claro en el formulario, y también en la API (400). | E2 | APROBADO |
| AC4 | No pueden existir dos cuentas activas con el mismo RUT. El segundo intento se rechaza (409) y el formulario indica que el RUT ya existe. | E3 | APROBADO |
| AC5 | El buscador del listado de cuentas encuentra una cuenta por su RUT, con o sin puntos y guion. | E4 | APROBADO |
| AC6 | El RUT aparece en una columna del listado y en la ficha de detalle de la cuenta. | E1 E5 | APROBADO |
| AC7 | El RUT no es obligatorio: una cuenta se puede crear sin RUT y se muestra «-» en el RUT (no hay regresiones en el alta de cuentas). | E6 | APROBADO |
Un criterio se aprueba cuando todos los escenarios asociados en la tabla de trazabilidad se aprueban.
Característica
Como ejecutivo comercial del cliente
Quiero registrar y buscar el RUT de cada cuenta
Para facturar sin errores y evitar cuentas duplicadas
Antecedentes
carlos.mendez@opencrm.com
Minera Atacama SpAcon RUT
96.790.240-3
Escenario E1 · AC1 AC2 AC6
Nueva cuenta
Distribuidora Andes SpA
771234569
Distribuidora Andes SpAaparece en el listado con RUT
77.123.456-9
77.123.456-9
Escenario E2 · AC3
Nueva cuenta
Comercial Inválida Ltda
77.123.456-0
El RUT no es válidobajo el campo RUT
Comercial Inválida Ltdano se crea
Escenario E3 · AC4
Nueva cuenta
Minera Atacama Duplicada
96.790.240-3
Ya existe una cuenta con este RUTbajo el campo RUT
Minera Atacama Duplicadano se crea
Escenario E4 · AC5
967902403en el buscador de cuentas
Minera Atacama SpA
Escenario E5 · AC1 AC2 AC6
Transportes del Sur Ltdano tiene RUT
Transportes del Sur Ltda
76354771-k
76.354.771-K
Escenario E6 · AC1 AC7
Consultora Sin RUTsin completar el RUT
Consultora Sin RUTse crea correctamente
-en el RUT
El cliente factura electrónicamente ante el SII de Chile, y cada cliente se identifica allí por su RUT (Rol Único Tributario). Hoy el CRM no tiene un campo para el RUT. El equipo comercial lo anota en la descripción de la cuenta, en formatos distintos (96790240-3, 96.790.240-3, 967902403). Eso trae tres problemas:
utils::rut pasan con cargo test.completadocargo build) y el frontend pasa el chequeo de tipos (vue-tsc).completadoaccounts.tax_id VARCHAR(20) (opcional) y un índice único parcial sobre las cuentas activas con RUT (deleted_at IS NULL AND tax_id IS NOT NULL).utils::rut con la validación del dígito verificador (módulo 11) y la normalización al formato canónico XX.XXX.XXX-D, con pruebas unitarias.AccountService valida y normaliza el RUT al crear y al editar. Un RUT inválido devuelve 400 VALIDATION_ERROR. Un RUT ya usado por otra cuenta activa devuelve 409 CONFLICT. Si se envía un string vacío en la edición, el RUT se elimina.search) también busca por RUT, ignorando puntos y guion.tax_id se expone en AccountDto.409 del servidor se muestra como error del campo RUT.en, es-419, pt e it.Fuera de alcance: otros identificadores fiscales de la región (CNPJ, NIT, CUIT, RUC), la consulta en línea al SII y la migración de RUT que hoy están en las descripciones.
✗ E5 · Agregar un RUT con "k" minúscula a una cuenta existente
Bug preexistente encontrado por el QA en E5. Al guardar la edición de «Transportes del Sur Ltda», la API respondió 500:
PUT /api/accounts/{id} → 500
COALESCE types text and industry cannot be matched (42804)
Causa: en AccountRepository::update, la consulta usaba industry = COALESCE($3, industry), que mezcla un text con el enum industry de PostgreSQL. Por eso fallaba cualquier edición de cuenta, no solo la del RUT.
Corrección: se cambió a COALESCE($3::industry, industry) en backend/src/services/account_repository.rs. Después se reinició el backend y se volvió a ejecutar la suite completa.
| Verificación | Comando | Resultado |
|---|---|---|
| Pruebas unitarias RUT | cargo test --lib rut | 2 de 2 aprobadas (normalizes_valid_ruts, rejects_invalid_ruts) |
| Suite unitaria del backend | cargo test --lib | 12 de 12 aprobadas |
| Compilación del backend | cargo build | OK. Sin warnings nuevos en los archivos modificados (los 11 existentes son anteriores a esta tarea) |
| Tipos del frontend | vue-tsc --noEmit -p tsconfig.app.json | 0 errores |
| Migración | 20240101000021_add_tax_id_to_accounts.sql | Aplicada (success = true) sobre la base existente |
| API: RUT válido | POST /api/accounts con 99500410-0 | 201, se guardó como 99.500.410-0 |
| API: RUT duplicado | POST /api/accounts con 99.500.410-0 | 409 CONFLICT |
| API: RUT inválido | POST /api/accounts con 99.500.410-1 | 400 VALIDATION_ERROR |
| API: búsqueda | GET /api/accounts?search=995004 | 1 resultado |
Cambio adicional fuera del alcance original: migrations/seed_south_american_sme.sql se movió a migrations/seeds/. Su nombre no tiene prefijo de versión, así que sqlx::migrate! impedía compilar el backend.
Observación (no bloqueante, sin corregir): el formulario de cuentas envía industrias como Real Estate. El backend las convierte a minúsculas (real estate), pero el enum espera real_estate. Se recomienda crear una tarea aparte.
# language: es
Característica: RUT chileno en Cuentas
Como ejecutivo comercial del cliente
Quiero registrar y buscar el RUT de cada cuenta
Para facturar sin errores y evitar cuentas duplicadas
Antecedentes:
Dado que inicié sesión en el CRM como "carlos.mendez@opencrm.com"
Y existe la cuenta "Minera Atacama SpA" con RUT "96.790.240-3"
Escenario: E1 - Crear una cuenta con un RUT válido sin formato
Cuando abro el formulario "Nueva cuenta"
Y completo el nombre "Distribuidora Andes SpA"
Y completo el RUT "771234569"
Y guardo la cuenta
Entonces la cuenta "Distribuidora Andes SpA" aparece en el listado con RUT "77.123.456-9"
Y la ficha de detalle muestra el RUT "77.123.456-9"
Escenario: E2 - Rechazar un RUT con dígito verificador inválido
Cuando abro el formulario "Nueva cuenta"
Y completo el nombre "Comercial Inválida Ltda"
Y completo el RUT "77.123.456-0"
Y guardo la cuenta
Entonces veo el error "El RUT no es válido" bajo el campo RUT
Y la cuenta "Comercial Inválida Ltda" no se crea
Escenario: E3 - Rechazar un RUT duplicado
Cuando abro el formulario "Nueva cuenta"
Y completo el nombre "Minera Atacama Duplicada"
Y completo el RUT "96.790.240-3"
Y guardo la cuenta
Entonces veo el error "Ya existe una cuenta con este RUT" bajo el campo RUT
Y la cuenta "Minera Atacama Duplicada" no se crea
Escenario: E4 - Buscar una cuenta por RUT sin puntos ni guion
Cuando escribo "967902403" en el buscador de cuentas
Entonces el listado muestra solo la cuenta "Minera Atacama SpA"
Escenario: E5 - Agregar un RUT con "k" minúscula a una cuenta existente
Dado que la cuenta "Transportes del Sur Ltda" no tiene RUT
Cuando edito la cuenta "Transportes del Sur Ltda"
Y completo el RUT "76354771-k"
Y guardo los cambios
Entonces la ficha de detalle muestra el RUT "76.354.771-K"
Escenario: E6 - El RUT es opcional
Cuando creo la cuenta "Consultora Sin RUT" sin completar el RUT
Entonces la cuenta "Consultora Sin RUT" se crea correctamente
Y la ficha de detalle muestra "-" en el RUT