id(); $table->unsignedBigInteger('tenant_id')->comment('테넌트 ID'); // 품목 정보 $table->string('item_code', 50)->comment('품목코드'); $table->string('item_name', 200)->comment('품목명'); $table->string('item_type', 30)->default('raw_material') ->comment('품목유형: raw_material, bent_part, purchased_part, sub_material, consumable'); $table->string('specification', 200)->nullable()->comment('규격'); $table->string('unit', 20)->default('EA')->comment('단위'); // 재고 수량 $table->decimal('stock_qty', 15, 3)->default(0)->comment('현재 재고량'); $table->decimal('safety_stock', 15, 3)->default(0)->comment('안전 재고'); $table->decimal('reserved_qty', 15, 3)->default(0)->comment('예약 수량'); $table->decimal('available_qty', 15, 3)->default(0)->comment('가용 재고량'); // LOT 정보 $table->unsignedInteger('lot_count')->default(0)->comment('LOT 개수'); $table->date('oldest_lot_date')->nullable()->comment('가장 오래된 LOT 입고일'); // 위치 및 상태 $table->string('location', 50)->nullable()->comment('재고 위치'); $table->string('status', 20)->default('normal') ->comment('상태: normal(정상), low(부족), out(없음)'); // 최근 입고/출고 정보 $table->date('last_receipt_date')->nullable()->comment('최근 입고일'); $table->date('last_issue_date')->nullable()->comment('최근 출고일'); // 감사 정보 $table->unsignedBigInteger('created_by')->nullable()->comment('생성자'); $table->unsignedBigInteger('updated_by')->nullable()->comment('수정자'); $table->timestamps(); $table->softDeletes(); $table->unsignedBigInteger('deleted_by')->nullable()->comment('삭제자'); // 인덱스 $table->index('tenant_id'); $table->index('item_code'); $table->index('item_type'); $table->index('status'); $table->unique(['tenant_id', 'item_code']); }); } /** * Reverse the migrations. */ public function down(): void { Schema::dropIfExists('stocks'); } };