erp-mecanicas-diesel-backen.../src/modules/vehicle-management/entities/vehicle-engine.entity.ts
rckrdmrd 8ed7d24e96 Migración desde erp-mecanicas-diesel/backend - Estándar multi-repo v2
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 08:11:24 -06:00

108 lines
2.9 KiB
TypeScript

/**
* Vehicle Engine Entity
* Mecánicas Diesel - ERP Suite
*
* Represents engine specifications for a vehicle.
*/
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
OneToOne,
ManyToOne,
JoinColumn,
Index,
} from 'typeorm';
import { Vehicle } from './vehicle.entity';
import { EngineCatalog } from './engine-catalog.entity';
export enum TurboType {
VGT = 'VGT',
WASTEGATE = 'wastegate',
TWIN = 'twin',
COMPOUND = 'compound',
}
@Entity({ name: 'vehicle_engines', schema: 'vehicle_management' })
@Index('idx_vehicle_engines_vehicle', ['vehicleId'])
@Index('idx_vehicle_engines_serial', ['serialNumber'])
@Index('idx_vehicle_engines_catalog', ['engineCatalogId'])
export class VehicleEngine {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ name: 'vehicle_id', type: 'uuid' })
vehicleId: string;
@Column({ name: 'engine_catalog_id', type: 'uuid', nullable: true })
engineCatalogId?: string;
@Column({ name: 'serial_number', type: 'varchar', length: 50, nullable: true })
serialNumber?: string;
// Performance specs
@Column({ type: 'integer', nullable: true })
horsepower?: number;
@Column({ type: 'integer', nullable: true })
torque?: number;
// ECM
@Column({ name: 'ecm_model', type: 'varchar', length: 50, nullable: true })
ecmModel?: string;
@Column({ name: 'ecm_software', type: 'varchar', length: 50, nullable: true })
ecmSoftware?: string;
// Injection system
@Column({ name: 'injection_system', type: 'varchar', length: 50, nullable: true })
injectionSystem?: string;
@Column({ name: 'rail_pressure_max', type: 'decimal', precision: 10, scale: 2, nullable: true })
railPressureMax?: number;
@Column({ name: 'injector_count', type: 'integer', nullable: true })
injectorCount?: number;
// Turbo
@Column({ name: 'turbo_type', type: 'varchar', length: 50, nullable: true })
turboType?: TurboType;
@Column({ name: 'turbo_make', type: 'varchar', length: 50, nullable: true })
turboMake?: string;
@Column({ name: 'turbo_model', type: 'varchar', length: 50, nullable: true })
turboModel?: string;
// Dates
@Column({ name: 'manufacture_date', type: 'date', nullable: true })
manufactureDate?: Date;
@Column({ name: 'rebuild_date', type: 'date', nullable: true })
rebuildDate?: Date;
@Column({ name: 'rebuild_odometer', type: 'integer', nullable: true })
rebuildOdometer?: number;
@Column({ type: 'text', nullable: true })
notes?: string;
@CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
createdAt: Date;
@UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' })
updatedAt: Date;
// Relations
@OneToOne(() => Vehicle, vehicle => vehicle.engine, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'vehicle_id' })
vehicle: Vehicle;
@ManyToOne(() => EngineCatalog, { nullable: true })
@JoinColumn({ name: 'engine_catalog_id' })
engineCatalog?: EngineCatalog;
}