id(); $table->foreignId('stabile_id')->constrained('stabili')->onDelete('cascade'); // Identificatori $table->string('codice_palazzina', 10); // A, B, C o 1, 2, 3 $table->string('denominazione')->nullable(); $table->text('descrizione')->nullable(); // Struttura fisica $table->integer('numero_scale')->default(1); $table->integer('numero_piani_fuori_terra')->default(3); // escluso piano terra $table->integer('numero_piani_interrati')->default(0); $table->boolean('ha_piano_terra')->default(true); $table->integer('appartamenti_per_piano')->default(2); // Caratteristiche fisiche $table->decimal('superficie_totale', 10, 2)->nullable(); $table->integer('anno_costruzione')->nullable(); $table->integer('anno_ultima_ristrutturazione')->nullable(); $table->enum('stato_conservazione', ['ottimo', 'buono', 'discreto', 'da_ristrutturare'])->default('buono'); // Dati catastali base (se specifici per palazzina) $table->string('sezione_urbana', 10)->nullable(); $table->string('foglio', 20)->nullable(); $table->string('particella', 20)->nullable(); // Impianti comuni alla palazzina $table->enum('tipo_riscaldamento', ['centralizzato', 'autonomo', 'misto', 'assente'])->default('centralizzato'); $table->boolean('ha_ascensore')->default(false); $table->integer('numero_ascensori')->default(0); $table->boolean('ha_montacarichi')->default(false); $table->boolean('ha_videocitofono')->default(false); $table->boolean('ha_impianto_allarme')->default(false); // Accessibilità $table->boolean('accessibile_disabili')->default(false); $table->text('note_accessibilita')->nullable(); // Parcheggi e spazi comuni $table->integer('posti_auto_coperti')->default(0); $table->integer('posti_auto_scoperti')->default(0); $table->boolean('ha_giardino_comune')->default(false); $table->decimal('mq_giardino_comune', 8, 2)->nullable(); $table->boolean('ha_terrazza_comune')->default(false); $table->decimal('mq_terrazza_comune', 8, 2)->nullable(); // Locali tecnici e di servizio $table->boolean('ha_locale_caldaia')->default(false); $table->boolean('ha_locale_contatori')->default(false); $table->boolean('ha_locale_bici')->default(false); $table->boolean('ha_lavanderia')->default(false); $table->text('altri_locali_comuni')->nullable(); // Note e gestione $table->text('note')->nullable(); $table->boolean('attiva')->default(true); // Audit trail $table->timestamps(); $table->foreignId('created_by')->nullable()->constrained('users'); $table->foreignId('updated_by')->nullable()->constrained('users'); // Indici per performance $table->index(['stabile_id', 'codice_palazzina']); $table->index('stabile_id'); $table->unique(['stabile_id', 'codice_palazzina']); // Codice palazzina unico per stabile }); } /** * Reverse the migrations. */ public function down(): void { Schema::dropIfExists('palazzine'); } };