Skip to content

Commit c3646f6

Browse files
author
Roberto
committed
docs: Update README for v1.0.0 with app-based installation
- Add Mail Processors.app as recommended installation method - Simplify documentation with wizard-based setup - Update project structure to reflect modular architecture - Streamline troubleshooting and configuration sections
1 parent 351f0fc commit c3646f6

File tree

1 file changed

+93
-198
lines changed

1 file changed

+93
-198
lines changed

README.md

Lines changed: 93 additions & 198 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,47 @@ Usa **Google Gemini Flash 2.5** para extracción inteligente de datos.
1414
- 📬 Mueve y marca correos automáticamente
1515
- ⚠️ Validación: solo procesa documentos válidos (ignora publicidad)
1616
- 💰 Costo mínimo (~$0.001 por documento)
17+
- 🧩 Arquitectura modular para agregar nuevos processors
18+
19+
## 🚀 Instalación Rápida
20+
21+
### Opción 1: App con Wizard (Recomendada)
22+
23+
1. **Descarga** `Mail Processors.app` de [Releases](https://github.com/rmichelena/apple_mail_processors/releases)
24+
2. **Mueve** la app a `/Applications` o donde prefieras
25+
3. **Abre** la app y sigue el wizard
26+
27+
El wizard automáticamente:
28+
- ✅ Verifica/instala Python y qpdf
29+
- ✅ Te permite seleccionar qué processors activar
30+
- ✅ Configura carpetas de Mail, API key, y directorio de salida
31+
- ✅ Crea las carpetas necesarias en Mail.app
32+
- ✅ Instala las dependencias Python
33+
- ✅ Compila e instala los AppleScripts
34+
35+
### Opción 2: Instalación Manual (Desarrolladores)
36+
37+
```bash
38+
git clone https://github.com/rmichelena/apple_mail_processors.git
39+
cd apple_mail_processors
40+
./install.sh
41+
nano config/config.toml # Configurar API key, passwords, etc.
42+
```
43+
44+
## 📋 Requisitos
45+
46+
- **macOS 11 Big Sur o superior**
47+
- **Python 3.11+**
48+
- **API Key de Google Gemini** - [Obtener gratis](https://aistudio.google.com/app/apikey)
49+
- **qpdf** - Para descifrar PDFs (se instala automáticamente)
50+
51+
| macOS | Soporte |
52+
|-------|---------|
53+
| 14 Sonoma ||
54+
| 13 Ventura ||
55+
| 12 Monterey ||
56+
| 11 Big Sur ||
57+
| 10.15 o anterior ||
1758

1859
## 🏗️ Arquitectura
1960

@@ -24,273 +65,127 @@ Mail.app
2465
│ │
2566
│ ├─ Extrae PDF del .eml
2667
│ ├─ Quita password (qpdf)
27-
│ ├─ Valida con Gemini (¿es EECC real?)
68+
│ ├─ Valida con Gemini
2869
│ ├─ Si válido: genera CSVs/JSON
2970
│ └─ Si válido: mueve a EECC/
3071
3172
└─ Regla: Taxi → AppleScript → Python
3273
3374
├─ Convierte HTML a Markdown
34-
├─ Valida con Gemini (¿es recibo real?)
75+
├─ Valida con Gemini
3576
├─ Si válido: agrega a CSV
3677
└─ Si válido: mueve a Taxis/
3778
```
3879

39-
> **Nota:** Si el documento no es válido (publicidad, otro tipo de correo), el mensaje
40-
> queda sin procesar para revisión manual. Solo se mueven los correos procesados exitosamente.
80+
> **Nota:** Si el documento no es válido (publicidad, etc.), el mensaje
81+
> queda sin procesar para revisión manual.
4182
42-
## 📁 Estructura del Proyecto
83+
## 📁 Estructura
4384

4485
```
45-
mail-processors/
46-
├── config/
47-
│ └── config.toml # 🔒 Configuración real (NO en git)
48-
├── scripts/
49-
│ ├── config.py # Carga configuración
50-
│ ├── mail_actions.py # Read+move mensajes vía osascript
51-
│ ├── extract_movements.py # Extractor de estados de cuenta
52-
│ ├── extract_from_email.py # Procesa .eml de EECC
53-
│ └── extract_taxi_trip.py # Procesa .eml de taxis
54-
├── applescripts/
55-
│ ├── procesar_eecc.applescript # Código fuente (texto, versionable)
56-
│ └── procesar_taxi.applescript # Código fuente (texto, versionable)
57-
├── config.example.toml # ✅ Template (SÍ en git)
58-
├── requirements.txt
59-
├── install.sh
60-
├── .gitignore
86+
apple_mail_processors/
87+
├── Mail Processors.app/ # 🆕 App con wizard de instalación
88+
│ └── Contents/
89+
│ └── Resources/
90+
│ ├── processors/ # Processors modulares
91+
│ │ ├── eecc/
92+
│ │ ├── taxi/
93+
│ │ └── amazon/ # (próximamente)
94+
│ └── lib/ # Módulos Python compartidos
95+
├── scripts/ # Scripts para instalación manual
96+
├── applescripts/ # Fuentes AppleScript (texto)
97+
├── config.example.toml # Template de configuración
98+
├── install.sh # Instalador alternativo (CLI)
6199
└── README.md
62100
```
63101

64-
### Nota sobre AppleScripts
102+
## ⚙️ Configuración Post-Instalación
65103

66-
Los archivos `.applescript` son **código fuente en texto** (versionables en git).
104+
Después de ejecutar el wizard, solo necesitas crear las **reglas en Mail.app**:
67105

68-
El script `install.sh` los compila a `.scpt` (binarios) y los instala en:
69-
```
70-
~/Library/Application Scripts/com.apple.mail/
71-
```
106+
1. Mail → Preferencias → Reglas → Agregar regla
107+
2. **Para Estados de Cuenta:**
108+
- Condición: "From contains" + remitentes de tus bancos
109+
- Acción: "Run AppleScript" → `Mail_Processors_EECC.scpt`
110+
3. **Para Taxis:**
111+
- Condición: "From contains" + uber, cabify, etc.
112+
- Acción: "Run AppleScript" → `Mail_Processors_Taxi.scpt`
72113

73-
Esta es la carpeta requerida por Mail.app para ejecutar scripts desde reglas.
74-
75-
## 📋 Requisitos
76-
77-
- **macOS 11 Big Sur o superior** (probado en Sonoma/Ventura/Monterey)
78-
- **Python 3.11+** (probado con 3.14)
79-
- **qpdf** - para descifrar PDFs (se instala automáticamente si tienes Homebrew)
80-
- **API Key de Google Gemini** - obtener gratis en [AI Studio](https://aistudio.google.com/app/apikey)
81-
82-
### Compatibilidad macOS
83-
84-
| Versión | Soporte |
85-
|---------|---------|
86-
| macOS 14 Sonoma | ✅ Completo |
87-
| macOS 13 Ventura | ✅ Completo |
88-
| macOS 12 Monterey | ✅ Completo |
89-
| macOS 11 Big Sur | ✅ Debería funcionar |
90-
| macOS 10.15 Catalina | ⚠️ Sin soporte oficial de Homebrew |
91-
| macOS 10.14 o anterior | ❌ No soportado |
92-
93-
### Dependencias Python (se instalan automáticamente)
94-
- `google-genai` - SDK de Google Gemini AI
95-
- `pydantic` - Validación de datos
96-
- `beautifulsoup4` - Procesamiento HTML
97-
- `markdownify` - Conversión HTML→Markdown
98-
99-
## 🚀 Instalación
100-
101-
### 1. Clonar/Descargar
102-
103-
```bash
104-
git clone https://github.com/rmichelena/apple_mail_processors.git
105-
cd apple_mail_processors
106-
```
107-
108-
### 2. Ejecutar instalador
109-
110-
```bash
111-
./install.sh
112-
```
113-
114-
El instalador automáticamente:
115-
- ✅ Detecta Python y actualiza la configuración
116-
- ✅ Instala qpdf via Homebrew (si está disponible)
117-
- ✅ Detecta paths y los configura
118-
- ✅ Crea `config/config.toml` desde el template
119-
- ✅ Instala dependencias Python
120-
- ✅ Compila e instala los AppleScripts
121-
122-
### 3. Editar configuración
123-
124-
```bash
125-
nano config/config.toml
126-
```
127-
128-
Solo necesitas configurar manualmente:
129-
- `gemini.api_key` - Obtener en https://aistudio.google.com/app/apikey
130-
- `pdf.password` - Password de tus PDFs bancarios
131-
- `paths.output_folder` - Dónde guardar CSVs/PDFs
132-
133-
> **Nota:** `python_path` y `qpdf_path` se detectan automáticamente durante la instalación.
134-
135-
### 5. Crear carpetas en Mail.app
136-
137-
Crea dos carpetas en tu buzón:
138-
- `EECC` - Para estados de cuenta procesados
139-
- `Taxis` - Para correos de taxi procesados
140-
141-
### 6. Configurar reglas en Mail.app
142-
143-
**Regla para Estados de Cuenta:**
144-
- Menú: Mail → Preferencias → Reglas → Agregar regla
145-
- Nombre: "Procesar EECC"
146-
- Condición: "From contains" + remitentes de tus bancos
147-
- Acción: "Run AppleScript" → selecciona `procesar_eecc.scpt`
148-
(aparecerá automáticamente si está en `~/Library/Application Scripts/com.apple.mail/`)
149-
- ⚠️ NO agregues "Move Message" ni "Mark as Read"
150-
151-
**Regla para Taxis:**
152-
- Similar, pero con remitentes de Uber, Cabify, etc.
153-
- AppleScript: `procesar_taxi.scpt`
154-
155-
## ⚙️ Configuración
156-
157-
### config.toml
158-
159-
```toml
160-
[gemini]
161-
api_key = "AIzaSy..." # API key de Google Gemini
162-
163-
[paths]
164-
output_folder = "~/Dropbox/estados-cuenta" # Dónde guardar archivos
165-
python_path = "/Library/Frameworks/Python.framework/Versions/3.14/bin/python3"
166-
qpdf_path = "/opt/homebrew/bin/qpdf"
167-
eml_temp_folder = "~/Library/MailEML"
168-
169-
[mail]
170-
eecc_folder = "EECC" # Carpeta destino en Mail
171-
taxi_folder = "Taxis" # Carpeta destino en Mail
172-
173-
[pdf]
174-
password = "12345678" # Password de PDFs bancarios
175-
176-
[logging]
177-
eecc_log = "~/Library/Logs/MailEECCRule.log"
178-
taxi_log = "~/Library/Logs/MailTaxiRule.log"
179-
```
114+
⚠️ **Importante:** NO agregues "Move Message" ni "Mark as Read" en las reglas.
180115

181116
## 📤 Salida
182117

183118
### Estados de Cuenta
184119

185-
Por cada PDF procesado genera:
120+
Por cada PDF genera:
186121
- `Visa Interbank 2025-05 PEN.csv` - Movimientos en soles
187-
- `Visa Interbank 2025-05 USD.csv` - Movimientos en dólares (si aplica)
188-
- `Visa Interbank 2025-05.json` - Datos completos con metadata
122+
- `Visa Interbank 2025-05 USD.csv` - Movimientos en dólares
123+
- `Visa Interbank 2025-05.json` - Metadata completa
189124
- `Visa Interbank 2025-05.pdf` - PDF renombrado
190125

191-
**Formato CSV:**
192126
```csv
193127
fecha,descripcion,monto,tipo
194128
2025-05-01,WONG SURCO,125.50,consumo
195129
2025-05-02,NETFLIX.COM,44.90,consumo
196-
2025-05-15,PAGO RECIBIDO,-500.00,pago
197130
```
198131

199132
### Viajes de Taxi
200133

201-
Un CSV consolidado: `viajes taxi.csv`
134+
CSV consolidado: `viajes taxi.csv`
202135

203136
```csv
204137
fecha,hora,empresa,origen,destino,moneda,precio
205-
2025-05-01,08:30,Uber,Av. Javier Prado 123,Aeropuerto Jorge Chávez,PEN,45.00
206-
2025-05-02,19:15,Cabify,Centro Comercial Jockey,Miraflores,PEN,22.50
138+
2025-05-01,08:30,Uber,Av. Prado 123,Aeropuerto,PEN,45.00
207139
```
208140

209141
## 📋 Logs
210142

211-
- Estados de cuenta: `~/Library/Logs/MailEECCRule.log`
212-
- Taxis: `~/Library/Logs/MailTaxiRule.log`
213-
- Errores Python: `{output_folder}/errores.log`
214-
215-
Ver logs en tiempo real:
216143
```bash
217-
tail -f ~/Library/Logs/MailEECCRule.log
144+
# Ver logs en tiempo real
145+
tail -f ~/Library/Logs/MailProcessors_EECC.log
146+
tail -f ~/Library/Logs/MailProcessors_Taxi.log
218147
```
219148

220149
## 🛠️ Uso Manual
221150

222-
### Procesar un PDF directamente
223-
224151
```bash
225-
cd scripts
226-
python3 extract_movements.py "/ruta/al/estado-cuenta.pdf"
227-
```
228-
229-
### Procesar un .eml
230-
231-
```bash
232-
python3 extract_from_email.py "/ruta/al/correo.eml"
233-
```
152+
# Procesar PDF directamente
153+
python3 scripts/extract_movements.py "/ruta/al/estado-cuenta.pdf"
234154

235-
### Procesar correo de taxi
155+
# Procesar .eml de estado de cuenta
156+
python3 scripts/extract_from_email.py "/ruta/al/correo.eml"
236157

237-
```bash
238-
python3 extract_taxi_trip.py "/ruta/al/correo.eml"
158+
# Procesar .eml de taxi
159+
python3 scripts/extract_taxi_trip.py "/ruta/al/correo.eml"
239160
```
240161

241162
## 🐛 Troubleshooting
242163

243164
### El script no se ejecuta
244-
245-
1. Verifica permisos de automatización:
246-
- Preferencias del Sistema → Privacidad → Automatización
247-
- Mail debe poder controlar "System Events"
248-
249-
2. Verifica que Python está en el path correcto:
250-
```bash
251-
which python3
252-
```
253-
254-
3. Revisa los logs:
255-
```bash
256-
tail -50 ~/Library/Logs/MailEECCRule.log
257-
```
165+
- Verifica permisos: Preferencias → Privacidad → Automatización
166+
- Revisa logs: `tail -50 ~/Library/Logs/MailProcessors_EECC.log`
258167

259168
### Error de qpdf
260-
261169
```bash
262-
# Verificar instalación
263-
qpdf --version
264-
265-
# Reinstalar si es necesario
266170
brew reinstall qpdf
267171
```
268172

269173
### Error de API Gemini
270-
271-
- Verifica que la API key sea correcta
272-
- Verifica que no hayas excedido el límite gratuito
273-
- Revisa https://aistudio.google.com/ para ver tu uso
274-
275-
### PDFs no se descifran
276-
277-
- Verifica el password en `config/config.toml`
278-
- Algunos bancos usan formatos de password diferentes
174+
- Verifica la API key en `~/.config/mail_processors/config.toml`
175+
- Revisa tu uso en https://aistudio.google.com/
279176

280177
## 💰 Costos
281178

282-
Google Gemini Flash 2.5 es muy económico:
283-
- ~$0.001 por estado de cuenta procesado
179+
- ~$0.001 por estado de cuenta
284180
- ~$0.0002 por correo de taxi
285-
286-
Con uso normal (5-10 correos/mes), el costo es prácticamente $0.
181+
- Con uso normal: prácticamente $0/mes
287182

288183
## 🔐 Seguridad
289184

290-
- **NUNCA** subas `config/config.toml` a git (contiene API keys y passwords)
291-
- El archivo `.gitignore` ya lo excluye automáticamente
292-
- Usa `config.example.toml` como template en el repositorio
185+
- La configuración se guarda en `~/.config/mail_processors/config.toml`
186+
- **NUNCA** subas archivos de configuración a git
187+
- El `.gitignore` ya excluye archivos sensibles
293188

294189
## 📜 Licencia
295190

296-
MIT License - Usa como quieras.
191+
MIT License

0 commit comments

Comments
 (0)