Daglig ruttplanering, kundklustring, tidsuppskattning for hamtning och leverans
Du planerar dagliga rutter for hamtning och leverans av knivar. Mal: minimera restid, maximera antal stopp per tur.
Folj instruktionerna i .claude/skills/shared/helpers.md.
Knivslip AB:s USP ar 2 dagars leverans. Effektiva rutter ar nyckeln till att halla det loftet utan att bransle och tid ater upp vinsten.
Trigger: "planera idag", "planera imorgon", "planera [datum]", "rutt"
Procedur:
Las data/orders.json — hitta:
quality_check, ready, out_for_deliverybooked och pickup.date = valt datumLas data/customers.json — hamta adresser och area_id
Las data/areas.json — hamta omradesinfo och restider
PRIORITERA leveranser efter deadline: a. Berakna deadline = pickup.completed_at + 2 dagar b. Sortera: mest bradskande forst c. Ordrar forbi deadline = ROD — maste ut FORST
Klustra per omrade: a. Matcha varje kunds area_id (eller postnummer → omrade) b. Gruppera stopp per omrade c. Om BADE leverans OCH hamtning i samma omrade: KOMBINERA (sparar en hel tur — enormt vaerdefullt)
Tilldela till 2 forare (Gustav + Philip): a. Dela omraden geografiskt — en tar norr/ost, andra soder/vast b. Balansera: max 2 stopp skillnad c. Om bara 1-3 stopp: en forare racker
Optimera ruttordning per forare (nearest-neighbor): a. Borja fran hemmabase (Klostervagen 6, Nacka) b. Leveranser FORST i varje omrade c. Sedan hamtningar i samma omrade d. Flytta till nasta narmaste omrade (anvand distances_minutes) e. Tillbaka till basen
Tiduppskattning:
Spara i data/schedule.json:
{
"date": "YYYY-MM-DD",
"assigned_to": "gustav",
"stops": [
{
"order_id": "ORD-...",
"customer_id": "CUS-...",
"type": "pickup",
"customer_name": "Anna Svensson",
"address": "Storgatan 12, 712 34 Lindesberg",
"area_id": "AREA-LINDESBERG",
"time_window": "17:00-19:00",
"estimated_time": "17:00",
"sequence": 1,
"completed": false,
"notes": ""
}
],
"estimated_total_time_min": 90,
"estimated_start": "16:30",
"estimated_end": "18:00",
"notes": ""
}
RUTT {datum} — {gustav/philip}
════════════════════════════════
Uppskattad tid: {start} - {slut} ({total} min)
# Typ | Kund | Adress | Tid
── ─────────|───────────────────|────────────────────────────|─────
1 HAMTNING | Anna Svensson | Storgatan 12, Lindesberg | 17:00
2 LEVERANS | Erik Johansson | Kungsgatan 5, Lindesberg | 17:20
3 HAMTNING | Maria Lindqvist | Brogatan 8, Nora | 17:50
Hemma ca: 18:15
Trigger: "visa schema", "dagens schema", "veckans schema"
data/schedule.jsonFor veckovisning: visa varje dag med antal stopp och omraden
Trigger: "lagg till stopp", "extra stopp"
Trigger: "klart", "stopp klart", "levererat"
completed = truepicked_updeliveredTrigger: "kombinera", "optimera", "samordna"
data/orders.json — hitta alla bokade hamtningar och klara leveranser for kommande 3 dagardata/customers.json — hamta adresserKOMBINATIONSMOJLIGHETER
════════════════════════
Omrade Lindesberg (3 stopp):
- HAMTNING: Anna Svensson (ORD-001) — 5 knivar
- LEVERANS: Erik Johansson (ORD-002) — 3 knivar
- LEVERANS: Lisa Karlsson (ORD-003) — 2 knivar
Sparar ca 20 min jamfort med separata rundor
Trigger: "tilldela", "vem kor"
assigned_to pa varje stopp och pa dagsschematTrigger: "omraden", "lagg till omrade", "visa omraden"
data/areas.jsondata/schedule.jsondata/orders.json, data/customers.json, data/areas.jsonTilldela fasta dagar till omraden for att minimera korsande rutter:
| Dag | Foreslaget omrade |
|---|---|
| Mandag | Nacka centrum/Sickla |
| Tisdag | Boo/Orminge |
| Onsdag | Saltsjobaden/Fisksatra |
| Torsdag | Gustavsberg/Varmdo |
| Fredag | Flex / ikapp / avlägna omraden |
Nar en kund bokar: foresla den dag som matchar deras zon. Samla minst 3 stopp per zon innan en runda planeras (undantag: Nacka centrum som ar nara basen).
Varje runda bor innehalla BADE hamtningar och leveranser i samma omrade:
Pamin om att skicka SMS till kunder:
Kommando: "standbylista", "flexibla kunder"
Visa kunder som sagt "nar som helst" eller "nar ni ar i omradet":