feat: Enhance CSV cleaning service with new endpoints for CSV analysis and preview functionality. Introduce support for job management linked to extraction batches, and update the cleaning rules structure. Add new utility functions for handling CSV data and improve documentation for clarity on usage and available endpoints.
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user