Files
lcbp3/frontend/types/transmittal.ts
admin c8a0f281ef
Some checks failed
Spec Validation / validate-markdown (push) Has been cancelled
Spec Validation / validate-diagrams (push) Has been cancelled
Spec Validation / check-todos (push) Has been cancelled
251210:1709 Frontend: reeactor organization and run build
2025-12-10 17:09:11 +07:00

91 lines
1.8 KiB
TypeScript

// File: types/transmittal.ts
// TypeScript interfaces for Transmittal module - aligned with backend entities
/**
* Transmittal purpose enum
*/
export type TransmittalPurpose = 'FOR_APPROVAL' | 'FOR_INFORMATION' | 'FOR_REVIEW' | 'OTHER';
/**
* Item type in a transmittal
*/
export type TransmittalItemType = 'DRAWING' | 'RFA' | 'CORRESPONDENCE';
/**
* Transmittal item - document included in a transmittal
*/
export interface TransmittalItem {
transmittalId: number;
itemType: TransmittalItemType;
itemId: number;
description?: string;
// Joined data for display
documentNumber?: string;
documentTitle?: string;
}
/**
* Main Transmittal entity
*/
export interface Transmittal {
id: number;
correspondenceId: number;
transmittalNo: string;
subject: string;
purpose?: TransmittalPurpose;
remarks?: string;
createdAt: string;
// Joined relations from API
items?: TransmittalItem[];
correspondence?: {
id: number;
correspondence_number: string;
project_id: number;
};
}
/**
* Paginated response for transmittal list
*/
export interface TransmittalListResponse {
data: Transmittal[];
meta: {
total: number;
page: number;
limit: number;
totalPages: number;
};
}
/**
* Item DTO for creating transmittal
*/
export interface CreateTransmittalItemDto {
itemType: TransmittalItemType;
itemId: number;
description?: string;
}
/**
* DTO for creating a transmittal
*/
export interface CreateTransmittalDto {
projectId?: number;
recipientOrganizationId?: number;
correspondenceId: number;
subject: string;
purpose?: TransmittalPurpose;
remarks?: string;
items: CreateTransmittalItemDto[];
}
/**
* DTO for search/filter params
*/
export interface SearchTransmittalDto {
page?: number;
limit?: number;
projectId?: number;
search?: string;
}