How it works
Code decides, AI only talks. Every check, total and ranking comes from the official rulebook and rate card, so the same booking always gets the same answer.
- InputChat or the Bookings + Items workbook
- Booking modelRaw value, clean value and source per field
- 10 checksPlus missing details, each with evidence
- CarrierEligible by weight, then ranked by priority
- ResultVerdict, fixes, carrier and next steps
AI’s only job
Turn a chat message into proposed edits. Code validates each one before anything changes.
If AI is down
A built-in parser and the guided booking fields take over. Every check still runs.
Nothing silent
Fixes need the seller’s click, every change is logged, and the upload is never modified.
Decisions and assumptions
10 judgement calls, each written down
ShowHide
Decisions and assumptions
10 judgement calls, each written down
- R-02 tolerance
- “Within 1%” is measured against the item total: |declared − Σ(qty × price)| ÷ Σ ≤ 1%. Exactly 1% passes. Compared in pence.
- R-05 and the “chosen carrier”
- The sheet has no chosen-carrier column, and a seller priority is not a carrier choice. R-05 is checked against the carrier we select (or the one the seller explicitly names in chat). If the seller's ideal service can't take the weight but another can, R-05 passes and we show a trade-off notice instead of blocking a shipment that can travel.
- Balanced priority
- Minimax regret over the services that can carry the weight: for cost, transit days and on-time rate, each option's distance from the best option is scaled 0–100% of the range; we pick the option whose biggest sacrifice is smallest. Ties go to the smaller total sacrifice, then cheaper, then faster. Recomputed every time, never hardcoded.
- Weight limits
- Weight per pallet = gross weight ÷ pallets, rounded to 0.01 kg. A limit is inclusive: exactly 500 kg is accepted by a 500 kg service; 750.01 kg is accepted by none.
- Repacking scenarios
- Shown separately and only applied when the seller approves. Gross weight is kept unchanged (the data has no pallet tare weight), and the scenario says so.
- Transit and dates
- Transit days are treated as calendar days, so delivery dates are estimates. “Today” is the current date in India (IST); a ready date of today passes R-10.
- Dangerous goods (R-06)
- Whole-word phrase matching on descriptions, with negations removed first (“battery-free”, “phone case”, “empty bottle”). Devices that usually contain a lithium battery (laptops, phones, speakers…) are flagged Red until the seller confirms there's no battery.
- HS codes
- Spaces and dots are ignored (6912.00 → 691200). A 5-digit code is flagged with a note that Excel may have dropped a leading zero; it is never padded automatically.
- Fix confidence
- Arithmetic correction: a total recomputed from the item lines. Evidence-supported: the only option the rest of the booking agrees with (e.g. the quantity that also matches the declared value). Needs seller confirmation: facts only the seller knows. Nothing is changed without the seller's click, and every change can be undone.
- Verdict
- Blocked (any red) → Incomplete (missing details) → Passed with warnings (amber only) → Passed. The final state is “Ready for booking”: this MVP does not place the order with a carrier.
Rulebook
R-01 to R-10 · six Red (block), four Amber (warn)
ShowHide
Rulebook
R-01 to R-10 · six Red (block), four Amber (warn)
| R-01 | Every item must have an HS code of at least 6 digits Customs need the exact HS code to classify the goods; general or catch-all codes are not accepted, so the shipment is held. | Red |
| R-02 | Total declared value must equal the sum of quantity × unit price across all items (within 1%) Customs compare the invoice, packing list and declared value; a mismatch leads to a hold and possible penalties. | Red |
| R-03 | For each item, units per carton × cartons must equal quantity The receiving warehouse counts cartons; if the numbers don't add up, units are reported missing. | Red |
| R-04 | Total cartons on the booking must equal the sum of cartons across all items The carton count on the booking is what the warehouse checks on arrival; a gap is logged as missing stock. | Red |
| R-05 | Weight per pallet (total gross weight ÷ pallets) must not exceed the chosen carrier's max weight per pallet The carrier refuses pallets above its limit at collection. | Red |
| R-06 | No lithium batteries, aerosols or flammable liquids These standard road services do not accept dangerous goods; the carrier refuses the shipment. | Red |
| R-07 | Total gross weight must be at least the sum of unit weight × quantity across all items Carriers and customs re-weigh shipments; a declared weight lighter than the goods themselves is queried. | Amber |
| R-08 | Shipments to a warehouse must have a delivery appointment booked Warehouses turn away deliveries that arrive without a booked slot. | Amber |
| R-09 | Every item must have a country of origin A missing or wrong country of origin is treated as misdeclaration; both exporter and importer can be penalised. | Amber |
| R-10 | Ready to ship date must not be in the past Collection cannot happen on a date that has already passed. | Amber |
Rate card
Fixed · 3 services × 3 destination countries
ShowHide
Rate card
Fixed · 3 services × 3 destination countries
| Carrier | Route | £ / pallet | Transit | On-time | Max kg / pallet |
|---|---|---|---|---|---|
| Carrier A Road economy | UK → Germany | £180 | 5 days | 92% | 500 |
| Carrier B Road standard | UK → Germany | £220 | 3 days | 95% | 750 |
| Carrier C Road express | UK → Germany | £340 | 2 days | 98% | 400 |
| Carrier A Road economy | UK → France | £170 | 5 days | 92% | 500 |
| Carrier B Road standard | UK → France | £210 | 3 days | 95% | 750 |
| Carrier C Road express | UK → France | £330 | 2 days | 98% | 400 |
| Carrier A Road economy | UK → Netherlands | £160 | 5 days | 92% | 500 |
| Carrier B Road standard | UK → Netherlands | £200 | 3 days | 95% | 750 |
| Carrier C Road express | UK → Netherlands | £320 | 2 days | 98% | 400 |
Weight bands: up to 400 kg per pallet all three services qualify; 400–500 kg Economy and Standard; 500–750 kg Standard only; above 750 kg none.
