feat: ecosistema FRASA — apps Cotizador, Alta Clientes, Cobranza y Landing

- Cotizador (/quote): 4 propuestas con formulas validadas del Excel, comparador,
  combobox de unidades, vigencia, PDF ANEXO A
- Alta Clientes (/client): wizard 8 pasos, validacion CURP RENAPO, OCR de INE,
  checklist de expediente, firma digital, 5 PDFs legales
- Cobranza (/pay): planes de enganche, mora, vista cobranza del dia, recibos PDF,
  bitacora, dashboard con filtros
- Landing (/): entrada al ecosistema
- Design system StudioBlank (monocromo, acento #1B4332) en las 4 apps
- 123 tests vitest
This commit is contained in:
2026-08-21 22:27:36 +00:00
commit ecd4edac02
147 changed files with 27345 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
import type {
EstadoCivil,
RegimenBienes,
TipoVivienda,
TipoCompra,
TipoEmpleo,
TipoEconomia,
TipoProducto,
TipoCredito,
SlotDocumento,
} from '../types'
export const PROYECTOS = ['RESIDENCIAL MONTEBELLO', 'SENDA', 'DIAGONAL', 'OTRO'] as const
export const ESTADOS_CIVILES: { valor: EstadoCivil; etiqueta: string }[] = [
{ valor: 'SOLTERO', etiqueta: 'Soltero(a)' },
{ valor: 'CASADO', etiqueta: 'Casado(a)' },
{ valor: 'UNION_LIBRE', etiqueta: 'Unión libre' },
{ valor: 'DIVORCIADO', etiqueta: 'Divorciado(a)' },
{ valor: 'VIUDO', etiqueta: 'Viudo(a)' },
]
export const REGIMENES_BIENES: { valor: RegimenBienes; etiqueta: string }[] = [
{ valor: 'SOCIEDAD_CONYUGAL', etiqueta: 'Sociedad conyugal' },
{ valor: 'SEPARACION_BIENES', etiqueta: 'Separación de bienes' },
]
export const TIPOS_VIVIENDA: { valor: TipoVivienda; etiqueta: string }[] = [
{ valor: 'PRESTADA', etiqueta: 'Prestada' },
{ valor: 'RENTADA', etiqueta: 'Rentada' },
{ valor: 'FAMILIAR', etiqueta: 'Familiar' },
{ valor: 'PROPIA', etiqueta: 'Propia' },
]
export const TIPOS_COMPRA: { valor: TipoCompra; etiqueta: string }[] = [
{ valor: 'INVERSION', etiqueta: 'Inversión' },
{ valor: 'VIVIR_AHI', etiqueta: 'Vivir ahí' },
]
export const TIPOS_EMPLEO: { valor: TipoEmpleo; etiqueta: string }[] = [
{ valor: 'ASALARIADO', etiqueta: 'Asalariado' },
{ valor: 'INDEPENDIENTE', etiqueta: 'Independiente' },
]
export const TIPOS_ECONOMIA: { valor: TipoEconomia; etiqueta: string }[] = [
{ valor: 'E_MEXICANA', etiqueta: 'Economía mexicana' },
{ valor: 'E_AMERICANA', etiqueta: 'Economía americana' },
{ valor: 'MIXTO', etiqueta: 'Mixta' },
]
export const TIPOS_PRODUCTO: { valor: TipoProducto; etiqueta: string }[] = [
{ valor: 'PESOS_FIJOS', etiqueta: 'Pesos fijos' },
{ valor: 'PESOS_CRECIENTES', etiqueta: 'Pesos crecientes' },
{ valor: 'VSM', etiqueta: 'VSM' },
]
export const TIPOS_CREDITO: { valor: TipoCredito; etiqueta: string }[] = [
{ valor: 'INFONAVIT', etiqueta: 'Infonavit' },
{ valor: 'APOYO_INFONAVIT', etiqueta: 'Apoyo Infonavit' },
{ valor: 'COFINAVIT', etiqueta: 'Cofinavit' },
{ valor: 'SEGUNDO_CREDITO', etiqueta: 'Segundo crédito' },
{ valor: 'CONTADO', etiqueta: 'Contado' },
{ valor: 'FOVISSSTE', etiqueta: 'Fovissste' },
{ valor: 'COFI_FOVISSSTE', etiqueta: 'Cofi-Fovissste' },
{ valor: 'BANCARIO', etiqueta: 'Bancario' },
]
export const SLOTS_DOCUMENTOS: { slot: SlotDocumento; etiqueta: string }[] = [
{ slot: 'INE', etiqueta: 'Identificación oficial (INE)' },
{ slot: 'CONSTANCIA_RFC', etiqueta: 'Constancia RFC / CSF' },
{ slot: 'CURP', etiqueta: 'CURP' },
{ slot: 'COMPROBANTE_DOMICILIO', etiqueta: 'Comprobante de domicilio' },
{ slot: 'ACTA_NACIMIENTO', etiqueta: 'Acta de nacimiento' },
]
export const TAMANO_MAX_DOCUMENTO = 10 * 1024 * 1024 // 10 MB
export const ASESOR_DEFAULT = 'ESMERALDA BECERRA DOMINGUEZ'
export const AUTORIDAD_ID_DEFAULT = 'INSTITUTO NACIONAL ELECTORAL'