Stage 2 — Map Variables (Mapeo candidato)
Segunda etapa. Produce un primer mapeo de cada campo del cliente a una variable de Trébol. Es un borrador fundamentado, no la decisión final.Responsabilidad
Una sola cosa: por cada campo de Stage 1, proponer la variable de Trébol más probable (o marcar que no hay / es ambigua), con confianza y racional. No discute, no decide: eso es Stage 3. Mantener el borrador (este stage) separado de la crítica (Stage 3) es intencional — evita que quien propone defienda complacientemente su propia propuesta.Grounding que cargas
grounding/dictionary-example.json(+dictionary-example.md) — payload real de variables: fuente primaria para confirmar la grafía exacta de una variable y su forma (escalar → variable simple; lista → bucle/instancias; objeto → sub-campos). Consúltalo programáticamente (grep/python), no lo cargues entero. Si una variable está aquí, así se escribe. Recuerda el caveat: es un payload de UNA verificación, la ausencia no descarta una variable.grounding/variable-catalog.md— el universo de variables permitidas (incluye familias que el payload puede no tener).grounding/sintaxis-plantillas.md— para decidir si un campo se expresa como variable simple, bucle o inverso.grounding/example-template-reference.md— patrones probados sección por sección. Si la plantilla del cliente tiene una sección análoga a la referencia, reusa el patrón de la referencia.corrections.md— máxima prioridad ante conflicto.
Proceso
Paso 1 — Resolver país/familia
Segúncountry de Stage 1, restringe el universo: México → familias legal_*/tax_*/key_person_*/shareholder_*/board_member_*/executive_*/auditor_*/external_sources_*/ubos_business_*; Colombia → rut_co/cc_co_ops/rues/public_*/ubos_*. No propongas variables de la familia equivocada.
Paso 2 — Mapear cada campo
Para cada campo, en este orden de evidencia:- Ejemplo diligenciado (si existe): el
example_valuecasi determina la variable (ej. un RFC →{tax_businessTaxId}; una fecha de constitución →{registration_registrationDate}). - Coincidencia con la plantilla de referencia: si la etiqueta y la sección equivalen a una sección de la referencia, copia el token de la referencia.
- Coincidencia semántica de etiqueta contra el catálogo (ej. “DURACIÓN” →
{legal_businessDuration}; “DOMICILIO FISCAL” →{fiscalAddress}). - Confirma grafía y forma contra
dictionary-example.json: una vez que tienes la variable candidata, verifica en el payload real que la clave existe con esa grafía exacta y qué forma tiene su valor (escalar/lista/objeto). Si el valor es lista → es bucle/instancias; si es escalar → variable simple. Si la candidata está en el JSON, sube la confianza; si no está pero sí en catálogo/referencia, mantén la candidata pero recuerda que la ausencia en el payload no la descarta.
kind y has_loops_capable:
single→ variable simple.table_rowen Word → bucle{#lista}…{/}con variables relativas.table_rowen PDF → no hay bucle: propón variables indexadas para las primeras N instancias conocidas (key_person_1,key_person_2, … /shareholder_0,shareholder_1, …) y marcapdf_repeat_limitpara que Stage 3 decida cuántas instancias configurar.source_clause→ patrón condicional+inverso de FUENTE (ver referencia).checkbox_like→ variable*_x_mark.
Paso 3 — Asignar resultado por campo
variable: el/los token(s) propuestos, ya con la sintaxis correcta.confidence:alta(ejemplo diligenciado, referencia exacta, o variable confirmada endictionary-example.json) |media(etiqueta clara) |baja(inferencia).status:MAPEADO|AMBIGUO(varias variables posibles — lístalas) |SIN_VARIABLE(no existe variable para este campo).rationale: 1–3 frases. Obligatorio. Cita la fuente de evidencia (ejemplo/referencia/catálogo).flags: numeración (1-based vs 0-based), poderdelegateno documentado, separador_/-Colombia, mayúsculas, espacios en llaves, etc. — cualquier gotcha del grounding que aplique.
Paso 4 — No inventar
Si un campo no tiene variable en el catálogo/referencia/web,SIN_VARIABLE con nota. No “deduzcas” un ID plausible. Ejemplos de campos sin variable habituales: datos que el cliente pide pero Trébol no extrae (notas internas, folios propios del cliente, firmas manuscritas, sellos).
Paso 5 — Verificar existencia
Cada variable propuesta debe existir literalmente en el grounding. Si no estás seguro de que exista (ej. una variante de domicilio), márcalaconfidence: baja y flags: verificar_existencia para que Stage 3 la valide (incluso consultando la doc web).
Output (markdown para Stage 3)
Reglas duras
- No inventes variables. Solo del grounding/web. Sin coincidencia →
SIN_VARIABLE. - Familia correcta por país. Nada de
legal_*en plantilla Colombia nirut_coen México. - Respeta forma vs capacidad. Bucles solo si
has_loops_capable. En PDF, indexa. - Numeración correcta. Apoderados 1-based; accionistas/órganos 0-based. Marcar en
flags. - Racional siempre, citando evidencia.
- No decidas desacuerdos. Si hay dos variables plausibles,
AMBIGUOcon ambas; Stage 3 decide.
Manejo de errores
- Campo ya tokenizado por el cliente: valida que la variable exista; si está mal escrita (espacio en llaves, mayúsculas), propón la corrección y marca
flags: corregir_token_cliente. - Sin ejemplo diligenciado: apóyate en referencia + etiqueta; sube la proporción de
AMBIGUOen vez de adivinar. - Sección no cubierta por el catálogo (ej. una consulta externa nueva): márcala
SIN_VARIABLEconflags: posible_variable_no_catalogadapara que Stage 3 consulte la doc web.
Checklist
- Todos los campos de Stage 1 tienen una entrada.
- Cada variable propuesta existe en el grounding (o está marcada para verificar).
- Forma (simple/bucle/inverso/x_mark) coherente con tipo de archivo.
- Numeración y gotchas marcados en
flags. -
SIN_VARIABLEusado en vez de inventar. - Racional con evidencia en cada campo.