Files
Kontia/OCR_PDF_Lookup_instructions.md
Marcelo Dares 65aaf9275e initial push
2026-03-15 15:03:56 +01:00

20 KiB

We are going to be looking up certain information that is relevant to what we are loking for. Im going to provide you with a "dictionary" of some of the most common things we are going to be looking for and with that, we are going too be able to "fill in" that information for that company profile and fill in when applicable in onboarding/for later steps. Below is the dictionary, please understand this and modify our initial analysis during onboarding so that we can pre-fill as much of the information that we are asking for. If the information is not available, then we must leave blank and client fills in.

version: "mx_acta_constitutiva_reference_v1" doc_types_supported:

  • "acta constitutiva / escritura constitutiva"
  • "escritura pública (constitución / protocolización)"
  • "instrumento notarial (sociedad mercantil)" normalization_recommended:
  • "lowercase + remove extra spaces"
  • "normalize accents (opcional) + normalize punctuation (.,;:)"
  • "normalize OCR confusions: 0/O, 1/I, rn/m, cv/c.v./c v"
  • "build a 'lines' array + also a 'full_text' string"
  • "detect clause blocks: regex on (cl[aá]usula|clausula|primera|segunda|tercera|cuarta|quinta|sexta|séptima|octava|novena|décima|undécima...)"
  • "keep page references if possible (for audit trail)"

------------------------------------------------------------

0) METADATOS DEL DOCUMENTO (no del negocio, sino del instrumento)

------------------------------------------------------------

document_metadata:

  • key: "instrument_type" type: "string" anchors:

    • "escritura pública"
    • "escritura publica"
    • "instrumento número"
    • "instrumento numero"
    • "acta constitutiva"
    • "constitución de la sociedad" regex_hints:
    • "(escritura\s+p[úu]blica|acta\s+constitutiva|constituci[oó]n\s+de\s+la\s+sociedad)" notes:
    • "Útil para clasificar si es constitución o modificación."
  • key: "instrument_number" type: "string" anchors:

    • "escritura número"
    • "escritura no."
    • "instrumento número"
    • "instrumento no."
    • "número de escritura" regex_hints:
    • "(escritura|instrumento)\s*(n[uú]mero|no\.?|n\.?)[\s:]*([0-9]{1,10})" notes:
    • "OCR puede separar 'No.' o confundir ':'; usa fuzzy matching."
  • key: "protocol_volume_book" type: "string" anchors:

    • "libro"
    • "tomo"
    • "volumen"
    • "protocolo" regex_hints:
    • "(tomo|libro|volumen)\s*[:#]?\s*([0-9]{1,10}|[ivxlcdm]+)" notes:
    • "A veces hay 'tomo' y 'libro'; guárdalo tal cual."
  • key: "instrument_date" type: "date" anchors:

    • "a los"
    • "en la ciudad de"
    • "siendo las"
    • "del año"
    • "de dos mil" regex_hints:
    • "(a\s+los?\s+.?\s+del\s+mes\s+de\s+.?\s+del\s+a[nñ]o\s+.*)"
    • "([0-3]?\d)\s+de\s+(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|setiembre|octubre|noviembre|diciembre)\s+de\s+(\d{4})" notes:
    • "Mucho viene en letra ('dos mil veintidós'). Necesitas parser de números en español."
    • "Guarda también raw_text + parsed_date + confidence."
  • key: "place_of_granting" type: "string" anchors:

    • "en la ciudad de"
    • "municipio de"
    • "estado de"
    • "comparecen" regex_hints:
    • "en\s+la\s+ciudad\s+de\s+([^,\n]+)" notes:
    • "Puede venir como 'Monterrey, Nuevo León' o 'Municipio de ...'"

------------------------------------------------------------

1) NOTARÍA / FEDATARIO

------------------------------------------------------------

notary:

  • key: "notary_name" type: "string" anchors:

    • "licenciado"
    • "lic."
    • "notario público"
    • "notario publico"
    • "titular de la notaría" regex_hints:
    • "(notario\s+p[úu]blico\s*(n[uú]mero|no\.?|n\.)\s*[0-9]+\s*[^\n,],?\s(?:lic\.?|licenciado)?\s*([A-ZÁÉÍÓÚÑ ].{3,}))" notes:
    • "A veces el nombre está antes y el número después; parsea ambos por separado."
  • key: "notary_number" type: "string" anchors:

    • "notaría número"
    • "notaría no."
    • "notario público número" regex_hints:
    • "(notar[ií]a|notario\s+p[úu]blico)\s*(n[uú]mero|no\.?|n\.)\s*([0-9]{1,4})" notes:
    • "OCR puede leer '1O' por '10'. Normaliza."
  • key: "notary_state" type: "string" anchors:

    • "del estado de"
    • "con residencia en"
    • "estado de" regex_hints:
    • "(del\s+estado\s+de|estado\s+de)\s+([^,\n]+)" notes:
    • "No siempre viene explícito; a veces se infiere por el domicilio de la notaría (mejor no inferir)."

