Saltar al contenido principal

RF13: Usuario registra RFC

Descripción

Como usuario autenticado, quiero registrar mi RFC para poder generar mi declaración anual y solicitar facturas electrónicas.

El RFC es un dato de identificación fiscal de sensibilidad media; se almacena en Finnova DB con cifrado de disco (EBS) y se valida contra el formato oficial del SAT.

CampoValor
MóduloFinance Data Collection (FDC) Module
ActorUsuario autenticado
EndpointPUT /finance/rfc
PrecondicionesSesión activa
PrioridadMedia (habilita Accounting — RF40, RF63)
EtapaMVP
Requisitos relacionadosRF40, RF63

Reglas de negocio

  • RN-13.1 — El RFC se valida contra el formato oficial (persona física: 13 caracteres; moral: 12), incluyendo homoclave.
  • RN-13.2 — El RFC se normaliza a mayúsculas y se elimina espacios.
  • RN-13.3 — Un mismo usuario tiene un único RFC; registrar de nuevo lo actualiza.
  • RN-13.4 — Tratado como dato personal: cifrado en reposo y no expuesto en logs.

Validaciones de entrada

CampoReglasMensaje de error
rfcObligatorio. Formato SAT válido (regex). 12–13 caracteres."Ingresa un RFC válido."

Validación por expresión regular del formato SAT y consultas parametrizadas; no se aceptan inyecciones SQL ni caracteres fuera del patrón.

Criterios de aceptación

Escenario 1: Registro de RFC exitoso

Dado que ingreso un RFC con formato válido, Cuando lo guardo, Entonces el sistema lo normaliza, lo persiste cifrado y responde 200 OK, Y habilita las funciones fiscales (factura, declaración).

Escenario 2: RFC con formato inválido

Dado que ingreso un RFC mal formado (longitud o patrón incorrecto), Cuando intento guardarlo, Entonces el sistema responde 400 con "Ingresa un RFC válido", Y no se persiste.

Escenario 3: Actualización de RFC existente

Dado que ya tengo un RFC registrado, Cuando registro uno nuevo válido, Entonces el sistema reemplaza el anterior.

Escenario 4: Entrada maliciosa (seguridad)

Dado que ingreso caracteres con intento de inyección SQL, Cuando el backend valida, Entonces la entrada se rechaza por no cumplir el patrón y la inyección no se ejecuta.

Criterios no funcionales

  • RFC cifrado en reposo; no aparece en logs.
  • Comunicación sobre TLS 1.2+.

Diagrama de secuencia