Files
hermes-skills/email/email-automation/references/continuous-invoice-organizer/learning-json-format.md
T

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