add dispute functionality for contract duty and implement collection dates

This commit is contained in:
Marshal
2026-07-26 16:58:51 +00:00
parent 9b13fa2ac6
commit 5e10c97294
74 changed files with 3684 additions and 342 deletions

View File

@@ -2,6 +2,7 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Transform, Type } from 'class-transformer';
import {
IsArray,
IsIn,
IsInt,
IsNumber,
IsOptional,
@@ -91,6 +92,15 @@ export class CreateBookingRequestDto {
@Type(() => RequestBulkLineDto)
bulk?: RequestBulkLineDto;
@ApiPropertyOptional({
enum: ['ETB', 'USD'],
description:
'Billing currency for the shipment GL will book. Intercity is always ETB.',
})
@IsOptional()
@IsIn(['ETB', 'USD'])
paymentCurrency?: string;
@ApiPropertyOptional()
@IsOptional()
@IsString()

View File

@@ -15,6 +15,8 @@ import {
ValidateNested,
} from 'class-validator';
import { PAYMENT_CURRENCIES } from './create-contract.dto';
/** Per-shipment equipment return — "NA" stays contract-level only. */
const SHIPMENT_EQUIPMENT_RETURNS = ['WITH_RETURN', 'WITHOUT_RETURN'] as const;
@@ -150,6 +152,20 @@ export class CreateBookingUnderContractDto {
@IsUUID()
contractRouteId?: string;
/**
* The contract quotes in USD; the customer picks the billing currency here.
* Omitted → the contract's own currency (USD for contracts created under the
* current rule, the grandfathered currency for older ones). Intercity is
* forced to ETB by the service regardless of what is sent.
*/
@ApiPropertyOptional({
enum: PAYMENT_CURRENCIES,
description: 'Billing currency for this shipment. Intercity is always ETB.',
})
@IsOptional()
@IsIn([...PAYMENT_CURRENCIES])
paymentCurrency?: string;
@ApiPropertyOptional({
description:
'Binding shipment day. Omitted for intercity (DOMESTIC) bookings — staff assign a passing train later.',

View File

@@ -158,9 +158,20 @@ export class CreateContractDto {
@IsUUID()
serviceTypeId!: string;
@ApiProperty({ enum: PAYMENT_CURRENCIES })
/**
* Deprecated at the contract level. A contract now always quotes in USD; the
* customer picks the billing currency per booking (or on the shipment request
* when GL books on their behalf). Accepted but ignored on create so older
* clients don't break — the service forces USD.
*/
@ApiPropertyOptional({
enum: PAYMENT_CURRENCIES,
deprecated: true,
description: 'Ignored — contracts always quote in USD. Choose currency at booking.',
})
@IsOptional()
@IsIn([...PAYMENT_CURRENCIES])
paymentCurrency!: string;
paymentCurrency?: string;
@ApiPropertyOptional({ description: 'Whether EDR/GL handles customs clearance' })
@IsOptional()