Doprava není úplně náklad ani úplně tržba. Zákazník něco zaplatí, dopravce si něco vezme, a rozdíl je buď malý zisk, nebo tichá ztráta. Ve výsledovce z toho zbydou dvě velká čísla a rozdíl, který vypadá přijatelně.
Jenže ten rozdíl je průměr. A míchají se v něm dvě úplně jiné věci: stokoruna vydělaná na lehké zásilce do výdejny a dvoustovka prodělaná na deseti kilech domů. Dohromady „skoro nula“ — a vy máte pocit, že je to v pořádku.
Dokud nevidíte jednotlivé zásilky, neřídíte dopravu — jen ji platíte.
Tak jsem si postavil report, který obě strany spáruje po objednávkách. Nikdo v něm nic nestahuje ani nepřepisuje — data si bere sám a přepočítá se každý den.
Dva dopravci, dvě úplně jiné cesty k datům
Žádní dva dopravci nedávají data stejně. Proto to není jedna integrace, ale dvě různé — a proto si takový report jen tak někdo neudělá.
- Zásilkovna má API. Nejlepší případ. Skript si stáhne faktury a ke každé rozpis zásilek: číslo zásilky, číslo objednávky, váhu, základní sazbu, palivový příplatek, mýtné, dobírku. Přesně to, co potřebuju.
- DPD API nemá — má e-mail. Faktury chodí jako XLS příloha do schránky. Hodilo se, že už mám napojený SupportBox z projektu na vytěžování faktur: skript projde zprávy, najde ty od DPD, stáhne přílohy a rozebere je. Do mailu se kvůli tomu nikdo nedívá.
Když data v hezké podobě neexistují, dají se vytáhnout z toho, co přijde — i když je to příloha v mailu. Podstatné je, že obě cesty běží automaticky a končí ve stejné tabulce.
Jedna tabulka pro všechny
Obě cesty končí ve stejné tabulce — jeden řádek na zásilku. Číslo zásilky, číslo objednávky, dopravce, datum podání, váha, náklad bez DPH a rozpad na složky.
Celý koloběh je bez člověka: v noci se stáhnou faktury z API i z mailu, spárují se s objednávkami a report se přepočítá. Ráno stačí otevřít odkaz. Žádné stahování XLS, žádné kopírování do Excelu, žádné „až na to budu mít čas“.
Sloupce jsou společné pro oba dopravce, i když je každý plní jinak. Report pak nemusí řešit, odkud data přišla.
Párování s objednávkami
Druhá polovina rovnice je to, co zaplatil zákazník. Bere se z objednávkového feedu e-shopu: v každé objednávce je vedle zboží položka dopravy a položka platby. Sečtou se zvlášť a je z toho „vybráno“.
Páruje se přes číslo objednávky, které dopravce nese jako „vaše číslo“. Tam problémy nebyly. Pozornost si vyžádalo něco jiného:
- Nespárované objednávky se nesmí schovat. Když se k nákladu objednávka nenajde, ukázalo by se „vybráno 0 Kč“ a zásilka by vypadala jako ztrátová. Report proto počítá, kolik takových je, a napíše to nad tabulku. Radši nepohodlné číslo než nepravdivý graf.
- Vícekusové zásilky. Když jde objednávka ve třech balících, DPD naúčtuje cenu jen u prvního, ale celkovou váhu zopakuje u každého. Prostý součet udělá z osmi kilo dvacet čtyři. Váha se proto sčítá jen z kusů s nenulovou cenou.
- Poplatek za dopravu ≠ poplatek za platbu. Dobírka je služba dopravce, ale s dopravou nemá co dělat. Kdyby zůstala v nákladu, každá dobírková objednávka by vypadala dráž, než je. Dobírky mají proto vlastní sekci.
Co z toho vypadne
Nahoře jsou čtyři čísla: kolik jsme vybrali, kolik nás to stálo, rozdíl a krytí nákladů v procentech. To poslední sleduju nejvíc — říká, jakou část ceny dopravy zaplatí zákazník. Sto procent znamená, že si doprava vydělá na sebe.
Pod tím jsou čtyři pohledy: podle dopravce, podle typu doručení, podle váhových pásem a konkrétní ztrátové zásilky. Pásma se počítají zvlášť pro výdejní místa a zvlášť pro doručení na adresu — liší se u nich sazby i váhy. Sloučené by nedávala platná čísla ani pro jedno.
| Pásmo | Zásilek | Ø vybráno | Ø náklad | Ø rozdíl | Krytí |
|---|---|---|---|---|---|
| 0–1 kg | 142 | 89 Kč | 112 Kč | −23 Kč | 79 % |
| 1–2 kg | 96 | 89 Kč | 131 Kč | −42 Kč | 68 % |
| 2–5 kg | 74 | 94 Kč | 168 Kč | −74 Kč | 56 % |
| 5–10 kg | 31 | 61 Kč | 229 Kč | −168 Kč | 27 % |
| 10+ kg | 11 | 18 Kč | 284 Kč | −266 Kč | 6 % |
| Celkem | 354 | 86 Kč | 148 Kč | −62 Kč | 58 % |
| Pásmo | Zásilek | Ø vybráno | Ø náklad | Ø rozdíl | Krytí |
|---|---|---|---|---|---|
| 0–1 kg | 270 | 69 Kč | 58 Kč | +11 Kč | 119 % |
| 1–2 kg | 172 | 69 Kč | 64 Kč | +5 Kč | 108 % |
| 2–5 kg | 119 | 71 Kč | 79 Kč | −8 Kč | 90 % |
| 5–10 kg | 30 | 52 Kč | 98 Kč | −46 Kč | 53 % |
| 10+ kg | 3 | 0 Kč | 124 Kč | −124 Kč | 0 % |
| Celkem | 594 | 68 Kč | 67 Kč | +1 Kč | 101 % |
| Objednávka | Dopravce | Váha | Vybráno | Náklad | Rozdíl |
|---|---|---|---|---|---|
| 2026101488 | DPD Private | 11,80 kg | 89 Kč | 271 Kč | −182 Kč |
| 2026101302 | Zásilkovna adresa | 8,40 kg | 99 Kč | 214 Kč | −115 Kč |
| 2026101245 | Zásilkovna výdejní | 6,10 kg | 0 Kč | 108 Kč | −108 Kč |
| 2026101177 | Balíkovna adresa | 9,30 kg | 79 Kč | 186 Kč | −107 Kč |
| 2026101094 | DPD Private | 7,20 kg | 89 Kč | 192 Kč | −103 Kč |
Co jsem se dozvěděl
Naše konkrétní čísla tu uvádět nebudu, ale závěry platí pro většinu e-shopů, které prodávají něco těžšího než kosmetiku:
- Ztráta je koncentrovaná. Není to všude trochu, je to malá skupina hodně. Těžké objednávky na adresu, kde zákazník platí stejně jako za balíček do výdejny.
- Hranice dopravy zdarma je nejdražší číslo v e-shopu. Nastavuje se jednou, obvykle odhadem, a pak se roky nesahá. Přitom rozhoduje o tom, kolik zásilek spadne do pásma, kde na každé proděláte.
- Ceníky se pohnou, aniž si toho všimnete. Palivový příplatek se mění tiše. Bez měsíčního srovnání zjistíte až po půl roce, že krytí odteklo o pár procent. Report to hlídá sám.
- Výdejní místa a doručení domů jsou dva různé byznysy. Míchat je do jednoho průměru znamená dotovat jedno druhým a nevědět o tom.
Nic z toho není objev. Jsou to jen věci, které se dají spočítat a rozhodnout — místo aby se odhadovaly.
Kde do toho vstupuje AI
Tenhle report by šel udělat i před pěti lety. Dvě integrace, jedna tabulka, pár agregací. Technicky na tom není nic nového.
Změnila se cena. Rozebrat cizí API, poprat se s XLS přílohou a odladit párování bývala práce na týdny. Kvůli zjištění, kolik proděláváte na zásilkách nad pět kilo, se do toho nikdo nepustil — vyplatilo se to jen firmám s vlastním vývojářem.
Ta hranice, od které se vlastní řešení vyplatí, se posunula hodně dolů. To je celá zpráva.
Moje práce nebyla psát kód. Byla v tom vědět, že náklad na dopravu není totéž co poplatek za dobírku, že vícekusová zásilka opakuje váhu a že pásma se počítají zvlášť pro výdejny. To je znalost e-shopu, a tu za vás zatím nikdo neudělá.
Kdy to dává smysl
Když posíláte dost zásilek na to, aby pár procent z ceny dopravy dělalo reálné peníze, prodáváte zboží s rozdílnou váhou a nabízíte víc dopravců. Nedává to smysl, když posíláte obálky do dvou set gramů za jednu cenu jedním dopravcem. Tam je průměr v pořádku.
A jestli si z toho chcete odnést jednu věc: otevřete si poslední fakturu od dopravce a rozdělte si ji podle váhy. I ručně, i za jeden měsíc, i v Excelu. Většinou se ukáže dost na to, abyste věděli, jestli má cenu stavět zbytek — a ten už poběží sám.