71 lines
2.2 KiB
Markdown
71 lines
2.2 KiB
Markdown
# learning.json Format
|
|
|
|
The learning file at `~/.hermes/email-organizer/learning.json` accumulates email classification rules across cron runs.
|
|
|
|
## Structure
|
|
|
|
```json
|
|
{
|
|
"corrections": [],
|
|
"patterns": {
|
|
"rechnung": {
|
|
"<pattern_name>": {
|
|
"sender": "exact@sender.com",
|
|
"sender_pattern": "@appleid.com",
|
|
"subject_keywords": ["keyword1", "keyword2"],
|
|
"content_keywords": ["rechnung", "rechnungsnummer"],
|
|
"folder": "Rechnungen_YYYY_MM",
|
|
"source": "Vendor name",
|
|
"notes": "Description and context"
|
|
}
|
|
},
|
|
"bestellbestaetigung": {
|
|
"<pattern_name>": { ... }
|
|
},
|
|
"ignorieren": {
|
|
"<pattern_name>": { ... }
|
|
}
|
|
},
|
|
"structured_ignore_patterns": [],
|
|
"last_scan": "2026-06-10 09:13",
|
|
"total_processed": 554,
|
|
"total_moved": 20
|
|
}
|
|
```
|
|
|
|
## Pattern Fields
|
|
|
|
| Field | Required | Description |
|
|
|-------|----------|-------------|
|
|
| `sender` | Conditional | Exact email address (use with `sender_pattern` only) |
|
|
| `sender_pattern` | Conditional | Email domain pattern with `@` prefix (e.g., `@appleid.com`) |
|
|
| `subject_keywords` | Yes | Keywords matched case-insensitively in subject |
|
|
| `content_keywords` | Conditional | Keywords matched in email body |
|
|
| `folder` | Conditional | Override target folder (defaults based on category) |
|
|
| `source` | Yes | Human-readable vendor/source name |
|
|
| `notes` | Yes | Context: what type of email, whether it's an invoice or order, any caveats |
|
|
|
|
## Decision Criteria
|
|
|
|
### Invoice (Rechnung)
|
|
Contains a **factored charge**: Rechnungsnummer, Gesamtbetrag, Steuern, Fälligkeitsdatum, Lastschrift.
|
|
|
|
### Order Confirmation (Bestellbestätigung)
|
|
Contains an **order number and items** but NO invoice details. Invoice arrives separately.
|
|
|
|
### Ignore
|
|
- Delivery notifications ("zugestellt", "versendet")
|
|
- Newsletters, marketing emails
|
|
- Social media notifications
|
|
- Job alerts
|
|
- Technical reports (solar, DMARC)
|
|
|
|
## Update Workflow
|
|
|
|
When a new pattern emerges during a scan:
|
|
1. Add entry under the correct category in `patterns`
|
|
2. Include `source` with vendor name
|
|
3. Include `notes` with distinguishing characteristics
|
|
4. Increment `total_processed` and `total_moved`
|
|
5. Update `last_scan` timestamp
|