Files
doormile_backend/constants/constants.go

171 lines
6.2 KiB
Go

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"
)