- Add carta-porte controller with CRUD operations - Add DTOs: create, update, cancelar, timbrar - Add DTOs: autotransporte, mercancia, ubicacion, figura-transporte - Add common utilities folder - Add ordenes-transporte service tests - Update index exports Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
168 lines
3.1 KiB
TypeScript
168 lines
3.1 KiB
TypeScript
import {
|
|
IsString,
|
|
IsNotEmpty,
|
|
IsEnum,
|
|
IsOptional,
|
|
IsArray,
|
|
ValidateNested,
|
|
Length,
|
|
Matches,
|
|
} from 'class-validator';
|
|
import { Type } from 'class-transformer';
|
|
import { TipoFiguraTransporte } from '../entities';
|
|
|
|
/**
|
|
* DTO para partes de transporte (propietario/arrendador)
|
|
*/
|
|
export class PartesTransporteDto {
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
parteTransporte!: string;
|
|
}
|
|
|
|
/**
|
|
* DTO para domicilio de figura de transporte
|
|
*/
|
|
export class DomicilioFiguraDto {
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(2, 3)
|
|
pais?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(2, 3)
|
|
estado?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(5, 5)
|
|
codigoPostal?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 100)
|
|
calle?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 55)
|
|
numExterior?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 30)
|
|
numInterior?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 100)
|
|
colonia?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 100)
|
|
municipio?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 250)
|
|
referencia?: string;
|
|
}
|
|
|
|
/**
|
|
* DTO para agregar figura de transporte a Carta Porte
|
|
* Tipos: Operador (01), Propietario (02), Arrendador (03), Notificado (04)
|
|
*/
|
|
export class CreateFiguraTransporteDto {
|
|
/**
|
|
* Tipo de figura de transporte (catalogo c_TipoFiguraTransporte)
|
|
* 01 = Operador
|
|
* 02 = Propietario
|
|
* 03 = Arrendador
|
|
* 04 = Notificado
|
|
*/
|
|
@IsEnum(TipoFiguraTransporte, { message: 'tipoFigura debe ser 01, 02, 03 o 04' })
|
|
@IsNotEmpty()
|
|
tipoFigura!: TipoFiguraTransporte;
|
|
|
|
/**
|
|
* RFC de la figura (opcional para operadores extranjeros)
|
|
*/
|
|
@IsOptional()
|
|
@IsString()
|
|
@Matches(/^([A-Z&Ñ]{3,4}[0-9]{6}[A-Z0-9]{3}|XEXX010101000)$/, {
|
|
message: 'rfcFigura debe ser un RFC valido o extranjero generico',
|
|
})
|
|
rfcFigura?: string;
|
|
|
|
/**
|
|
* Nombre de la figura de transporte
|
|
*/
|
|
@IsString()
|
|
@IsNotEmpty({ message: 'nombreFigura es requerido' })
|
|
@Length(1, 254)
|
|
nombreFigura!: string;
|
|
|
|
/**
|
|
* Numero de licencia (requerido para operadores tipo 01)
|
|
*/
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 16)
|
|
numLicencia?: string;
|
|
|
|
/**
|
|
* Numero de registro tributario (para extranjeros)
|
|
*/
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 40)
|
|
numRegIdTribFigura?: string;
|
|
|
|
/**
|
|
* Residencia fiscal (ISO 3166-1 alpha-3, para extranjeros)
|
|
*/
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(3, 3)
|
|
residenciaFiscalFigura?: string;
|
|
|
|
/**
|
|
* Partes de transporte (para propietario/arrendador)
|
|
*/
|
|
@IsOptional()
|
|
@IsArray()
|
|
@ValidateNested({ each: true })
|
|
@Type(() => PartesTransporteDto)
|
|
partesTransporte?: PartesTransporteDto[];
|
|
|
|
/**
|
|
* Domicilio de la figura
|
|
*/
|
|
@IsOptional()
|
|
@ValidateNested()
|
|
@Type(() => DomicilioFiguraDto)
|
|
domicilio?: DomicilioFiguraDto;
|
|
}
|
|
|
|
/**
|
|
* DTO para actualizar figura de transporte
|
|
*/
|
|
export class UpdateFiguraTransporteDto {
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 254)
|
|
nombreFigura?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(1, 16)
|
|
numLicencia?: string;
|
|
|
|
@IsOptional()
|
|
@ValidateNested()
|
|
@Type(() => DomicilioFiguraDto)
|
|
domicilio?: DomicilioFiguraDto;
|
|
}
|