logistics.book_furniture_move — Full Intent Specification
INTENT NAMESPACE: logistics
INTENT NAME: book_furniture_move
FULL ID: logistics.book_furniture_move
VERSION: v1.0.0
STATUS: live
TTBS WEIGHTS: time 0.25 · taste 0.10 · budget 0.30 · safety 0.35
LAST UPDATED: 2026-05-14
Single-item or small-set furniture relocation: sofa, bed, fridge, washing machine, treadmill, wardrobe, etc. Distinct from logistics.book_full_house_move because: (a) crew size is 2–3 (not 6+); (b) one or two pieces, not packing-list; (c) item-specific dismantle/reassemble skills (bed frame, wardrobe panels, treadmill brake) matter more than truck capacity; (d) usually intracity (intercity furniture move is allowed but rare). Distinct from logistics.send_intracity_parcel because: (a) heavy / oversize; (b) hoisting through stairwell, elevator clearance; (c) anti-damage padding mandatory; (d) carpenter add-on for assembly.
1. NATURAL LANGUAGE COVERAGE
Classifies IN
- "move sofa to new apartment"
- "shift fridge from old place"
- "Porter for a bed"
- "shift my washing machine"
- "move treadmill upstairs"
- "shift wardrobe across town"
- "relocate dining table, fragile glass top"
- "move my study desk and chair"
- "shift IKEA bookshelf, needs disassembly"
- "couch + 2 chairs to friend's house"
Classifies OUT — borderline NO
- "shift entire 2BHK" →
logistics.book_full_house_move - "courier a chair to Mumbai" →
logistics.send_intercity_parcel(small light items) - "bike transport" →
logistics.book_bike_transport - "move office files" → small set:
logistics.send_intracity_parcel; big set:logistics.book_full_house_move
MULTI-INTENT TRIGGERS
- "move sofa + buy new TV unit" →
logistics.book_furniture_move+marketplace.buy_used_furniture(or e-com) - "shift fridge + book carpenter for kitchen"
2. INPUT — TOMO → PROVIDER
{
"intent": "logistics.book_furniture_move",
"intent_version": "v1.0.0",
"request_id": "req_fm_5x8q_2026-05-14T12:00:00Z",
"user_session_id": "anon_user_token_or_uid",
"pickup": {
"address_id": "addr_old_apt_v1",
"lat": 17.4239, "lng": 78.4738,
"pin": "500032",
"floor": "3",
"lift_available": true,
"stairs_width_cm_optional": 110,
"contact_phone_e164": "+91XXXXXXXXXX",
"ready_at_iso": "2026-05-15T10:00:00+05:30"
},
"drop": {
"address_id": "addr_new_apt_v1",
"lat": 17.4435, "lng": 78.3772,
"pin": "500081",
"floor": "5",
"lift_available": true,
"stairs_width_cm_optional": 105,
"contact_phone_e164": "+91XXXXXXXXXX"
},
"items": [
{
"item": "sofa_3_seater",
"dim_l_cm": 220, "dim_w_cm": 90, "dim_h_cm": 85,
"weight_kg_estimate": 70,
"fragile_glass_or_marble": false,
"needs_dismantle": false
},
{
"item": "dining_table_glass_top",
"dim_l_cm": 180, "dim_w_cm": 90, "dim_h_cm": 75,
"weight_kg_estimate": 50,
"fragile_glass_or_marble": true,
"needs_dismantle": true
}
],
"add_ons": {
"carpenter_reassembly": true,
"packing_blanket_wrap": true,
"appliance_uninstall": false
},
"vehicle_preference": "mini_truck",
"vehicle_allowed": ["mini_truck", "tempo"],
"user_constants": {
"preferred_partners": ["Porter Trucks", "Pikkol", "Agarwal Packers (light)"]
}
}
Field rules
floor+lift_available+stairs_width_cmtogether determine surcharge band.fragile_glass_or_marble: true→ mandatory packing blanket + corner padding.needs_dismantle: true→ carpenter add-on auto-suggested.- Vehicle ENUM strict.
3. PROVIDER TOOLS
furn.survey_estimate
Returns price estimate based on declared items + vehicle + floors + dismantle. May trigger video survey for large jobs.
furn.book_slot
Books crew + vehicle.
furn.assign_crew
Pre-job assignment with crew details + carpenter (if added).
furn.live_track
Crew GPS during the move window.
furn.completion_photo_capture
Post-move photo at drop floor — pre-condition for closure.
furn.dispute_damage
Files damage claim against partner insurance within 24h of completion.
furn.cancel
Pre-crew-dispatch only.
4. RESPONSE SHAPE
{
"intent": "logistics.book_furniture_move",
"request_id": "req_fm_5x8q_2026-05-14T12:00:00Z",
"options": [
{
"tier": "OK",
"provider": "Porter Trucks",
"vehicle": "mini_truck",
"crew_size": 2,
"carpenter_included": false,
"packing_blanket_included": true,
"price_inr": 1800,
"eta_pickup_window_iso": "2026-05-15T10:00:00+05:30",
"duration_estimate_min": 90,
"insurance_cover_inr": 5000,
"ttbs_score": 0.62,
"tier_reason": "cheapest, basic packing only"
},
{
"tier": "GOOD",
"provider": "Pikkol",
"vehicle": "mini_truck",
"crew_size": 3,
"carpenter_included": true,
"packing_blanket_included": true,
"fragile_corner_padding": true,
"price_inr": 3200,
"eta_pickup_window_iso": "2026-05-15T10:00:00+05:30",
"duration_estimate_min": 120,
"insurance_cover_inr": 25000,
"background_check_band": "verified",
"ttbs_score": 0.84,
"tier_reason": "balanced — carpenter + fragile padding + verified crew"
},
{
"tier": "GREAT",
"provider": "Agarwal Packers (Light Move)",
"vehicle": "tempo",
"crew_size": 4,
"carpenter_included": true,
"packing_blanket_included": true,
"fragile_corner_padding": true,
"appliance_uninstall_included": true,
"price_inr": 5400,
"eta_pickup_window_iso": "2026-05-15T09:30:00+05:30",
"duration_estimate_min": 150,
"insurance_cover_inr": 75000,
"insurance_cover_meets_declared_value": true,
"background_check_band": "verified_plus_aadhaar",
"ttbs_score": 0.91,
"tier_reason": "uninstall + 4-crew + ₹75k cover + Aadhaar verified"
}
],
"floor_surcharge_disclosure": {
"pickup_floor": 3,
"drop_floor": 5,
"lifts_both_sides": true,
"stair_surcharge_inr": 0
}
}
5. CONTROLLED VOCABULARIES
vehicle
mini_truck · tempo · large_truck
item
sofa_2_seater · sofa_3_seater · sectional_sofa · single_bed · queen_bed · king_bed · wardrobe_2_door · wardrobe_3_door · dining_table_glass_top · dining_table_wood · dining_chair_set · study_desk · office_chair · bookshelf · tv_unit · refrigerator_single_door · refrigerator_double_door · washing_machine_top_load · washing_machine_front_load · treadmill · elliptical · air_conditioner_split · mirror_large · marble_top_table · piano
add_ons flags
carpenter_reassembly · packing_blanket_wrap · appliance_uninstall · appliance_reinstall · crane_hoist
background_check_band
unverified · verified · verified_plus_aadhaar
All STRICT ENUM.
6. TTBS DIMENSIONS
TIME (weight 0.25)
- Pickup window ETA
- Duration estimate
- Slot availability tomorrow vs day-after
- TIME = window_band × duration_band
TASTE (weight 0.10)
- Crew politeness rating (recent 90d)
- App tracking UX
- TASTE = crew_rating × tracking_band
BUDGET (weight 0.30)
price_inrvs best- Floor surcharge transparency
- Add-on cost transparency
- BUDGET = 1 − (price − best) / best
SAFETY (weight 0.35 — dominant for fragile/valuable)
insurance_cover_inr≥ declared value- Fragile-corner padding for glass/marble
- Crew background check band
- Carpenter qualification for dismantle items
- Lift / stairs handling rule
- SAFETY = insurance_fit × padding_band × bg_band × carpenter_qualified × access_handling
HARD FILTERS
- Vehicle capacity ≥ sum of item dims.
- Carpenter included if any item has
needs_dismantle: true. - Fragile padding included if any item has
fragile_glass_or_marble: true. - Insurance ≥ declared cumulative value of items (or user override).
- Crew bg band ≥
verifiedif cumulative value > ₹50k.
7. COMPLETION CONTRACT
Success criteria
- Crew assigned + ETA shared.
- Pre-move photo at pickup floor.
- Items loaded; transit live-tracked.
- Items delivered to drop floor.
- Carpenter reassembles (if booked); appliance uninstall/reinstall (if booked).
- Post-move photo at drop floor.
- User confirms or files damage claim within 24h.
- CPC webhook fires.
CPC webhook
{
"event": "logistics.book_furniture_move.completed",
"intent_id": "logistics.book_furniture_move",
"request_id": "req_fm_5x8q_2026-05-14T12:00:00Z",
"order_id": "FM9K22P",
"provider": "Pikkol",
"vehicle": "mini_truck",
"crew_size": 3,
"price_inr": 3200,
"tomo_commission_base_inr": 480,
"tomo_commission_inr": 48,
"pass_through_inr": 2720,
"completion_photo_hash": "sha256-…",
"completed_at_iso": "2026-05-15T13:42:00+05:30",
"signature_hmac_sha256": "…"
}
Failure cases
pickup_no_show_user→ cancel fee per partner.crew_late→ automatic compensation per partner SLA.damage→ claim within 24h viafurn.dispute_damage.lift_inoperable_at_drop→ stair surcharge or partial completion + refund.
8. WIDGET
{
"widget": "FurnitureMoveWidget",
"header": {
"items_strip": "2 items · sofa + dining table (glass)",
"route_strip": "3rd floor (lift) → 5th floor (lift) · 13 km"
},
"regions": {
"region_1_intelligence": ["glass top — fragile padding on", "table dismantle — carpenter on", "both lifts available"],
"region_2_summary": "Pickup tomorrow 10 AM, ~2 hours job",
"region_3_visual": null,
"region_4_now_pin": "Book — 3 slots left tomorrow morning",
"region_5_tomo_choices": [
{"tier": "OK", "label": "Porter · ₹1,800 · basic packing", "reason": "cheapest"},
{"tier": "GOOD", "label": "Pikkol · ₹3,200 · carpenter + fragile padding + verified", "reason": "balanced"},
{"tier": "GREAT", "label": "Agarwal · ₹5,400 · 4 crew + uninstall + ₹75k cover", "reason": "highest safety"}
]
},
"footer_disclosures": [
"Damage claims must be filed within 24 hours of completion — photo at drop matters.",
"Glass/marble items always get corner padding — included by default for those rows.",
"If carpenter is booked, reassembly happens at the drop site."
]
}
9. CACHING POLICY
- Quote: 1 hour TTL.
- Crew rating + bg band: provider-fresh.
- Past furniture moves: 1 year on-device, encrypted.
- Pre/post-move photos: hash only at TOMO; full at partner.
10. ERROR CODES
| Code | Meaning | UI surface |
|---|---|---|
ERR_VEHICLE_TOO_SMALL |
item dims > vehicle | Upgrade vehicle |
ERR_CARPENTER_REQUIRED |
dismantle item but carpenter not booked | Auto-suggest add-on |
ERR_LIFT_CLEARANCE |
item won't fit in lift dims | Stair plan + surcharge |
ERR_INSURANCE_GAP |
cover < declared | Warn + upgrade |
ERR_BG_BAND_TOO_LOW |
bg < verified for high-value | Upgrade tier |
ERR_DAMAGE_CLAIM_LATE |
beyond 24h window | Apology + escalation |
ERR_SLOT_UNAVAILABLE |
no slots in window | Reschedule |
ERR_PICKUP_NO_SHOW_USER |
user not present | Cancel fee |
ERR_CREW_LATE |
crew SLA breached | Auto-comp |
ERR_PARTNER_OFFLINE |
partner API down | Try next |
11. SANDBOX → PRODUCTION CHECKLIST
- Sandbox vehicle-capacity check across all item ENUMs.
- Sandbox fragile padding auto-includes for glass/marble.
- Sandbox carpenter auto-suggest for dismantle items.
- Sandbox lift/stairs surcharge logic.
- Sandbox damage claim window 24h boundary.
- Production crew bg band sourced from partner — no inference.
- Production rate limit: 3 furniture moves/user/day.
- Production insurance contract attested by legal.
- Production multi-partner rotation tested for peak weekends.
- Production CPC HMAC-SHA256 5-min replay verified.
12. ANTI-FABRICATION RULES
- NO
paid_placementon partners. - NO synthetic crew photos.
- NO "fully insured" without
insurance_cover_inrexact. - NO concealing surcharge.
- NO bundling promo with move price.
- NO claiming carpenter included when partner doesn't supply.
- NO TOMO-issued "best move" claim.
- NO marketing language ("smart move").
- NO holding move data — partner is custodian.
- NO synthetic before/after photos — partner-supplied only.
13. REGULATORY FRAMING
- Carriage by Road Act 2007 + state RTO permits for goods carrier.
- Motor Vehicles Act 1988 — goods permit, fitness.
- Consumer Protection Act 2019 — partner is service provider.
- IRDAI — partner insurance.
- DPDPA 2023 — addresses, phone, photos = personal data; partner is processor.
- Building lift regulations vary by state — partner crew responsible for lift safety.
- TOMO is router only; does NOT operate vehicles or crew.