Platform capabilities

Feature categories derived from the ArcaneWaste codebase. No speculative modules—only what exists in routes, models, and services.

Core platform

Multi-tenant companies

What is it?
Each company is a tenant with dashboard access, settings, documents, and SaaS subscription.
Why does it exist?
Operators run isolated businesses on shared infrastructure.
How does it work?
Company model + BelongsToCompany trait; JWT checkType:company middleware.

Unified V1 API

What is it?
All mobile/web clients consume /api/v1 endpoints.
Why does it exist?
Single contract for company, customer, driver, and admin flows.
How does it work?
routes/api.php with grouped middleware stacks.

Catalog & pricing

Asset specifications

What is it?
Rentable dumpster types linked to pricing profiles, taxes, waste types.
Why does it exist?
Orders price from spec + term + promotion—not legacy dumpster tables.
How does it work?
BillingService::calculateBilling requires asset_specification_id.

Payment terms

What is it?
Percentage or fixed upfront amounts snapshotted per order.
Why does it exist?
Companies define how much is due on approval vs later.
How does it work?
OrderPaymentTerm with upfront_amount (MoneyCast).

Promotions & taxes

What is it?
Scoped promotions and tax pivots on pricing profiles.
Why does it exist?
Accurate quotes at place and update time.
How does it work?
OrderPricingSnapshot freezes values at order time.

Orders & billing

Order lifecycle

What is it?
14+ statuses from pending through completed, rejected, or cancelled.
Why does it exist?
Mirrors real rental operations and payment states.
How does it work?
OrderService transitions + OrderStatusHistory.

Line-item charges

What is it?
Subtotal, tax, discount, grand total stored in cents; breakdown in line items.
Why does it exist?
Audit-friendly billing without denormalized charge columns on orders.
How does it work?
OrderLineItem + OrderPricingSnapshot.

Order change requests

What is it?
Customers request extension, early return, or reschedule.
Why does it exist?
Self-service date changes with company approval and billing preview.
How does it work?
OrderChangeRequestService; is_early_return on orders.

Fleet & locations

Assets & trucks

What is it?
Physical units with operational status, locations, QR codes.
Why does it exist?
Dispatch and approval need know what is assignable.
How does it work?
OperationalStatusEnum; Asset assignable when parked.

Lots & stations

What is it?
Yards and disposal/transfer/recycle stations with addresses.
Why does it exist?
Routing and compliance for driver workflows.
How does it work?
Lot, Station models with lastAddress relations.

Truck type ↔ asset style

What is it?
Compatibility mapping between truck types and asset styles.
Why does it exist?
Ensures assigned equipment can haul assigned assets.
How does it work?
truck_type_asset_style pivot; client-side dispatch filtering.

Jobs & dispatch

Driver jobs

What is it?
Delivery and pickup jobs linked to orders and drivers.
Why does it exist?
Field execution layer separate from order status.
How does it work?
DriverJobService unified list; DriverJobController.

Dispatch context

What is it?
Single API returns today's jobs plus eligible fleet for a date.
Why does it exist?
Company dispatch board without N+1 client calls.
How does it work?
DispatchService::buildContext with optional date param.

Driver assignment

What is it?
Assign, reassign, multi-reassign delivery/pickup drivers.
Why does it exist?
Operational flexibility when schedules shift.
How does it work?
CompanyOrderController; subscription middleware on mutating routes.

People & attendance

Customers & drivers

What is it?
Company-managed roster with activation, leave, attendance.
Why does it exist?
Workforce and customer base tied to tenant.
How does it work?
DriverAttendance, Leave models; dispatch excludes drivers on leave.

Policy violations

What is it?
Demerit points, disputes, company/customer messaging.
Why does it exist?
Enforce rental policies with audit trail.
How does it work?
CustomerPolicyViolation, PolicyViolationDispute.

Payments & wallet

Finix processing

What is it?
Customer order pay, bulk dues, company merchant onboarding.
Why does it exist?
Card payments without Stripe (removed from codebase).
How does it work?
FinixService + Customer/Company FinixController.

Wallet

What is it?
Stored balance with credit/debit via WalletService.
Why does it exist?
Partial payments and refunds without overdraft.
How does it work?
Money in cents; available = balance - locked_balance.

Company subscriptions

What is it?
SaaS plans for platform access via Finix.
Why does it exist?
Gate dashboard mutations when FINIX_SUBSCRIPTION_CHECK enabled.
How does it work?
Subscription morphTo company; check.company.subscription middleware.

Notifications & chat

FCM push

What is it?
Device tokens on User; FcmEvent listener.
Why does it exist?
Mobile alerts for orders, jobs, payments.
How does it work?
Shared\Notification\FcmEvent.

In-app chat

What is it?
Order-scoped chats between actors.
Why does it exist?
Support without external tools.
How does it work?
ChatController per actor; Pusher channels.

Admin

Admin API

What is it?
Platform CRUD for companies, customers, drivers, assets, orders.
Why does it exist?
Internal operations console backend.
How does it work?
/api/v1/admin with admin middleware.

See it in action

Follow a complete order flow from API request to database persistence.

How it works
Home Features How It Works Architecture Documentation Postman