# Procesador de Correos - Arquitectura Hexagonal
[](https://www.python.org/downloads/)
[](https://pypi.org/project/email-processor-cli/)
[](LICENSE)
[](https://aws.amazon.com/lambda/)
[](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[](https://www.python.org/downloads/)\r\n[](https://pypi.org/project/email-processor-cli/)\r\n[](LICENSE)\r\n[](https://aws.amazon.com/lambda/)\r\n[](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"
}