docs: clarify container returns are last-mile only (not first-mile)

Update labels and comments to reflect that container returns are for
last-mile trucks only: either EDR last-mile or customer self-haul. Same
truck that delivered will return with empty containers. Changed labels
from "EDR Returns" → "EDR Last Mile" and "Customer Returns" →
"Customer Self-Haul".

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Hagernesh
2026-07-30 14:17:12 +00:00
parent 319ebb42ec
commit 63aa2c7920
2 changed files with 25 additions and 14 deletions

View File

@@ -162,25 +162,36 @@ describe('applyWagonOrderReversal', () => {
expect(applyWagonOrderReversal(plan, null)).toBe(plan);
});
it('flips the order and renumbers sequenceNo 1..N when the flag is true', () => {
it('flips the position numbers when the flag is true', () => {
const reversed = applyWagonOrderReversal(plan, true);
// Physically-last wagon (was seq 3, wt-c) is now position 1.
expect(reversed.map((s) => s.wagonTypeId)).toEqual(['wt-c', 'wt-b', 'wt-a']);
expect(reversed.map((s) => s.sequenceNo)).toEqual([1, 2, 3]);
// Physically-last wagon (wt-c) is now position 1.
expect(reversed.map((s) => s.sequenceNo)).toEqual([3, 2, 1]);
});
it('keeps each booking with its own wagon — only the position changes', () => {
const reversed = applyWagonOrderReversal(plan, true);
// The booking that was in the last wagon now sits at sequenceNo 1.
expect(reversed[0].sequenceNo).toBe(1);
const atPosition1 = reversed.find((s) => s.sequenceNo === 1);
expect(
(reversed[0].allocations as { bookingId: string }[])[0].bookingId,
(atPosition1?.allocations as { bookingId: string }[])[0].bookingId,
).toBe('BKG-C');
const atPosition3 = reversed.find((s) => s.sequenceNo === 3);
expect(
(reversed[2].allocations as { bookingId: string }[])[0].bookingId,
(atPosition3?.allocations as { bookingId: string }[])[0].bookingId,
).toBe('BKG-A');
});
// The regression that emptied every reversed train's container items: the
// placement generators pair unit k (booking order) with slot k of this array,
// and persistAllocationsAndLoads matches that sequenceNo against the
// allocation's booking. Array order must stay packing order.
it('keeps array order aligned with booking order so placements still match', () => {
const reversed = applyWagonOrderReversal(plan, true);
expect(
reversed.map((s) => (s.allocations as { bookingId: string }[])[0].bookingId),
).toEqual(['BKG-A', 'BKG-B', 'BKG-C']);
});
it('does not mutate the input plan', () => {
applyWagonOrderReversal(plan, true);
expect(plan.map((s) => s.sequenceNo)).toEqual([1, 2, 3]);

View File

@@ -76,7 +76,7 @@ export default function ContainerReturnsPage() {
for (const item of unloadedQueue) {
if (!item.bookingId) continue;
// EDR returns
// EDR last-mile returns: same EDR truck that delivered will return with empty containers
const edrTrucks = await warehouseService.getLastMileTrucks(item.bookingId).catch(() => []);
if (edrTrucks.length > 0) {
const inventory = await api.warehouses.listInventory
@@ -112,7 +112,7 @@ export default function ContainerReturnsPage() {
}
}
// Customer returns
// Customer self-haul last-mile returns: same customer truck that delivered will return with empty containers
const customerTrucks = await warehouseService.getCustomerTrucks(item.bookingId).catch(() => []);
if (customerTrucks.length > 0) {
const inventory = await api.warehouses.listInventory
@@ -229,7 +229,7 @@ export default function ContainerReturnsPage() {
<PageContainer>
<PageHeader
title="Container Returns"
subtitle="Track empty container returns by EDR or customer"
subtitle="Empty containers returned by last-mile trucks (EDR or customer self-haul)"
/>
<Group mb="lg">
@@ -238,8 +238,8 @@ export default function ContainerReturnsPage() {
onChange={(val) => setFilterType(val as ReturnType)}
data={[
{ label: "All", value: "all" },
{ label: "EDR Returns", value: "edr" },
{ label: "Customer Returns", value: "customer" },
{ label: "EDR Last Mile", value: "edr" },
{ label: "Customer Self-Haul", value: "customer" },
]}
/>
</Group>
@@ -282,7 +282,7 @@ export default function ContainerReturnsPage() {
<Table.Td>{group.companyName ?? "—"}</Table.Td>
<Table.Td>
<Badge color={group.returnType === "EDR" ? "edr-green" : "blue"}>
{group.returnType}
{group.returnType === "EDR" ? "EDR Last Mile" : "Customer Self-Haul"}
</Badge>
</Table.Td>
<Table.Td>
@@ -416,7 +416,7 @@ function ContainerReturnModal({ opened, onClose, group, onSubmit, loading }: Con
<Group>
<Text fw={600}>{group.bookingRef}</Text>
<Badge color={group.returnType === "EDR" ? "edr-green" : "blue"}>
{group.returnType}
{group.returnType === "EDR" ? "EDR Last Mile" : "Customer Self-Haul"}
</Badge>
</Group>