Estandarización visual
Visual standardization
1. Capitalizar nombres y apellidos
1. Capitalize first and last names
Corregir registros ingresados en minúsculas o MAYÚSCULAS para que los nombres luzcan profesionales en cualquier reporte oficial.
Correct records entered in lowercase or UPPERCASE so names look professional in any official report.
Ejemplo baseBase example
$textInfo = (Get-Culture).TextInfo
$_.Nombre = $textInfo.ToTitleCase($_.Nombre.ToLower())
Formato único
Unique format
2. Estandarizar números telefónicos
2. Standardize phone numbers
Forzar un formato limpio (ej. 305-555-1234) a partir de cadenas sucias, removiendo puntos, espacios o paréntesis innecesarios.
Force a clean format (e.g., 305-555-1234) from dirty strings, removing unnecessary dots, spaces, or parentheses.
Ejemplo baseBase example
$telLimpio = $_.Telefono -replace '\\D', ''
$_.Telefono = "{0:###-###-####}" -f [int64]$telLimpio
Compatibilidad legacy
Legacy compatibility
3. Remover acentos y caracteres especiales
3. Remove accents and special characters
Preparar nombres para sistemas antiguos que no soportan caracteres latinos, convirtiendo letras como 'á' en 'a' o 'ñ' en 'n'.
Prepare names for older systems that don't support Latin characters, converting letters like 'á' to 'a' or 'ñ' to 'n'.
Ejemplo baseBase example
$normalizado = $_.Apellido.Normalize([System.Text.NormalizationForm]::FormD)
$_.Apellido = $normalizado -replace '\\p{M}', ''
Consistencia geográfica
Geographical consistency
4. Unificar nomenclaturas de estados o ciudades
4. Unify state or city nomenclatures
Reemplazar variaciones informales como 'Fla.' o 'Florida' por el estándar oficial 'FL' usando una tabla de cruce rápida.
Replace informal variations like 'Fla.' or 'Florida' with the official 'FL' standard using a quick lookup table.
Ejemplo baseBase example
$estados = @{ "Florida"="FL"; "Fla."="FL"; "fl"="FL" }
$_.Estado = $estados[$_.Estado]
Preparación para SQL
SQL preparation
5. Normalizar formatos de fechas
5. Normalize date formats
Convertir fechas mezcladas en textos al estándar ISO YYYY-MM-DD, ideal para importar a bases de datos sin errores.
Convert mixed text dates to the ISO YYYY-MM-DD standard, ideal for importing into databases without errors.
Ejemplo baseBase example
$fecha = [datetime]::ParseExact($_.Fecha, "dd/MM/yyyy", $null)
$_.FechaFormateada = $fecha.ToString("yyyy-MM-dd")
Filtro de exactitud
Accuracy filter
6. Validar longitud de Códigos Postales
6. Validate Zip Code length
Identificar y separar los registros donde el código postal (Zip Code) tenga menos de 5 dígitos o contenga letras por error.
Identify and separate records where the Zip Code has less than 5 digits or mistakenly contains letters.
Ejemplo baseBase example
Import-Csv "C:\\Data\\Contactos.csv" |
Where-Object { $_.ZipCode -notmatch "^\\d{5}$" } |
Export-Csv "C:\\Data\\ZipInvalidos.csv"
Lógica de negocio
Business logic
7. Identificar fechas ilógicas o fuera de rango
7. Identify illogical or out-of-range dates
Marcar registros donde la fecha calculada rompa una regla, como menores de edad en una base de datos de personal laboral.
Flag records where the calculated date breaks a rule, such as minors in an employee database.
Ejemplo baseBase example
$edad = (Get-Date).Year - ([datetime]$_.FechaNacimiento).Year
if ($edad -lt 18) { Write-Warning "Alerta: Registro menor de edad" }
Seguridad institucional
Institutional security
8. Validar dominios de correo electrónico
8. Validate email domains
Asegurar que los correos de un listado pertenezcan exclusivamente a los dominios educativos o corporativos autorizados.
Ensure that emails in a list belong exclusively to authorized educational or corporate domains.
Ejemplo baseBase example
Import-Csv "C:\\Data\\Usuarios.csv" |
Where-Object { $_.Email -notmatch "@misistema\\.edu$" }
Prevención de errores
Error prevention
9. Detectar anomalías numéricas (Outliers)
9. Detect numerical anomalies (Outliers)
Identificar salarios o tarifas que se salgan de un rango lógico predefinido para evitar cálculos erróneos que afecten presupuestos.
Identify salaries or rates that fall outside a predefined logical range to prevent erroneous calculations affecting budgets.
Ejemplo baseBase example
Import-Csv "C:\\Data\\Nominas.csv" |
Where-Object { [int]$_.Salario -gt 150000 -or [int]$_.Salario -lt 20000 }
Integridad de enlaces
Link integrity
10. Comprobar la existencia de URLs
10. Check URL existence (Broken links)
Hacer un chequeo rápido a los enlaces incluidos en un reporte para marcar aquellos que devuelven un error 404 (rotos).
Do a quick check on links included in a report to flag those returning a 404 error.
Ejemplo baseBase example
try { Invoke-WebRequest $_.Website -Method Head -ErrorAction Stop }
catch { Write-Host "Enlace roto detectado: $($_.Website)" }
Completitud de data
Data completeness
11. Rellenar campos nulos o vacíos
11. Fill null or empty fields
Sustituir celdas en blanco por valores predeterminados como 'N/A' para evitar que herramientas como Power BI arrojen errores.
Replace blank cells with default values like 'N/A' to prevent tools like Power BI from throwing errors.
Ejemplo baseBase example
if ([string]::IsNullOrWhiteSpace($_.Departamento)) {
$_.Departamento = "N/A"
}
Enriquecimiento de datos
Data enrichment
12. Extraer el dominio del correo para segmentar
12. Extract email domain for segmentation
Cortar la dirección de correo después del @ para crear una nueva columna que agrupe a los usuarios por su institución.
Cut the email address after the @ to create a new column grouping users by their institution.
Ejemplo baseBase example
$datos | Select-Object *,
@{Name="Dominio"; Expression={$_.Email.Split('@')[1]}}
Estructuración atómica
Atomic structuring
13. Separar 'Nombre Completo' en columnas
13. Split 'Full Name' into columns
Dividir una columna única usando el primer espacio como delimitador para obtener 'Primer Nombre' y 'Apellidos' por separado.
Divide a single column using the first space as a delimiter to get 'First Name' and 'Last Name' separately.
Ejemplo baseBase example
$datos | Select-Object *,
@{Name="PrimerNombre"; Expression={$_.NombreCompleto.Split(' ', 2)[0]}},
@{Name="Apellidos"; Expression={$_.NombreCompleto.Split(' ', 2)[1]}}
Control de cambios
Strict change control
14. Generar un Hash único por fila (Checksum)
14. Generate a unique Hash per row (Checksum)
Crear un código basado en el contenido para identificar rápidamente si un registro específico sufrió modificaciones de un mes a otro.
Create a content-based code to quickly identify if a specific record was modified from one month to the next.
Ejemplo baseBase example
$cadena = "$($_.ID)-$($_.Status)-$($_.Monto)"
$hash = Get-FileHash -InputStream ([IO.MemoryStream]::new([byte[]][char[]]$cadena)) -Algorithm MD5
Trazabilidad del proceso
Process traceability
15. Añadir metadatos de auditoría al archivo
15. Add audit metadata to the file
Inyectar automáticamente columnas indicando la fecha exacta de ejecución y el usuario que corrió el script.
Automatically inject columns indicating the exact execution date and the user who ran the script.
Ejemplo baseBase example
$datos_limpios | Select-Object *,
@{Name="FechaProceso"; Expression={Get-Date -Format "yyyy-MM-dd"}},
@{Name="ProcesadoPor"; Expression={$env:USERNAME}}
Diagnóstico inicial
Initial diagnostics
16. Generar un reporte rápido de 'Data Profiling'
16. Generate a quick 'Data Profiling' report
Leer un CSV y agrupar los datos para evaluar el volumen de información y ver cuántos registros hay por categoría.
Read a CSV and group the data to evaluate volume and see how many records exist per category.
Ejemplo baseBase example
Import-Csv "C:\\Data\\Maestro.csv" |
Group-Object Departamento -NoElement |
Sort-Object Count -Descending
Cruce relacional
Relational cross-check
17. Identificar registros 'huérfanos'
17. Identify 'orphan' records
Cruzar un archivo de actividad contra el maestro principal para encontrar IDs que tienen movimiento pero no están registrados.
Cross an activity file against the main master file to find IDs that have movement but aren't officially registered.
Ejemplo baseBase example
$maestro = Import-Csv "C:\\Data\\Maestro.csv" | Select-Object -ExpandProperty ID
Import-Csv "C:\\Data\\Actividad.csv" |
Where-Object { $maestro -notcontains $_.ID }
Prevención CSV
CSV Corruption Prevention
18. Limpiar saltos de línea invisibles dentro de celdas
18. Clean invisible line breaks inside cells
Remover los retornos de carro (Enters) que los usuarios meten accidentalmente dentro de celdas en Excel y que rompen el formato CSV.
Remove carriage returns (Enters) that users accidentally put inside Excel cells, which break the CSV format.
Ejemplo baseBase example
$_.Comentarios = $_.Comentarios -replace "\`r|\`n", " "
Privacidad y cumplimiento
Privacy and compliance
19. Enmascarar datos sensibles (PII)
19. Mask sensitive data (PII)
Ocultar los primeros dígitos de un ID, número de seguro o cuenta, dejando solo los últimos 4 visibles antes de compartir el reporte.
Hide the first digits of an ID, SSN, or account, leaving only the last 4 visible before sharing the report.
Ejemplo baseBase example
$idOriginal = $_.SSN
$_.SSN_Masked = "***-**-" + $idOriginal.Substring($idOriginal.Length - 4)
Entrega rápida
Fast delivery
20. Comprimir la data limpia para transmisión
20. Compress clean data for transmission
Tomar el CSV ya procesado, validado y enriquecido, y comprimirlo nativamente en un archivo .zip listo para enviarse.
Take the processed, validated, and enriched CSV and natively compress it into a .zip file ready to be sent.
Ejemplo baseBase example
Compress-Archive -Path "C:\\Data\\Final\\*.csv" -DestinationPath "C:\\Data\\Entrega_Procesada.zip" -Update