mirror of
https://github.com/Sea-Haven-Industries/proposal-system.git
synced 2026-09-30 21:43:14 +00:00
Phase 0 of proposal-system: complete project setup including: - CDK infrastructure (3 stacks: foundation, compute, frontend) - .NET 8 solution with Clean Architecture (Domain, Application, Infrastructure, Api) - EF Core data model (PostgreSQL) with all entities - Python Lambda placeholders (pdf-extract, pdf-generate, library-ingest) - React 19 web frontend scaffold (Vite + MUI) - React Native mobile placeholder - Shared TypeScript API contracts - GitHub Actions CI/CD (ci.yaml + deploy.yaml) - OIDC deploy role (githubdeploy-proposal-system) - Dependabot configuration - Cognito User Pool with Google OAuth, PKCE clients, groups
61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
export type ProposalStatus = 'Draft' | 'InReview' | 'Approved' | 'Sent' | 'Revised';
|
|
export type ServiceCategory = 'HVAC' | 'Plumbing' | 'Electrical' | 'General' | 'Renovation';
|
|
export type Priority = 'Standard' | 'Urgent' | 'Emergency';
|
|
export type LineItemSource = 'AI' | 'Vendor' | 'Manual' | 'Historical';
|
|
export type PricingMode = 'UnitPrice' | 'TotalPrice' | 'Both';
|
|
export type UserRole = 'Dispatcher' | 'Admin' | 'SysAdmin';
|
|
|
|
export interface Proposal {
|
|
id: string;
|
|
proposalNumber: string;
|
|
workOrderNumber: string;
|
|
customerName: string;
|
|
customerAddress: string;
|
|
scopeOfWork: string;
|
|
refinedScope: string | null;
|
|
serviceCategory: ServiceCategory;
|
|
priority: Priority;
|
|
status: ProposalStatus;
|
|
totalBidAmount: number;
|
|
vendorTotalCost: number | null;
|
|
notes: string;
|
|
submittedById: string;
|
|
submittedAt: string;
|
|
assignedAdminId: string | null;
|
|
approvedById: string | null;
|
|
approvedAt: string | null;
|
|
sentAt: string | null;
|
|
currentRevision: number;
|
|
parentProposalId: string | null;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
}
|
|
|
|
export interface LineItem {
|
|
id: string;
|
|
proposalId: string;
|
|
description: string;
|
|
quantity: number;
|
|
unit: string;
|
|
unitPrice: number | null;
|
|
totalPrice: number;
|
|
pricingMode: PricingMode;
|
|
sortOrder: number;
|
|
source: LineItemSource;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
}
|
|
|
|
export interface CreateProposalRequest {
|
|
workOrderNumber: string;
|
|
customerName: string;
|
|
customerAddress: string;
|
|
scopeOfWork: string;
|
|
serviceCategory: ServiceCategory;
|
|
priority: Priority;
|
|
notes?: string;
|
|
}
|
|
|
|
export interface UpdateLineItemsRequest {
|
|
lineItems: Omit<LineItem, 'id' | 'proposalId' | 'createdAt' | 'updatedAt'>[];
|
|
}
|