email-processor-cli


Nameemail-processor-cli JSON
Version 2025.10.27.192812 PyPI version JSON
download
home_pagehttps://github.com/yourusername/hiperautomatization
SummaryCLI tool for email processing with domain migration
upload_time2025-10-28 00:28:50
maintainerNone
docs_urlNone
authorAnderson Taguada
requires_python>=3.8
licenseMIT
keywords email processing cli domain migration automation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Procesador de Correos - Arquitectura Hexagonal

[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![PyPI version](https://badge.fury.io/py/email-processor-cli.svg)](https://pypi.org/project/email-processor-cli/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![AWS Lambda](https://img.shields.io/badge/AWS-Lambda-orange.svg)](https://aws.amazon.com/lambda/)
[![Terraform](https://img.shields.io/badge/IaC-Terraform-purple.svg)](https://www.terraform.io/)

> Sistema de migración de dominios de correo electrónico con arquitectura hexagonal, multi-interfaz (CLI, API, Librería) y despliegue en AWS Lambda.

## 📑 Tabla de Contenidos

- [Características](#-características)
- [Arquitectura](#-principios-de-arquitectura)
- [Lógica de Negocio](#-lógica-de-negocio)
- [Instalación](#-instalación)
- [Inicio Rápido](#-inicio-rápido)
- [Documentación](#-documentación)
- [Seguridad](#-seguridad)
- [Despliegue](#-despliegue)
- [Contribución](#-contribución)
- [Licencia](#-licencia)

## ✨ Características

- ✅ **Arquitectura Hexagonal** - Núcleo de negocio aislado de infraestructura
- ✅ **Multi-interfaz** - CLI, API REST (local + Lambda), Librería Python
- ✅ **Sin Estado** - Stateless, escalable horizontalmente
- ✅ **Validación Robusta** - 5 reglas de negocio (BR-001 a BR-005)
- ✅ **Transformación Inteligente** - 5 reglas de transformación (TR-001 a TR-005)
- ✅ **E/S Flexible** - Múltiples formatos de entrada/salida (CSV, JSON, inline)
- ✅ **Seguridad** - Autenticación con API Key en Lambda
- ✅ **IaC** - Infraestructura como código con Terraform
- ✅ **Logging** - CloudWatch logs con retención configurable
- ✅ **Documentación Completa** - PDD, diagramas Mermaid, guías de uso

## 🎯 Principios de Arquitectura

- ✅ **Sin Estado**: Sin estado entre peticiones
- ✅ **Modular**: Patrón Extraer → Transformar → Generar
- ✅ **Hexagonal**: Núcleo aislado de la infraestructura
- ✅ **Multi-interfaz**: CLI, API (Local + Lambda), Librería
- ✅ **E/S Flexible**: Múltiples tipos de entrada/salida

## 💼 Lógica de Negocio

### Flujo Principal

El sistema procesa direcciones de correo electrónico extrayendo información de usuario y migrándolas a un nuevo dominio:

1. **Extraer**: Leer correos de varias fuentes (archivo, lista, texto)
2. **Validar**: Aplicar reglas de negocio BR-001 a BR-005
3. **Transformar**: Aplicar reglas de transformación TR-001 a TR-005
4. **Generar**: Producir resultados en formato CSV, JSON o en línea

### Reglas de Validación (BR)

| ID | Regla | Condición | Acción si Falla |
|----|-------|-----------|------------------|
| BR-001 | Exactamente un @ | `email.count('@') == 1` | Registrar y omitir |
| BR-002 | Exactamente un punto en prefijo | `prefix.count('.') == 1` | Registrar y omitir |
| BR-003 | Nombre 2-50 caracteres | `2 ≤ len(nombre) ≤ 50` | Registrar y omitir |
| BR-004 | Apellido 2-50 caracteres | `2 ≤ len(apellido) ≤ 50` | Registrar y omitir |
| BR-005 | Solo letras (a-z, A-Z, acentuadas) | `nombre.isalpha()` | Registrar y omitir |

**Nota:** Todas las validaciones se ejecutan secuencialmente. Si alguna falla, el correo se registra y se omite.

### Reglas de Transformación (TR)

| ID | Regla | Entrada Ejemplo | Salida Ejemplo |
|----|-------|-----------------|----------------|
| TR-001 | Capitalizar nombre | juan | Juan |
| TR-002 | Capitalizar apellido | perez | Perez |
| TR-003 | Minúsculas en correo | Juan.Perez@NEW.COM | juan.perez@new.com |
| TR-004 | Preservar dominio original | juan.perez@example.com | @example.com |
| TR-005 | Aplicar nuevo dominio | Juan + Perez + @new.com | juan.perez@new.com |

**Nota:** Las transformaciones solo se aplican a correos que pasaron todas las validaciones.

### Entidad de Dominio (Email)

**Propiedades:**
- `nombre`: Nombre (capitalizado)
- `apellido`: Apellido (capitalizado)
- `correo_original`: Dirección de correo original
- `correo_nuevo`: Nuevo correo con dominio destino

**Comportamiento:**
- Capitaliza nombres automáticamente
- Convierte correos a minúsculas automáticamente
- Genera nuevo correo: `nombre.apellido@nuevo_dominio`

### Métricas del Proceso

| Métrica | Valor |
|---------|-------|
| Velocidad de procesamiento | ~0.1 seg/correo |
| Tasa de éxito | 90-95% |
| Errores de validación | 5-10% |
| Capacidad | 10,000+ correos/día (automatizado) |

## 🏗️ Estructura

```
src/features/email_processing/
├── domain/              # Lógica de Negocio Principal
│   ├── email.py        # Entidad
│   └── ports.py        # Interfaces
├── adapters/
│   ├── input/          # Adaptadores Primarios
│   │   ├── cli_adapter.py
│   │   ├── api_adapter.py
│   │   └── library_adapter.py
│   └── output/         # Adaptadores Secundarios
│       ├── file_adapter.py
│       ├── csv_adapter.py
│       └── json_adapter.py
└── shared/             # Validación y Logging
```

## 📦 Instalación

### Requisitos Previos

- Python 3.8 o superior
- pip (gestor de paquetes de Python)
- AWS CLI (solo para despliegue en Lambda)
- Terraform 1.0+ (solo para despliegue en Lambda)

### Opción 1: Desde PyPI (Recomendado)

```bash
pip install email-processor-cli
```

### Opción 2: Desde Código Fuente

```bash
# Clonar repositorio
git clone https://github.com/anders2d/hiperautomatization.git
cd hiperautomatization

# Instalar dependencias
pip install -r requirements.txt

# Verificar instalación
python main_cli.py --help
```

## 🚀 Inicio Rápido

### CLI

**Instalado desde PyPI:**
```bash
email-processor --input-type list --input "user@old.com" --new-domain new.com --output-type inline
```

**Desde código fuente:**
```bash
python main_cli.py --input-type list --input "user@old.com" --new-domain new.com --output-type inline
```

### 🎬 Demos en Acción

<details>
<summary><b>Demo Básico - Procesamiento Inline</b></summary>
<br>
<img src="demos/demo_basic.svg" alt="Demo Básico">
</details>

<details>
<summary><b>Validación de Errores - Reglas de Negocio</b></summary>
<br>
<img src="demos/demo_validation.svg" alt="Demo Validación">
</details>

<details>
<summary><b>Salida CSV - Formato Estructurado</b></summary>
<br>
<img src="demos/demo_csv.svg" alt="Demo CSV">
</details>

**Ver más demos:** [demos/README.md](demos/README.md)

### API (Local)
```bash
# Iniciar servidor
python main_api.py

# Probar
python test_api.py
```

### API (AWS Lambda)
```bash
cd terraform
build.bat  # o ./build.sh
terraform apply

# Obtener API Key
terraform output api_key
```

**Autenticación:** Todas las peticiones a la API Lambda requieren el header `x-api-key`.

```bash
# Ejemplo con API Key
curl -X POST https://your-api.execute-api.us-east-1.amazonaws.com/transform \
  -H "Content-Type: application/json" \
  -H "x-api-key: prod-email-processor-2024-secure-key" \
  -d '{"emails":["user@old.com"],"new_domain":"new.com"}'
```

### Librería
```python
from src.features.email_processing.adapters.input.library_adapter import EmailProcessingLibrary

emails = EmailProcessingLibrary.extract(['user@old.com'], 'list')
transformed = EmailProcessingLibrary.transform(emails, 'new.com')
result = EmailProcessingLibrary.generate(transformed, 'inline')
```

## 📋 Tipos de Entrada
- **file**: Leer desde ruta de archivo
- **list**: Array de correos
- **text**: Texto separado por líneas

## 📋 Tipos de Salida
- **csv**: Guardar en archivo CSV (predeterminado)
- **json**: Guardar en archivo JSON
- **inline**: Retornar/imprimir directamente
- **silent**: Procesar sin salida (solo logs)

## 🔐 Seguridad

### Autenticación con API Key

La API Lambda usa autenticación con API Key:

- **Header:** `x-api-key`
- **Clave por defecto:** `prod-email-processor-2024-secure-key`
- **Variable de entorno:** `API_KEY` en Lambda
- **Respuesta en caso de fallo:** `401 Unauthorized`

**Obtener API Key después del despliegue:**
```bash
cd terraform
terraform output api_key
```

**Probar autenticación:**
```bash
# Sin API Key (falla)
curl -X POST $API_URL/transform -d '{}'
# Respuesta: {"error": "Unauthorized: Invalid or missing API key"}

# Con API Key (éxito)
curl -X POST $API_URL/transform -H "x-api-key: YOUR_KEY" -d '{}'
```

## 📚 Ejemplos

Ver carpeta [examples/](examples/) para ejemplos completos:

- **[API Local](examples/api_local_example.py)** - Uso de API Flask local
- **[API Lambda](examples/api_lambda_example.sh)** - Llamadas a API en AWS con autenticación
- **[Librería Python](examples/library_example.py)** - Integración como librería
- **[CLI Windows](examples/cli_example.bat)** - Scripts batch para Windows
- **[CLI Linux/Mac](examples/cli_example.sh)** - Scripts shell para Unix
- **[n8n Workflow](examples/n8n_workflow.json)** - Flujo de automatización n8n

## 📦 Publicación en PyPI

### 🎉 Paquete Publicado

Este proyecto está disponible en PyPI:

- **Nombre:** `email-processor-cli`
- **Última versión:** `2025.10.27.183827`
- **URL:** https://pypi.org/project/email-processor-cli/

### 🚀 Publicar Nueva Versión

**Publicación automática con timestamp:**

```bash
# Windows
scripts\publish_timestamp.bat

# Linux/Mac
chmod +x scripts/publish_timestamp.sh
./scripts/publish_timestamp.sh
```

El script:
- Genera versión automática: `YYYY.MM.DD.HHMMSS`
- Actualiza archivos de configuración
- Construye el paquete
- Publica en PyPI o TestPyPI

**Formato de versión:**
- `2025.01.27.143052` - 27 enero 2025, 14:30:52
- `2025.02.15.091523` - 15 febrero 2025, 09:15:23

### 📚 Guías de Publicación

- **[docs/PYPI_DEPLOYMENT.md](docs/PYPI_DEPLOYMENT.md)** - Documentación completa
- **[PYPI_COMMANDS.md](PYPI_COMMANDS.md)** - Referencia rápida de comandos

## 🧪 Pruebas

```bash
# Pruebas de API local
python test_api.py

# Pruebas de CLI
python main_cli.py --input-type list --input "test@example.com" --new-domain new.com --output-type inline

# Pruebas de librería
python examples/library_example.py
```

## 📖 Documentación

### 🚀 Guías de Usuario

| Documento | Descripción | Audiencia |
|-----------|-------------|----------|
| **[Inicio Rápido](docs/QUICK_START.md)** | Comienza en 5 minutos | Todos |
| **[Guía de Despliegue](docs/DEPLOYMENT_GUIDE.md)** | Despliegue completo en AWS | DevOps |
| **[Hoja de Referencia](docs/CHEATSHEET.md)** | Comandos y configuraciones | Desarrolladores |
| **[Integración n8n](docs/N8N_INTEGRATION.md)** | Automatización con n8n | Automatización |
| **[Publicación PyPI](docs/PYPI_DEPLOYMENT.md)** | Publicar paquete en PyPI | Mantenedores |
| **[Comandos PyPI](PYPI_COMMANDS.md)** | Referencia rápida de comandos | Desarrolladores |

### 📋 Documentación de Procesos (PDD)

**[Process Definition Document](docs/pdd/PDD.md)** - Documentación completa del proceso de negocio:

| Sección | Contenido | Propósito |
|---------|-----------|----------|
| **Proceso AS-IS** | Proceso manual actual | Entender estado actual |
| **Reglas de Negocio** | BR-001 a BR-005, TR-001 a TR-005 | Validación y transformación |
| **Análisis de Automatización** | Viabilidad y mapeo tecnológico | Justificar automatización |
| **Visión TO-BE** | Proceso automatizado | Diseñar solución |
| **Evaluación de Riesgos** | Riesgos y mitigación | Gestión de riesgos |
| **Roadmap** | Plan de 6 meses | Implementación gradual |

### 📊 Diagramas de Procesos

**[docs/pdd/diagrams/](docs/pdd/diagrams/)** - Documentación visual de procesos:

| Diagrama | Descripción | Sección |
|----------|-------------|----------|
| `macroproceso.mmd` | Contexto organizacional (upstream/downstream) | 1.1 |
| `swimlanes.mmd` | Secuencia de interacción de actores | 1.1 |
| `alcance.mmd` | Visualización de alcance (dentro/fuera) | 1.2 |
| `entradas-salidas.mmd` | Flujo de datos entrada/salida | 1.3-1.4 |
| `flujo-detallado.mmd` | Flujo manual AS-IS detallado | 1.8 |
| `heatmap-automatizacion.mmd` | Mapa de calor de viabilidad de automatización | 4.2 |
| `proceso-tobe.mmd` | Proceso automatizado TO-BE | 5.1 |
| `roadmap-transicion.mmd` | Gantt de transición de 6 meses | 5.3 |

## 🚢 Despliegue

### Despliegue Local

```bash
# API Local
python main_api.py
# Servidor en http://localhost:5000

# CLI
python main_cli.py --input-type file --input sample_emails.txt --new-domain new.com
```

### Despliegue en AWS Lambda

Ver **[terraform/README.md](terraform/README.md)** para instrucciones completas.

```bash
cd terraform

# Windows
build.bat

# Linux/Mac
./build.sh

# Desplegar infraestructura
terraform init
terraform plan
terraform apply

# Obtener API Key
terraform output api_key
```

### Monitoreo y Logs

**CloudWatch Logs:**

| Recurso | Log Group | Retención |
|---------|-----------|----------|
| Lambda Function | `/aws/lambda/email-processor` | 7 días |
| API Gateway | `/aws/apigateway/email-processor` | 7 días |

**Métricas incluidas:**
- Request/response completos
- Errores y excepciones
- Fallos de validación (BR-001 a BR-005)
- Validación de API key
- Tiempos de ejecución

## 👤 Autor

**Anderson Taguada**

- GitHub: [@anders2d](https://github.com/anders2d)
- Email: ferchoafta@gmail.com

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/yourusername/hiperautomatization",
    "name": "email-processor-cli",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "email processing cli domain migration automation",
    "author": "Anderson Taguada",
    "author_email": "your.email@example.com",
    "download_url": "https://files.pythonhosted.org/packages/15/ca/b3d7e1ed47c862aaffbf315328bcc84cb52e1397395d041c758d4e21d165/email_processor_cli-2025.10.27.192812.tar.gz",
    "platform": null,
    "description": "# Procesador de Correos - Arquitectura Hexagonal\r\n\r\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\r\n[![PyPI version](https://badge.fury.io/py/email-processor-cli.svg)](https://pypi.org/project/email-processor-cli/)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\r\n[![AWS Lambda](https://img.shields.io/badge/AWS-Lambda-orange.svg)](https://aws.amazon.com/lambda/)\r\n[![Terraform](https://img.shields.io/badge/IaC-Terraform-purple.svg)](https://www.terraform.io/)\r\n\r\n> Sistema de migraci\u00f3n de dominios de correo electr\u00f3nico con arquitectura hexagonal, multi-interfaz (CLI, API, Librer\u00eda) y despliegue en AWS Lambda.\r\n\r\n## \ud83d\udcd1 Tabla de Contenidos\r\n\r\n- [Caracter\u00edsticas](#-caracter\u00edsticas)\r\n- [Arquitectura](#-principios-de-arquitectura)\r\n- [L\u00f3gica de Negocio](#-l\u00f3gica-de-negocio)\r\n- [Instalaci\u00f3n](#-instalaci\u00f3n)\r\n- [Inicio R\u00e1pido](#-inicio-r\u00e1pido)\r\n- [Documentaci\u00f3n](#-documentaci\u00f3n)\r\n- [Seguridad](#-seguridad)\r\n- [Despliegue](#-despliegue)\r\n- [Contribuci\u00f3n](#-contribuci\u00f3n)\r\n- [Licencia](#-licencia)\r\n\r\n## \u2728 Caracter\u00edsticas\r\n\r\n- \u2705 **Arquitectura Hexagonal** - N\u00facleo de negocio aislado de infraestructura\r\n- \u2705 **Multi-interfaz** - CLI, API REST (local + Lambda), Librer\u00eda Python\r\n- \u2705 **Sin Estado** - Stateless, escalable horizontalmente\r\n- \u2705 **Validaci\u00f3n Robusta** - 5 reglas de negocio (BR-001 a BR-005)\r\n- \u2705 **Transformaci\u00f3n Inteligente** - 5 reglas de transformaci\u00f3n (TR-001 a TR-005)\r\n- \u2705 **E/S Flexible** - M\u00faltiples formatos de entrada/salida (CSV, JSON, inline)\r\n- \u2705 **Seguridad** - Autenticaci\u00f3n con API Key en Lambda\r\n- \u2705 **IaC** - Infraestructura como c\u00f3digo con Terraform\r\n- \u2705 **Logging** - CloudWatch logs con retenci\u00f3n configurable\r\n- \u2705 **Documentaci\u00f3n Completa** - PDD, diagramas Mermaid, gu\u00edas de uso\r\n\r\n## \ud83c\udfaf Principios de Arquitectura\r\n\r\n- \u2705 **Sin Estado**: Sin estado entre peticiones\r\n- \u2705 **Modular**: Patr\u00f3n Extraer \u2192 Transformar \u2192 Generar\r\n- \u2705 **Hexagonal**: N\u00facleo aislado de la infraestructura\r\n- \u2705 **Multi-interfaz**: CLI, API (Local + Lambda), Librer\u00eda\r\n- \u2705 **E/S Flexible**: M\u00faltiples tipos de entrada/salida\r\n\r\n## \ud83d\udcbc L\u00f3gica de Negocio\r\n\r\n### Flujo Principal\r\n\r\nEl sistema procesa direcciones de correo electr\u00f3nico extrayendo informaci\u00f3n de usuario y migr\u00e1ndolas a un nuevo dominio:\r\n\r\n1. **Extraer**: Leer correos de varias fuentes (archivo, lista, texto)\r\n2. **Validar**: Aplicar reglas de negocio BR-001 a BR-005\r\n3. **Transformar**: Aplicar reglas de transformaci\u00f3n TR-001 a TR-005\r\n4. **Generar**: Producir resultados en formato CSV, JSON o en l\u00ednea\r\n\r\n### Reglas de Validaci\u00f3n (BR)\r\n\r\n| ID | Regla | Condici\u00f3n | Acci\u00f3n si Falla |\r\n|----|-------|-----------|------------------|\r\n| BR-001 | Exactamente un @ | `email.count('@') == 1` | Registrar y omitir |\r\n| BR-002 | Exactamente un punto en prefijo | `prefix.count('.') == 1` | Registrar y omitir |\r\n| BR-003 | Nombre 2-50 caracteres | `2 \u2264 len(nombre) \u2264 50` | Registrar y omitir |\r\n| BR-004 | Apellido 2-50 caracteres | `2 \u2264 len(apellido) \u2264 50` | Registrar y omitir |\r\n| BR-005 | Solo letras (a-z, A-Z, acentuadas) | `nombre.isalpha()` | Registrar y omitir |\r\n\r\n**Nota:** Todas las validaciones se ejecutan secuencialmente. Si alguna falla, el correo se registra y se omite.\r\n\r\n### Reglas de Transformaci\u00f3n (TR)\r\n\r\n| ID | Regla | Entrada Ejemplo | Salida Ejemplo |\r\n|----|-------|-----------------|----------------|\r\n| TR-001 | Capitalizar nombre | juan | Juan |\r\n| TR-002 | Capitalizar apellido | perez | Perez |\r\n| TR-003 | Min\u00fasculas en correo | Juan.Perez@NEW.COM | juan.perez@new.com |\r\n| TR-004 | Preservar dominio original | juan.perez@example.com | @example.com |\r\n| TR-005 | Aplicar nuevo dominio | Juan + Perez + @new.com | juan.perez@new.com |\r\n\r\n**Nota:** Las transformaciones solo se aplican a correos que pasaron todas las validaciones.\r\n\r\n### Entidad de Dominio (Email)\r\n\r\n**Propiedades:**\r\n- `nombre`: Nombre (capitalizado)\r\n- `apellido`: Apellido (capitalizado)\r\n- `correo_original`: Direcci\u00f3n de correo original\r\n- `correo_nuevo`: Nuevo correo con dominio destino\r\n\r\n**Comportamiento:**\r\n- Capitaliza nombres autom\u00e1ticamente\r\n- Convierte correos a min\u00fasculas autom\u00e1ticamente\r\n- Genera nuevo correo: `nombre.apellido@nuevo_dominio`\r\n\r\n### M\u00e9tricas del Proceso\r\n\r\n| M\u00e9trica | Valor |\r\n|---------|-------|\r\n| Velocidad de procesamiento | ~0.1 seg/correo |\r\n| Tasa de \u00e9xito | 90-95% |\r\n| Errores de validaci\u00f3n | 5-10% |\r\n| Capacidad | 10,000+ correos/d\u00eda (automatizado) |\r\n\r\n## \ud83c\udfd7\ufe0f Estructura\r\n\r\n```\r\nsrc/features/email_processing/\r\n\u251c\u2500\u2500 domain/              # L\u00f3gica de Negocio Principal\r\n\u2502   \u251c\u2500\u2500 email.py        # Entidad\r\n\u2502   \u2514\u2500\u2500 ports.py        # Interfaces\r\n\u251c\u2500\u2500 adapters/\r\n\u2502   \u251c\u2500\u2500 input/          # Adaptadores Primarios\r\n\u2502   \u2502   \u251c\u2500\u2500 cli_adapter.py\r\n\u2502   \u2502   \u251c\u2500\u2500 api_adapter.py\r\n\u2502   \u2502   \u2514\u2500\u2500 library_adapter.py\r\n\u2502   \u2514\u2500\u2500 output/         # Adaptadores Secundarios\r\n\u2502       \u251c\u2500\u2500 file_adapter.py\r\n\u2502       \u251c\u2500\u2500 csv_adapter.py\r\n\u2502       \u2514\u2500\u2500 json_adapter.py\r\n\u2514\u2500\u2500 shared/             # Validaci\u00f3n y Logging\r\n```\r\n\r\n## \ud83d\udce6 Instalaci\u00f3n\r\n\r\n### Requisitos Previos\r\n\r\n- Python 3.8 o superior\r\n- pip (gestor de paquetes de Python)\r\n- AWS CLI (solo para despliegue en Lambda)\r\n- Terraform 1.0+ (solo para despliegue en Lambda)\r\n\r\n### Opci\u00f3n 1: Desde PyPI (Recomendado)\r\n\r\n```bash\r\npip install email-processor-cli\r\n```\r\n\r\n### Opci\u00f3n 2: Desde C\u00f3digo Fuente\r\n\r\n```bash\r\n# Clonar repositorio\r\ngit clone https://github.com/anders2d/hiperautomatization.git\r\ncd hiperautomatization\r\n\r\n# Instalar dependencias\r\npip install -r requirements.txt\r\n\r\n# Verificar instalaci\u00f3n\r\npython main_cli.py --help\r\n```\r\n\r\n## \ud83d\ude80 Inicio R\u00e1pido\r\n\r\n### CLI\r\n\r\n**Instalado desde PyPI:**\r\n```bash\r\nemail-processor --input-type list --input \"user@old.com\" --new-domain new.com --output-type inline\r\n```\r\n\r\n**Desde c\u00f3digo fuente:**\r\n```bash\r\npython main_cli.py --input-type list --input \"user@old.com\" --new-domain new.com --output-type inline\r\n```\r\n\r\n### \ud83c\udfac Demos en Acci\u00f3n\r\n\r\n<details>\r\n<summary><b>Demo B\u00e1sico - Procesamiento Inline</b></summary>\r\n<br>\r\n<img src=\"demos/demo_basic.svg\" alt=\"Demo B\u00e1sico\">\r\n</details>\r\n\r\n<details>\r\n<summary><b>Validaci\u00f3n de Errores - Reglas de Negocio</b></summary>\r\n<br>\r\n<img src=\"demos/demo_validation.svg\" alt=\"Demo Validaci\u00f3n\">\r\n</details>\r\n\r\n<details>\r\n<summary><b>Salida CSV - Formato Estructurado</b></summary>\r\n<br>\r\n<img src=\"demos/demo_csv.svg\" alt=\"Demo CSV\">\r\n</details>\r\n\r\n**Ver m\u00e1s demos:** [demos/README.md](demos/README.md)\r\n\r\n### API (Local)\r\n```bash\r\n# Iniciar servidor\r\npython main_api.py\r\n\r\n# Probar\r\npython test_api.py\r\n```\r\n\r\n### API (AWS Lambda)\r\n```bash\r\ncd terraform\r\nbuild.bat  # o ./build.sh\r\nterraform apply\r\n\r\n# Obtener API Key\r\nterraform output api_key\r\n```\r\n\r\n**Autenticaci\u00f3n:** Todas las peticiones a la API Lambda requieren el header `x-api-key`.\r\n\r\n```bash\r\n# Ejemplo con API Key\r\ncurl -X POST https://your-api.execute-api.us-east-1.amazonaws.com/transform \\\r\n  -H \"Content-Type: application/json\" \\\r\n  -H \"x-api-key: prod-email-processor-2024-secure-key\" \\\r\n  -d '{\"emails\":[\"user@old.com\"],\"new_domain\":\"new.com\"}'\r\n```\r\n\r\n### Librer\u00eda\r\n```python\r\nfrom src.features.email_processing.adapters.input.library_adapter import EmailProcessingLibrary\r\n\r\nemails = EmailProcessingLibrary.extract(['user@old.com'], 'list')\r\ntransformed = EmailProcessingLibrary.transform(emails, 'new.com')\r\nresult = EmailProcessingLibrary.generate(transformed, 'inline')\r\n```\r\n\r\n## \ud83d\udccb Tipos de Entrada\r\n- **file**: Leer desde ruta de archivo\r\n- **list**: Array de correos\r\n- **text**: Texto separado por l\u00edneas\r\n\r\n## \ud83d\udccb Tipos de Salida\r\n- **csv**: Guardar en archivo CSV (predeterminado)\r\n- **json**: Guardar en archivo JSON\r\n- **inline**: Retornar/imprimir directamente\r\n- **silent**: Procesar sin salida (solo logs)\r\n\r\n## \ud83d\udd10 Seguridad\r\n\r\n### Autenticaci\u00f3n con API Key\r\n\r\nLa API Lambda usa autenticaci\u00f3n con API Key:\r\n\r\n- **Header:** `x-api-key`\r\n- **Clave por defecto:** `prod-email-processor-2024-secure-key`\r\n- **Variable de entorno:** `API_KEY` en Lambda\r\n- **Respuesta en caso de fallo:** `401 Unauthorized`\r\n\r\n**Obtener API Key despu\u00e9s del despliegue:**\r\n```bash\r\ncd terraform\r\nterraform output api_key\r\n```\r\n\r\n**Probar autenticaci\u00f3n:**\r\n```bash\r\n# Sin API Key (falla)\r\ncurl -X POST $API_URL/transform -d '{}'\r\n# Respuesta: {\"error\": \"Unauthorized: Invalid or missing API key\"}\r\n\r\n# Con API Key (\u00e9xito)\r\ncurl -X POST $API_URL/transform -H \"x-api-key: YOUR_KEY\" -d '{}'\r\n```\r\n\r\n## \ud83d\udcda Ejemplos\r\n\r\nVer carpeta [examples/](examples/) para ejemplos completos:\r\n\r\n- **[API Local](examples/api_local_example.py)** - Uso de API Flask local\r\n- **[API Lambda](examples/api_lambda_example.sh)** - Llamadas a API en AWS con autenticaci\u00f3n\r\n- **[Librer\u00eda Python](examples/library_example.py)** - Integraci\u00f3n como librer\u00eda\r\n- **[CLI Windows](examples/cli_example.bat)** - Scripts batch para Windows\r\n- **[CLI Linux/Mac](examples/cli_example.sh)** - Scripts shell para Unix\r\n- **[n8n Workflow](examples/n8n_workflow.json)** - Flujo de automatizaci\u00f3n n8n\r\n\r\n## \ud83d\udce6 Publicaci\u00f3n en PyPI\r\n\r\n### \ud83c\udf89 Paquete Publicado\r\n\r\nEste proyecto est\u00e1 disponible en PyPI:\r\n\r\n- **Nombre:** `email-processor-cli`\r\n- **\u00daltima versi\u00f3n:** `2025.10.27.183827`\r\n- **URL:** https://pypi.org/project/email-processor-cli/\r\n\r\n### \ud83d\ude80 Publicar Nueva Versi\u00f3n\r\n\r\n**Publicaci\u00f3n autom\u00e1tica con timestamp:**\r\n\r\n```bash\r\n# Windows\r\nscripts\\publish_timestamp.bat\r\n\r\n# Linux/Mac\r\nchmod +x scripts/publish_timestamp.sh\r\n./scripts/publish_timestamp.sh\r\n```\r\n\r\nEl script:\r\n- Genera versi\u00f3n autom\u00e1tica: `YYYY.MM.DD.HHMMSS`\r\n- Actualiza archivos de configuraci\u00f3n\r\n- Construye el paquete\r\n- Publica en PyPI o TestPyPI\r\n\r\n**Formato de versi\u00f3n:**\r\n- `2025.01.27.143052` - 27 enero 2025, 14:30:52\r\n- `2025.02.15.091523` - 15 febrero 2025, 09:15:23\r\n\r\n### \ud83d\udcda Gu\u00edas de Publicaci\u00f3n\r\n\r\n- **[docs/PYPI_DEPLOYMENT.md](docs/PYPI_DEPLOYMENT.md)** - Documentaci\u00f3n completa\r\n- **[PYPI_COMMANDS.md](PYPI_COMMANDS.md)** - Referencia r\u00e1pida de comandos\r\n\r\n## \ud83e\uddea Pruebas\r\n\r\n```bash\r\n# Pruebas de API local\r\npython test_api.py\r\n\r\n# Pruebas de CLI\r\npython main_cli.py --input-type list --input \"test@example.com\" --new-domain new.com --output-type inline\r\n\r\n# Pruebas de librer\u00eda\r\npython examples/library_example.py\r\n```\r\n\r\n## \ud83d\udcd6 Documentaci\u00f3n\r\n\r\n### \ud83d\ude80 Gu\u00edas de Usuario\r\n\r\n| Documento | Descripci\u00f3n | Audiencia |\r\n|-----------|-------------|----------|\r\n| **[Inicio R\u00e1pido](docs/QUICK_START.md)** | Comienza en 5 minutos | Todos |\r\n| **[Gu\u00eda de Despliegue](docs/DEPLOYMENT_GUIDE.md)** | Despliegue completo en AWS | DevOps |\r\n| **[Hoja de Referencia](docs/CHEATSHEET.md)** | Comandos y configuraciones | Desarrolladores |\r\n| **[Integraci\u00f3n n8n](docs/N8N_INTEGRATION.md)** | Automatizaci\u00f3n con n8n | Automatizaci\u00f3n |\r\n| **[Publicaci\u00f3n PyPI](docs/PYPI_DEPLOYMENT.md)** | Publicar paquete en PyPI | Mantenedores |\r\n| **[Comandos PyPI](PYPI_COMMANDS.md)** | Referencia r\u00e1pida de comandos | Desarrolladores |\r\n\r\n### \ud83d\udccb Documentaci\u00f3n de Procesos (PDD)\r\n\r\n**[Process Definition Document](docs/pdd/PDD.md)** - Documentaci\u00f3n completa del proceso de negocio:\r\n\r\n| Secci\u00f3n | Contenido | Prop\u00f3sito |\r\n|---------|-----------|----------|\r\n| **Proceso AS-IS** | Proceso manual actual | Entender estado actual |\r\n| **Reglas de Negocio** | BR-001 a BR-005, TR-001 a TR-005 | Validaci\u00f3n y transformaci\u00f3n |\r\n| **An\u00e1lisis de Automatizaci\u00f3n** | Viabilidad y mapeo tecnol\u00f3gico | Justificar automatizaci\u00f3n |\r\n| **Visi\u00f3n TO-BE** | Proceso automatizado | Dise\u00f1ar soluci\u00f3n |\r\n| **Evaluaci\u00f3n de Riesgos** | Riesgos y mitigaci\u00f3n | Gesti\u00f3n de riesgos |\r\n| **Roadmap** | Plan de 6 meses | Implementaci\u00f3n gradual |\r\n\r\n### \ud83d\udcca Diagramas de Procesos\r\n\r\n**[docs/pdd/diagrams/](docs/pdd/diagrams/)** - Documentaci\u00f3n visual de procesos:\r\n\r\n| Diagrama | Descripci\u00f3n | Secci\u00f3n |\r\n|----------|-------------|----------|\r\n| `macroproceso.mmd` | Contexto organizacional (upstream/downstream) | 1.1 |\r\n| `swimlanes.mmd` | Secuencia de interacci\u00f3n de actores | 1.1 |\r\n| `alcance.mmd` | Visualizaci\u00f3n de alcance (dentro/fuera) | 1.2 |\r\n| `entradas-salidas.mmd` | Flujo de datos entrada/salida | 1.3-1.4 |\r\n| `flujo-detallado.mmd` | Flujo manual AS-IS detallado | 1.8 |\r\n| `heatmap-automatizacion.mmd` | Mapa de calor de viabilidad de automatizaci\u00f3n | 4.2 |\r\n| `proceso-tobe.mmd` | Proceso automatizado TO-BE | 5.1 |\r\n| `roadmap-transicion.mmd` | Gantt de transici\u00f3n de 6 meses | 5.3 |\r\n\r\n## \ud83d\udea2 Despliegue\r\n\r\n### Despliegue Local\r\n\r\n```bash\r\n# API Local\r\npython main_api.py\r\n# Servidor en http://localhost:5000\r\n\r\n# CLI\r\npython main_cli.py --input-type file --input sample_emails.txt --new-domain new.com\r\n```\r\n\r\n### Despliegue en AWS Lambda\r\n\r\nVer **[terraform/README.md](terraform/README.md)** para instrucciones completas.\r\n\r\n```bash\r\ncd terraform\r\n\r\n# Windows\r\nbuild.bat\r\n\r\n# Linux/Mac\r\n./build.sh\r\n\r\n# Desplegar infraestructura\r\nterraform init\r\nterraform plan\r\nterraform apply\r\n\r\n# Obtener API Key\r\nterraform output api_key\r\n```\r\n\r\n### Monitoreo y Logs\r\n\r\n**CloudWatch Logs:**\r\n\r\n| Recurso | Log Group | Retenci\u00f3n |\r\n|---------|-----------|----------|\r\n| Lambda Function | `/aws/lambda/email-processor` | 7 d\u00edas |\r\n| API Gateway | `/aws/apigateway/email-processor` | 7 d\u00edas |\r\n\r\n**M\u00e9tricas incluidas:**\r\n- Request/response completos\r\n- Errores y excepciones\r\n- Fallos de validaci\u00f3n (BR-001 a BR-005)\r\n- Validaci\u00f3n de API key\r\n- Tiempos de ejecuci\u00f3n\r\n\r\n## \ud83d\udc64 Autor\r\n\r\n**Anderson Taguada**\r\n\r\n- GitHub: [@anders2d](https://github.com/anders2d)\r\n- Email: ferchoafta@gmail.com\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "CLI tool for email processing with domain migration",
    "version": "2025.10.27.192812",
    "project_urls": {
        "Bug Reports": "https://github.com/yourusername/hiperautomatization/issues",
        "Documentation": "https://github.com/yourusername/hiperautomatization/blob/main/README.md",
        "Homepage": "https://github.com/yourusername/hiperautomatization",
        "Source": "https://github.com/yourusername/hiperautomatization"
    },
    "split_keywords": [
        "email",
        "processing",
        "cli",
        "domain",
        "migration",
        "automation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "97a684db64fe70a88c78c7d41fc624b7035f5b9804b3910e30fd52e17f1f6343",
                "md5": "206968aff5d97f0262c4ef79897fa352",
                "sha256": "3f305bd5c0b418013d38433a5eff18a5fadf56edb53f43d6bac632019df7d1ed"
            },
            "downloads": -1,
            "filename": "email_processor_cli-2025.10.27.192812-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "206968aff5d97f0262c4ef79897fa352",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 24866,
            "upload_time": "2025-10-28T00:28:49",
            "upload_time_iso_8601": "2025-10-28T00:28:49.278756Z",
            "url": "https://files.pythonhosted.org/packages/97/a6/84db64fe70a88c78c7d41fc624b7035f5b9804b3910e30fd52e17f1f6343/email_processor_cli-2025.10.27.192812-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "15cab3d7e1ed47c862aaffbf315328bcc84cb52e1397395d041c758d4e21d165",
                "md5": "6026c4114891df638ca65dfc068248e8",
                "sha256": "ec8ac01b7b87f99909bb784a05475fccbe57949d7556bddfd59c40a703bf5d57"
            },
            "downloads": -1,
            "filename": "email_processor_cli-2025.10.27.192812.tar.gz",
            "has_sig": false,
            "md5_digest": "6026c4114891df638ca65dfc068248e8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 66745,
            "upload_time": "2025-10-28T00:28:50",
            "upload_time_iso_8601": "2025-10-28T00:28:50.635767Z",
            "url": "https://files.pythonhosted.org/packages/15/ca/b3d7e1ed47c862aaffbf315328bcc84cb52e1397395d041c758d4e21d165/email_processor_cli-2025.10.27.192812.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-28 00:28:50",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yourusername",
    "github_project": "hiperautomatization",
    "github_not_found": true,
    "lcname": "email-processor-cli"
}
        
Elapsed time: 0.64186s