136 lines
4.5 KiB
Python
136 lines
4.5 KiB
Python
"""Registro de todas las reglas built-in.
|
|
|
|
Añadir una regla nueva: implementa la función y llama a register_rule abajo.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from . import dates as date_rules
|
|
from . import documents as doc_rules
|
|
from . import numeric as num_rules
|
|
from . import special
|
|
from . import text as text_rules
|
|
from .registry import rebuild_cleaning_rules, register_rule
|
|
|
|
register_rule(
|
|
"strip_special_spaces",
|
|
name="Eliminar caracteres especiales y espacios",
|
|
description=(
|
|
"Deja solo caracteres alfanuméricos (A-Z, a-z, 0-9). No usar antes de "
|
|
"«Normalizar fecha» en columnas con fecha y hora: pega cifras y puede impedir "
|
|
"interpretar el valor (aplique primero la normalización de fecha o use la regla "
|
|
"que conserva separadores)."
|
|
),
|
|
fn=text_rules._rule_strip_special_spaces,
|
|
)
|
|
register_rule(
|
|
"strip_special_keep_date_seps",
|
|
name="Quitar símbolos; conserva /, -, : y espacios (fechas o texto con fechas)",
|
|
description=(
|
|
"Quita comas, $, comillas, etc. y deja letras, números, /, -, : (hora) y espacios. "
|
|
"Adecuado p. ej. en columna 'Fecha Servicio'."
|
|
),
|
|
fn=text_rules._rule_strip_special_keep_date_seps,
|
|
)
|
|
register_rule(
|
|
"strip_spaces",
|
|
name="Eliminar únicamente espacios",
|
|
description="Elimina todos los caracteres de espacio en blanco.",
|
|
fn=text_rules._rule_strip_spaces,
|
|
)
|
|
register_rule(
|
|
"to_integer",
|
|
name="Convertir a Entero",
|
|
description=(
|
|
"Convierte a enteros con detección de miles/decimal (`,`/`.`) y moneda; "
|
|
"redondea decimales."
|
|
),
|
|
fn=num_rules._rule_to_integer,
|
|
)
|
|
register_rule(
|
|
"date_to_ddmmyyyy",
|
|
name="Normalizar fecha → DD/MM/AAAA",
|
|
description=(
|
|
"Normaliza fechas numéricas, con separadores, con ruido o con meses en "
|
|
"texto (ej. 26-abril-2026) al formato DD/MM/AAAA."
|
|
),
|
|
fn=date_rules._rule_date_to_ddmmyyyy,
|
|
)
|
|
register_rule(
|
|
"date_numeric_to_ddmmyyyy",
|
|
name="Conversión de formato numérico (Fechas) → DD/MM/AAAA",
|
|
description=(
|
|
"Detecta el formato numérico predominante (YYYYMMDD, DDMMYYYY, etc.) "
|
|
"y normaliza a DD/MM/AAAA."
|
|
),
|
|
fn=date_rules._rule_date_numeric_to_ddmmyyyy,
|
|
)
|
|
register_rule(
|
|
"date_alpha_to_ddmmyyyy",
|
|
name="Conversión de formato alfanumérico (Fechas) → DD/MM/AAAA",
|
|
description=(
|
|
"Detecta el formato con separadores predominante "
|
|
"(DD/MM/YYYY, MM/DD/YYYY, YYYY/MM/DD, etc.) y normaliza a DD/MM/AAAA."
|
|
),
|
|
fn=date_rules._rule_date_alpha_to_ddmmyyyy,
|
|
)
|
|
register_rule(
|
|
"date_messy_text_to_ddmmyyyy",
|
|
name="Texto a fecha (ruido en fechas) → DD/MM/AAAA",
|
|
description=(
|
|
"Quita ruido entre cifras (*, +, _, /, etc.), detecta el orden en la "
|
|
"columna (DDMMYYYY, YYYYMMDD, DDMMYY) y unifica a DD/MM/AAAA."
|
|
),
|
|
fn=date_rules._rule_date_messy_text_to_ddmmyyyy,
|
|
)
|
|
register_rule(
|
|
"round_decimals_custom",
|
|
name="Aproximación Decimales (>0,5 sube, ≤0,5 baja)",
|
|
description=(
|
|
"Usa el mismo análisis de miles, decimales y moneda que «Entero». Tras leer "
|
|
"el número, si la parte fraccionaria de |valor| es mayor a 0,5 se aproxima al "
|
|
"entero hacia lejos de cero; en caso contrario, hacia cero. El 0,5 exacto se baja."
|
|
),
|
|
fn=num_rules._rule_round_decimals_custom,
|
|
)
|
|
register_rule(
|
|
"doc_id_split_tipo_numero",
|
|
name="Dividir tipo y número (documento)",
|
|
description=(
|
|
"Añade dos columnas (nombres únicos p. ej. TipoID_doc_tipo, TipoID_doc_numeros): "
|
|
"prefijo con letras (NIT, CC, CE, …) y cifras sin separadores. No modifica la "
|
|
"columna de origen."
|
|
),
|
|
fn=special._rule_passthrough_series,
|
|
)
|
|
register_rule(
|
|
"doc_type_homologate",
|
|
name="Homologar tipo de documento",
|
|
description=(
|
|
"Convierte tipos de documento escritos como nombre largo, sigla o texto con "
|
|
"símbolos a su abreviatura estándar (CC, TI, CE, RC, etc.)."
|
|
),
|
|
fn=doc_rules._rule_doc_type_homologate,
|
|
)
|
|
register_rule(
|
|
"cop_mod_split",
|
|
name="Separa COP/MOD (copago / moderadora)",
|
|
description=(
|
|
"Según el año en la columna Fecha Servicio que elija en la tarjeta, clasifica "
|
|
"el importe en cuota moderadora (valores por año en Configuración) o copago. "
|
|
"Se ejecuta al final del proceso de limpieza para usar fechas ya normalizadas."
|
|
),
|
|
fn=special._rule_passthrough_series,
|
|
)
|
|
register_rule(
|
|
"nota_paciente_autorizacion",
|
|
name="Extraer datos de notas (documento y autorización)",
|
|
description=(
|
|
"Desde texto tipo nota hospitalaria, extrae el número tras «Paciente:» (antes del "
|
|
"guión del nombre) y, si existe, el de «Autorización No.». Añade dos columnas; "
|
|
"no modifica el texto original."
|
|
),
|
|
fn=special._rule_passthrough_series,
|
|
)
|
|
|
|
rebuild_cleaning_rules()
|