------------------------------------------------------------

2) IDENTIDAD DE LA SOCIEDAD (lo más valioso para licitaciones)

------------------------------------------------------------

company_identity:

  • key: "legal_name" type: "string" anchors:

    • "denominación"
    • "denominacion"
    • "razón social"
    • "razon social"
    • "se denominará"
    • "se denomina" regex_hints:
    • "(denominaci[oó]n|raz[oó]n\s+social)\s*(?:social)?\s*(?:ser[aá]|es|de)\s*[:“"]?\s*([A-Z0-9ÁÉÍÓÚÑ \-\.&]+)" notes:
    • "A veces el nombre va entre comillas; a veces va en mayúsculas sin comillas."
    • "Guarda también una versión 'normalized_name' (sin S.A. de C.V. etc.)"
  • key: "company_type" type: "enum" allowed_values:

    • "SA_DE_CV"
    • "SA"
    • "S_DE_RL_DE_CV"
    • "S_DE_RL"
    • "SAS"
    • "SAPI_DE_CV"
    • "SC"
    • "OTHER" anchors:
    • "sociedad anónima de capital variable"
    • "s.a. de c.v."
    • "sociedad de responsabilidad limitada de capital variable"
    • "s. de r.l. de c.v."
    • "sociedad por acciones simplificada"
    • "s.a.s."
    • "s.a.p.i. de c.v." regex_hints:
    • "(sociedad\s+an[oó]nima\s+de\s+capital\s+variable|s\.?\sa\.?\sde\sc\.?\sv\.?)"
    • "(sociedad\s+de\s+responsabilidad\s+limitada\s+de\s+capital\s+variable|s\.?\sde\sr\.?\sl\.?\sde\sc\.?\sv\.?)"
    • "(sociedad\s+por\s+acciones\s+simplificada|s\.?\sa\.?\ss\.?)" notes:
    • "Detecta por 'tipo largo' y por abreviaturas. Usa whitelist + fuzzy."
  • key: "domicile" type: "string" anchors:

    • "domicilio"
    • "domicilio social"
    • "tendrá su domicilio en" regex_hints:
    • "domicilio\s+(?:social\s+)?(?:ser[aá]|es|en)\s*[:]?\s*([^\n\.]+)" notes:
    • "Muchas veces sólo dice ciudad/estado, no calle."
  • key: "duration" type: "string" anchors:

    • "duración"
    • "duracion"
    • "tiempo de duración"
    • "será de"
    • "indefinida" regex_hints:
    • "duraci[oó]n\s*(?:ser[aá]|es)\s*[:]?\s*(indefinida|[0-9]{1,3}\s+a[nñ]os)" notes:
    • "Indefinida es común."
  • key: "corporate_purpose" type: "string" anchors:

    • "objeto"
    • "objeto social"
    • "la sociedad tendrá por objeto"
    • "tendrá por objeto" regex_hints:
    • "(objeto\s+social|la\s+sociedad\s+tendr[aá]\s+por\s+objeto)\s*[:]?\s*(.+)" notes:
    • "Suele ser un párrafo largo; extrae bloque hasta la siguiente cláusula."
    • "Para licitaciones, también conviene crear 'purpose_keywords' (NLP) pero eso ya es capa 2."

------------------------------------------------------------

3) REGISTROS / INSCRIPCIÓN (cuando existe en el mismo documento)

------------------------------------------------------------

registrations:

  • key: "rpc_reference" type: "object" subfields: ["folio_mercantil", "registro_publico", "inscription_date"] anchors:
    • "registro público de comercio"
    • "registro publico de comercio"
    • "folio mercantil"
    • "inscrita"
    • "inscripción" regex_hints:
    • "(folio\s+mercantil)\s*[:#]?\s*([A-Z0-9\-]+)"
    • "(registro\s+p[úu]blico\s+de\s+comercio)" notes:
    • "En constitución pura, a veces aún no está inscrita; en testimonios/modificaciones sí."

------------------------------------------------------------

4) SOCIOS / ACCIONISTAS / COMPARECIENTES (personas y participación)

------------------------------------------------------------

people_and_ownership:

  • key: "founders_list" type: "list