The Revisoría Fiscal evaluation atDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/gcsconsultores/centros-estrategicos-gcs/llms.txt
Use this file to discover all available pages before exploring further.
/evaluacion is a 6-question interactive assessment that determines whether a Colombian company must appoint a Revisor Fiscal under current commercial law. Rather than presenting a static form, Sally guides the user through each question as a natural chat conversation, collecting a yes/no answer before advancing to the next applicable question. Once all relevant answers are gathered, calculateRFResult() applies the decision rules and returns one of three result types with a tailored description, recommendations, and a call to action.
Legal Thresholds (2026)
The financial limits used to evaluate asset and income obligations are based on the 2026 Colombian minimum monthly wage (SMMLV). They are defined as constants inlib/evaluation.ts:
The 6 Questions
EachRFQuestion has a numeric id, a question string shown to the user in the chat, and a legalBase that identifies the regulation behind it.
- ¿La razón social de su empresa es Sociedad Anónima (S.A.), comandita por acciones o sucursal de sociedad extranjera? Legal base: Código de Comercio
- ¿La razón social de su empresa es una S.A.S. o Limitada? Legal base: Clasificación especial
- ¿Al cierre de 2025 sus activos superaron los 5.000 SMMLV ($7.117.500.000 COP)? Legal base: Topes legales
- ¿Al cierre de 2025 sus ingresos superaron los 3.000 SMMLV ($4.270.500.000 COP)? Legal base: Topes legales
- ¿Sus estatutos o socios exigen tener Revisor Fiscal? Legal base: Estatutario
- ¿Su empresa pertenece a un sector con obligación especial de Revisoría Fiscal? Legal base: Norma especial
Not all six questions are presented to every user. The evaluation page implements branching logic — for example, if the user answers Sí to Question 1 (S.A. or foreign branch), the result is determined immediately without asking the remaining questions.
Decision Logic
calculateRFResult() in lib/evaluation.ts applies five rules in order and returns the first matching result. The function receives an answers object keyed by question id.
LEGALLY_REQUIRED via Rule 1 before Rule 3 is even checked.
Result Types
The three possible outcomes are defined inRF_RESULTS inside lib/evaluation.ts.
| Type | Key | Title | Lead Level |
|---|---|---|---|
| A | LEGALLY_REQUIRED | Su empresa podría estar obligada a tener Revisor Fiscal. | alto |
| B | HIGH_PROBABILITY | Se identifican topes financieros que podrían generar obligación. | medio |
| C | VOLUNTARY | No se observa obligación inmediata. | bajo |
leadLevel field is used by the GCS CRM pipeline to prioritise follow-up: a leadLevel: 'alto' result triggers an executive-review CTA, while 'bajo' surfaces a softer benefits-focused CTA.
RFResult Interface
Each result object contains everything needed to render the outcome card and route the lead:recommendations array contains the action items shown in EvaluationResult with a checkmark prefix. The cta string is used as the label for the primary action button at the bottom of the result card.
Evaluation Flow
User visits /evaluacion
The page renders a header with the GCS logo, a title (Evaluación Revisoría Fiscal 2026), and the
SallyEvaluationChat widget fixed to the bottom-right of the screen. Sally immediately sends her welcome message: “Hola 👋 Soy Sally, consultora virtual de GCS…”EvaluationForm captures lead information
Before any questions are asked,
EvaluationForm renders inside the chat panel and collects six fields: Empresa, Nombre contacto, Cargo, Correo, Teléfono, and Ciudad. The user submits by clicking Iniciar Evaluación.Sally introduces the assessment and asks Q1
On form completion,
onFormComplete is called. Sally sends the transition message “Perfecto. Ahora iniciaré la evaluación.” followed immediately by Question 1.User answers Sí / No for each applicable question
Two large buttons — Sí (green) and No (red) — appear at the bottom of the chat panel whenever there is an active
currentQuestion. Each answer is appended to chatHistory and passed to handleAnswer(), which applies the branching logic to determine the next question or trigger the result.calculateRFResult() determines the outcome
Once a terminal condition is reached,
calculateRFResult(answers) is called with the accumulated answers map. It returns the matching RFResult object from RF_RESULTS.The Compliance room (
/rooms/compliance) also embeds a shorter version of this evaluation via SallyComplianceChat, allowing visitors to start a quick Revisoría Fiscal assessment directly from within the virtual office without navigating to /evaluacion.