package constants // Miler Availability Statuses const ( MilerOffline = "Offline" MilerAvailable = "Available" MilerAssigned = "Assigned" MilerOnPickup = "On_Pickup" MilerAtCustomer = "At_Customer" MilerPickedUp = "Picked_Up" MilerOnDelivery = "On_Delivery" MilerBreak = "Break" MilerBlocked = "Blocked" ) // Booking sources — where a booking originated. Left as their stored literals: // "CRM_Console" predates the outward express rename and is an existing DB value. const ( BookingSourceCustomerApp = "Customer_App" BookingSourceExpress = "CRM_Console" ) // App (B2C) Customer Statuses const ( CustomerStatusActive = "Active" CustomerStatusBlocked = "Blocked" CustomerStatusDeleted = "Deleted" ) // Booking Statuses const ( BookingPendingPickup = "Pending_Pickup" // customer requested pickup, delivery details not yet known BookingCreated = "Created" BookingMilerAssigned = "Miler_Assigned" BookingPickupScheduled = "Pickup_Scheduled" BookingArrivedAtPickup = "Arrived_At_Pickup" // miler is at the pickup point, parcel not yet collected BookingPickedUp = "Picked_Up" BookingConvertedConsignment = "Converted_To_Consignment" BookingCancelled = "Cancelled" ) // Consignment Statuses const ( ConsignmentCreated = "Created" ConsignmentInwardedAtHub = "Inwarded_at_Hub" // ConsignmentCollectedByMiler is the intermediate state for a hyperlocal // parcel: the miler has collected it but has NOT yet started the final-mile // run. It sits between pickup and Out_for_Delivery so the console can tell // "collected, waiting to leave" apart from "actively delivering" — before // this existed a hyperlocal pickup jumped straight to Out_for_Delivery and // looked active the instant it was collected. StartDelivery moves it on. ConsignmentCollectedByMiler = "Collected_By_Miler" ConsignmentTripsheetLoaded = "Tripsheet_Loaded" ConsignmentInTransit = "In_Transit" ConsignmentOutForDelivery = "Out_for_Delivery" ConsignmentDelivered = "Delivered" ConsignmentRTOInitiated = "RTO_Initiated" ConsignmentReturnedToSender = "Returned_to_Sender" ConsignmentMissing = "Missing" ConsignmentDamaged = "Damaged" ) // Machine-readable error codes returned to the miler app in the "code" field of // 4xx responses, so the client can branch on a stable identifier instead of // parsing human-readable messages. Add here, never inline. const ( ErrInvalidInput = "INVALID_INPUT" ErrBookingNotFound = "BOOKING_NOT_FOUND" ErrBookingNotAssigned = "BOOKING_NOT_ASSIGNED" ErrConsignmentNotFound = "CONSIGNMENT_NOT_FOUND" ErrConsignmentNotAssigned = "CONSIGNMENT_NOT_ASSIGNED" ErrInvalidState = "INVALID_STATE" // action not allowed from the entity's current status ErrAlreadyPickedUp = "ALREADY_PICKED_UP" // pre-pickup action attempted after pickup ErrOtpRequired = "OTP_REQUIRED" ErrOtpInvalid = "OTP_INVALID" ErrIdempotencyInProgress = "IDEMPOTENCY_IN_PROGRESS" // an identical keyed request is still running ErrEmailInUse = "EMAIL_IN_USE" ErrHubNotFound = "HUB_NOT_FOUND" // hub_id on a handover does not resolve to an active base ErrHubRequired = "HUB_REQUIRED" // handover attempted with no base to hand over to ) // Pickup source types — what kind of place a booking is collected FROM. Sent // on every miler booking row as pickup_source_type so the rider app can title a // stop correctly instead of guessing from the source name, the pincode or the // rider's own base. "customer" is a real value, never an omission: a front-door // pickup has no configured location id, and "no location because it is a front // door" must be distinguishable from "no location because nobody filled it in". // // The rider app renders "hub" as Base — the wire value stays hub. const ( PickupSourceHub = "hub" PickupSourceCustomer = "customer" PickupSourceMerchant = "merchant" PickupSourceStore = "store" ) // Next actions — what the rider does next with a parcel. Returned by // pickup-complete and, so a poll or a cold restart can rebuild the leg without // a local cache, on every GET /miler/bookings row. Consignment status alone // cannot carry this: a hub-routed parcel and a freshly-collected hyperlocal one // can both sit on Created. const ( NextActionPickup = "pickup" // not collected yet — the stop is the pickup NextActionStartDelivery = "start_delivery" // collected, hyperlocal, not yet out for delivery NextActionDeliver = "deliver" // carry it to the receiver NextActionInwardAtHub = "inward_at_hub" // carry it to a base and hand it over NextActionHandedToHub = "handed_to_hub" // already inwarded at the base — nothing left for this rider NextActionNone = "none" // terminal (delivered, cancelled, returned) ) // Payment Modes const ( PaymentModeCash = "Cash" PaymentModeUPI = "UPI" PaymentModeCard = "Card" PaymentModeWallet = "Wallet" ) // Payment Statuses const ( PaymentStatusPending = "Pending" PaymentStatusPaid = "Paid" PaymentStatusFailed = "Failed" PaymentStatusRefunded = "Refunded" ) // Assignment Statuses const ( AssignmentAssigned = "Assigned" AssignmentAccepted = "Accepted" AssignmentRejected = "Rejected" AssignmentReassigned = "Reassigned" AssignmentCompleted = "Completed" AssignmentCancelled = "Cancelled" ) // Tripsheet Statuses const ( TripsheetDraft = "Draft" TripsheetReady = "Ready" TripsheetDispatched = "Dispatched" TripsheetArrived = "Arrived" TripsheetCancelled = "Cancelled" ) // Scan Statuses const ( ScanPending = "Pending" ScanLoaded = "Loaded" ScanUnloaded = "Unloaded" ScanDiscrepancy = "Discrepancy" ) // Exception Types const ( ExceptionLost = "Lost" ExceptionDamaged = "Damaged" ExceptionMisrouted = "Misrouted" ExceptionReceiverRefused = "Receiver_Refused" ExceptionMissingContents = "Missing_Contents" ExceptionUndeliverable = "Undeliverable" ) // Exception Statuses const ( ExceptionOpen = "Open" ExceptionUnderInvestigation = "Under_Investigation" ExceptionResolved = "Resolved" ExceptionClosed = "Closed" )