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'

View File

@@ -0,0 +1,148 @@
// Textos legales copiados textualmente de los formatos originales de Frasa Desarrollos
// (reference/alta-clientes/). NO corregir ortografía ni redacción: son documentos legales.
/** Aviso de privacidad sinóptico — versión completa del Excel (excel_aviso_de_privacidad.txt) */
export const AVISO_PRIVACIDAD_TITULO = 'AVISO DE PRIVACIDAD\n(SINOPTICO)'
export const AVISO_PRIVACIDAD_PARRAFOS: string[] = [
'Se constituye el presente AVISO DE PRIVACIDAD de acuerdo a lo previsto en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares, el reglamento de la misma, y demás leyes aplicables, declarando la moral, FRASA DESARROLLOS SAPI DE C.V, (en adelante “LA MORAL”) ser una Sociedad Mercantil legalmente constituida de conformidad con las leyes de los Estados Unidos Mexicanos, con domicilio en Blvd. Fundadores No. 3078-E, Colonia Juárez, Tijuana Baja California, misma que en adelante será responsable del tratamiento de sus datos personales y sensibles.',
'“LA MORAL” manifiesta que en cumplimiento de la Ley en referencia y su reglamento así como sus propios lineamientos corporativos, los datos personales y/o sensibles que usted nos proporcione, de manera enunciativa mas no limitativa se señalan como tales, nombre completo, domicilio, fecha de nacimiento, número telefónico, cuenta de correo particular, datos financieros, patrimoniales, entre otros; serán tratados como “Información Confidencial” y de conformidad con las leyes aplicables, y podrán ser recabados por “LA MORAL”, siempre y cuando el titular de los mismos datos personales y/o sensibles los proporcione voluntariamente a través de cualquier medio; manifestando que solo serán compartidos o transmitidos por empresas que integran el denominado grupo FRASA DESARROLLOS, no con personas distintas, ya que para evitar su divulgación toma las acciones necesarias y los procedimientos de seguridad que se requieran para ello. (A excepción de que sea solicitada por alguna autoridad, a quien le pudiera ser proporcionada).',
'Derivado de lo anterior, el presente aviso de privacidad tiene como finalidad obtener información para realizar las gestiones correspondientes para la obtención de créditos, actualización de base de datos, relación comercial, de proveeduría, contractual, de servicios, y cualquier finalidad análoga o compatible con las anteriores, sin que la firma del presente implique una obligación de contratación o la celebración de una relación contractual. Asimismo, “LA MORAL” manifiesta que los datos personales, se podrán utilizar en campañas de publicidad y mercadotecnia, administración interna y otros fines análogos y lícitos.',
'Se entiende que usted consciente tácitamente el tratamiento de sus datos personales y sensibles, cuando nos proporciona expresamente su autorización o voluntariamente su información, datos personales y sensibles por cualquier medio, y/o cuando se pone a su disposición el presente aviso de privacidad, y usted no manifiesta de manera expresa su oposición.',
'Usted podrá actualizar su información o manifestar que no desea recibir información o revocar su consentimiento en cualquier momento sin que se le atribuyan efectos retroactivos, en caso de no contar con oposición expresa o especificación, “LA MORAL” podrá a través de los medios y procedimientos implementados libremente y a consideración de “LA MORAL”. Si desea conocer dichos medios y procedimientos, puede ponerse en contacto o podrá presentar sus solicitudes de derechos de acceso, rectificación, cancelación u oposición (ARCO) y/o la revocación de su consentimiento mediante envió al correo electrónico info@frasa.com.mx o al teléfono 6768100.',
'Para mayor información acerca del contenido completo del presente, del tratamiento de los datos y de los derechos que puede hacer valer, usted puede acceder al aviso de privacidad integral a través del portal www.frasa.com.mx/aviso-de-privacidad/',
'“LA MORAL” se reserva el derecho de modificar o actualizar el presente aviso de privacidad, por lo que cualquier modificación que en el futuro hiciéramos al presente aviso, estará disponible en nuestro portal de internet, y será responsabilidad de quien proporciono los datos personales o sensibles revisar periódicamente el contenido del mismo.',
]
/** Párrafo final del aviso: interpola el nombre del cliente */
export function avisoPrivacidadParrafoFinal(nombreCliente: string): string {
return `El suscrito (a) ${nombreCliente} bajo protesta de decir verdad manifiesto expresamente que he leído el presente, me ha sido explicado y estoy enterado (a) del valor y fuerza legal del mismo, y doy autorización expresa a FRASA DESARROLLOS SAPI DE C.V. para obtener, compilar, almacenar, custodiar, tratar, compartir, trasmitir y usar la información y/o datos personales y sensibles, de conformidad con los establecido en el presente, y en las leyes aplicables.`
}
/** Carta de no pagos en efectivo (anti-lavado) — texto completo del Excel (excel_no_pagos_en_efectivo.txt) */
export function cartaAntilavadoCuerpo(proyecto: string): string {
return `Por medio de la presente le enviamos un cordial saludo y aprovechamos para hacer de su conocimiento que derivado de nuestro compromiso en brindarle un servicio de calidad y al mismo tiempo cumplir con la legislación mexicana, es necesario informarle que en relación al Contrato de Compraventa que desea celebrar con mi representada (Frasa Desarrollos SAPI C.V.) y respecto a su interés de adquirir algún condominio del proyecto ${proyecto}, de esta Ciudad de Tijuana, B.C.; se le hace de su conocimiento que todos los pagos que realice en efectivo para cubrir el precio del inmueble, no deberán sumar la cantidad de $600,000.00 Pesos (SEISCIENTOS MIL PESOS 00/100 MONEDA NACIONAL) o su equivalente en Dólares Moneda Americana, lo anterior como límite durante toda la vigencia del futuro Contrato de Compraventa y hasta que el precio del inmueble haya sido cubierto en su totalidad, y su entonces obligación de pago haya finalizado. Indicándole que los pagos a cuenta del precio del inmueble que elija, y que sean por cantidad superior a la citada, deberán efectuarse por medio de cheque de su cuenta personal o transferencia electrónica de su cuenta bancaria.`
}
export const CARTA_ANTILAVADO_CIERRE =
'Lo anterior es en cumplimiento a lo estatuido en el Artículo 32, fracción I y demás relativos y aplicables de la Ley Federal para la Prevención e Identificación de Operaciones con Recursos de Procedencia Ilícita y demás disposiciones legales vigentes sobre la materia, por lo cual se le hace de su conocimiento que en caso de realizar operaciones o pagos en efectivo por la cantidad mencionada anteriormente, no le serán recibidos, e implicaría la imposición de sanciones en materia fiscal y penal de conformidad con la legislación vigente.'
export const CARTA_ANTILAVADO_DESPEDIDA =
'Sin más por el momento, quedo a su total disposición para cualquier duda o aclaración.'
// Textos del formato PLD de identificación de clientes (pdf_formatos.txt página 4 / excel_antilavado.txt)
export const PLD_TEXTO_PROTECCION_DATOS =
'En términos de lo dispuesto por los Artículos 8, 15, 16, 17 y demás relativos y aplicables de la Ley Federal de Protección de Datos Personales en Posesión de los Particulares, el que suscribe manifiesta que se ha puesto a mi disposición el Aviso de Privacidad a que se refiere la mencionada ley, y se me ha informado que el mismo que se puede consultar en www.frasa.com.mx\nEn cumplimiento a lo dispuesto por la Ley Federal de Protección de Datos Personales en Posesión de los Particulares, así como del Artículo 14 de las reglas de carácter general a que se refiere la Ley Federal para la Prevención e Identificación de Operaciones con Recursos de Procedencia Ilícita, el que suscribe, otorgo mi consentimiento para que el vendedor y/o arrendador designe para la custodia del expediente que contiene mi información personal a Frasa Desarrollos SAPI C.V. , aceptando que dicha información sea proporcionada a cualquiera de las empresas que integran el denominado grupo "frasa desarrollos", para el caso de que realice con cualquiera de ellos, alguna otra operación; y/o con alguna autoridad que lo requiera.'
export const PLD_TEXTO_DOCUMENTOS_INTEGRAN =
'Bajo protesta de decir verdad manifiesto expresamente que los documentos que se agregan al presente formato y que se describen a continuación fueron proporcionados libremente por el suscrito, siendo copia fiel de los originales que se tuvieron a la vista, y que conozco las penas en que incurren quienes declaran con falsedad, de conformidad con lo señalado en el Artículo 62 de la Ley Federal de Prevención e Identificación de Operaciones con Recursos de Procedencia Ilícita, y demás leyes aplicables.'
export const PLD_TEXTO_BENEFICIARIO =
'Bajo protesta de decir verdad manifiesto que tengo conocimiento de la existencia del dueño beneficiario/beneficiario controlador/beneficiario efectivo, firmando al calce para constancia'
export const PLD_TEXTO_RESPONSABILIDAD =
'El suscrito asume totalmente la responsabilidad por cualquier dato falso o inexactitud que existiera en lo declarado en el presente y por la información o documentación proporcionada.'
export const PLD_TEXTO_OTRO_FORMATO =
'Llenar otro formato con los datos y documentos del dueño beneficiario/beneficiario controlador/beneficiario efectivo.'
// Formato de identificación del beneficiario controlador (pdf_formatos.txt página 10)
export function beneficiarioControladorIntro(nombreCliente: string, ubicacion: string, condominio: string): string {
return `El/La suscrito/a ${nombreCliente} en virtud de la futura operación de compraventa respecto del inmueble denominado como unidad habitacional identificada tentativamente como número ${ubicacion} del Condominio Habitacional ${condominio} de esta Ciudad de Tijuana, B.C., que deseo celebrar con la moral FRASA DESARROLLOS, S.A.P.I. de C.V., por medio de la presente expresamente manifiesto lo siguiente: Que estoy consciente que la naturaleza jurídica de la futura operación de compraventa que deseo celebrar, constituye una actividad vulnerable que podrá ser materia de verificación por la Unidad Especializada en Análisis Financieros de la Procuraduría General de Justicia de la Republica o por la Secretaria de Hacienda y Crédito Publico conforme a lo previsto por los artículos 3, 8, 17 Fracción V y 18 de la Ley Federal para la Prevención e Identificación de Operaciones con Recursos de Procedencia Ilícita. Asimismo, en virtud de lo estipulado en el artículo 3 Fracción III de la Ley Federal para la Prevención e Identificación de Operaciones con Recursos de Procedencia Ilícita, respecto a la definición del Beneficiario Controlador, misma que a continuación es agregada a la letra:`
}
export const BENEFICIARIO_CONTROLADOR_ARTICULO3 =
'Artículo 3. Para los efectos de esta Ley, se entenderá por: I. Actividades Vulnerables, a las actividades que realicen las Entidades Financieras en términos del artículo 14 y a las que se refiere el artículo 17 de esta Ley; II. Avisos, a aquellos que deben presentarse en términos del artículo 17 de la presente Ley, así como a los reportes que deben presentar las entidades financieras en términos del artículo 15, fracción II, de esta Ley; III. Beneficiario Controlador, a la persona o grupo de personas que: a) Por medio de otra o de cualquier acto, obtiene el beneficio derivado de éstos y es quien, en última instancia, ejerce los derechos de uso, goce, disfrute, aprovechamiento o disposición de un bien o servicio, o b) Ejerce el control de aquella persona moral que, en su carácter de cliente o usuario, lleve a cabo actos u operaciones con quien realice Actividades Vulnerables, así como las personas por cuenta de quienes celebra alguno de ellos.'
export const BENEFICIARIO_CONTROLADOR_MANIFIESTO =
'Bajo protesta de decir verdad, manifiesto que soy el único Beneficiario Controlador de la Actividad Vulnerable que se realizará, consistente en la futura compraventa o transmisión de derechos reales sobre el inmueble antes citado, ya que NO existe ningún otro beneficiario, para lo cual se agrega la siguiente información:'
export const BENEFICIARIO_CONTROLADOR_CIERRE =
'Bajo protesta de decir verdad manifiesto expresamente que la información que se agrega, es proporcionada libremente por el/la suscrito/a, por lo que manifiesto que conozco las penas en que incurre quien proporcione de manera dolosa (a quienes deba dar información), documentación, datos o imágenes que sean falsos, o que declare con falsedad. Derivado de lo anterior, manifiesto mi conformidad en que esta información sea parte del archivo de identificación del cliente que ordena la legislación aplicable, firma la presente declaración bajo protesta de decir verdad, en la ciudad de Tijuana, B.C.'
// Checklist de expediente (pdf_formatos.txt página 1)
export const CHECKLIST_BASICO: string[] = [
'Formatos Generales***',
'Identificación oficial',
'Validación Identificación*',
'CURP',
'RFC',
'Acta de nacimiento original',
'Comprobante de domicilio',
'Cotizador firmado',
'Carta compromiso',
'Contrato original (3 tantos)',
'Copia de recibos',
]
export const CHECKLIST_ANTES_ESCRITURA: string[] = [
'Comprobación de ingresos',
'Acta de nacimiento conyuge',
'Acta de matrimonio',
'Solicitud de crédito',
'Buró de crédito',
]
export const CHECKLIST_NOTAS: string[] = [
'Los expedientes básicos deberán ser entregados con el mínimo de información requerida por administración y finanzas para hacer válido el pago de comisión, esto refiere a entregar: **Generales, **formatos de ley anti-lavado, contrato correctamente impreso y firmado en 3 tantos, carta compromiso, cotizador firmado con esquema de pago autorizado al cliente, Identificación oficial y comprobante de domicilio, copia de los recibos de pago y comprobantes de los mismos.',
'Los expedientes se deberán entregar una vez realizada la venta (pago de apartado + enganche + firma de contrato y carta compromiso) en un máximo de 48h posteriores a realizar la operación.',
'Será responsabilidad del asesor de ventas y de Gerencia el seguimiento a la integración del expediente para completar el proceso de venta hasta la escrituración.',
]
// Requisitos generales (pdf_formatos.txt página 8)
export const REQUISITOS_GENERALES: { titulo: string; items: string[] }[] = [
{
titulo: 'Documentos Generales:',
items: [
'Solicitud de crédito hipotecario (En caso de Infonavit, hoja número 3)',
'Autorización de consulta Buró de crédito',
'Copia de identificación oficial vigente con fotografía y firma de los solicitantes',
'Acta de nacimiento original y matrimonio (en su caso)',
'Comprobante de domicilio',
],
},
{
titulo: 'Documentos de Ingresos en México:',
items: [
'Carta original de empleo (Firmada por un funcionario autorizado en papelería membretada y con sello de la empresa, que contenga nombre del solicitante, R.F.C., puesto, antigüedad en la empresa, número de seguro social o de fovissste e ingresos mensuales brutos)',
'Últimos 3 meses de recibos de nómina originales',
'Estados de cuenta bancarios de 3 meses donde se refleje el concepto de abono de nómina',
],
},
{
titulo: 'Personas Físicas con actividad empresarial:',
items: [
'Copia de alta en Hacienda debidamente sellada',
'Copia de la Declaración anual de los 2 últimos ejercicios y parciales del año en curso',
'Copia de estados de cuenta de cheques de los últimos 6 meses',
],
},
{
titulo: 'Documento de ingresos en U.S.A.',
items: [
'Comprobante de Domicilio Reciente (no mayor a 3 meses)',
'Carta original de empleo',
'Formato W2 y 1040 (Income Tax) de 1 año en el mismo trabajo',
'Recibos de nómina de 3 meses',
'Reporte detallado de Buró de Crédito en U.S.A., con score superior a 680 puntos',
'Copia de estados de cuenta de cheques de los últimos 6 meses',
'Copia de Social Security',
],
},
{
titulo: 'ADEMÁS: Si es Persona Fisica con actividad empresarial formal o informal en U.S.A.',
items: [
'Carta a título personal de actividad (Mencionar ingreso promedio mensual, tipo de negocio y fecha de inicio)',
'Copia de 6 meses de estados de cuenta',
'Formato 1099 a 1040 (Income Tax del año anterior)',
'Permiso de operación Vigente',
'3 Referencias en U.S.A.',
],
},
]
export const REQUISITOS_CONTACTO_ENTREGA =
'Contacto: Graciela Bautista Velasco\nEJECUTIVO DE CRÉDITO IN-HOUSE\nOficina: (664) 676 8120\nCorreo: gbautista@frasa.com.mx'
export const REQUISITOS_CONTACTO_CONTRATO =
'Asesor: ALEJANDRA GUERRERO SANCHEZ\nOficina: COLINAS DE SAN PABLO 17516 COLINAS DE LA PRESA 221\nCelular: 6644275217\nCorreo: auxventas@frasa.com.mx'