/** * DispatchRule Entity * Mecanicas Diesel - ERP Suite * * Rules for automatic assignment suggestions. * Module: MMD-011 Dispatch Center */ import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, Index, } from 'typeorm'; export interface DispatchConditions { requiresSkills?: string[]; requiresAssetCategories?: string[]; minUnitCapacity?: 'light' | 'medium' | 'heavy'; maxDistanceKm?: number; zoneCodes?: string[]; minSkillLevel?: 'basic' | 'intermediate' | 'advanced' | 'expert'; excludeOnCall?: boolean; } @Entity({ name: 'dispatch_rules', schema: 'dispatch' }) @Index('idx_dispatch_rules_tenant', ['tenantId']) @Index('idx_dispatch_rules_priority', ['tenantId', 'priority']) export class DispatchRule { @PrimaryGeneratedColumn('uuid') id: string; @Column({ name: 'tenant_id', type: 'uuid' }) tenantId: string; @Column({ type: 'varchar', length: 100 }) name: string; @Column({ type: 'text', nullable: true }) description?: string; @Column({ type: 'integer', default: 0 }) priority: number; // Applicability @Column({ name: 'service_type_code', type: 'varchar', length: 50, nullable: true }) serviceTypeCode?: string; @Column({ name: 'incident_category', type: 'varchar', length: 50, nullable: true }) incidentCategory?: string; // Conditions @Column({ type: 'jsonb', default: {} }) conditions: DispatchConditions; // Action @Column({ name: 'auto_assign', type: 'boolean', default: false }) autoAssign: boolean; @Column({ name: 'assignment_weight', type: 'integer', default: 100 }) assignmentWeight: number; @Column({ name: 'is_active', type: 'boolean', default: true }) isActive: boolean; @CreateDateColumn({ name: 'created_at', type: 'timestamptz' }) createdAt: Date; @UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' }) updatedAt: Date; @Column({ name: 'created_by', type: 'uuid', nullable: true }) createdBy?: string; }