id(); $table->string('nome'); // es: "Commerciale", "Calpestabile", "Balconi", "Terrazzi", "Giardino" $table->string('codice')->unique(); // es: "COMM", "CALP", "BALC", "TERR", "GIAR" $table->text('descrizione')->nullable(); $table->boolean('obbligatoria')->default(false); // se deve essere sempre presente $table->boolean('per_millesimi')->default(true); // se usata per calcolo millesimi $table->string('unita_misura')->default('mq'); $table->decimal('moltiplicatore_default', 5, 3)->default(1.000); // coefficiente per calcoli $table->integer('ordine_visualizzazione')->default(100); $table->boolean('attiva')->default(true); $table->timestamps(); $table->index('attiva'); $table->index('ordine_visualizzazione'); }); // 2. Classificazioni tecniche configurabili Schema::create('classificazioni_tecniche', function (Blueprint $table) { $table->id(); $table->enum('tipo_classificazione', [ 'classe_energetica', 'stato_conservazione', 'tipo_riscaldamento', 'tipo_proprieta', 'categoria_catastale', 'destinazione_uso' ]); $table->string('valore'); // es: "A++", "Ottimo", "Autonomo" $table->string('codice')->nullable(); // per compatibilità sistemi esterni $table->text('descrizione')->nullable(); $table->decimal('coefficiente_calcolo', 5, 3)->nullable(); // per calcoli automatici $table->string('colore_badge')->nullable(); // per UI $table->integer('ordine')->default(100); $table->boolean('attiva')->default(true); $table->timestamps(); $table->unique(['tipo_classificazione', 'valore'], 'unique_tipo_valore'); $table->index(['tipo_classificazione', 'attiva']); }); // 3. Configurazioni globali sistema Schema::create('configurazioni_sistema', function (Blueprint $table) { $table->id(); $table->string('chiave')->unique(); // es: "millesimi_calcolo_automatico" $table->string('valore'); // valore configurazione $table->enum('tipo_valore', ['string', 'integer', 'decimal', 'boolean', 'json', 'date']); $table->string('categoria'); // es: "millesimi", "contatori", "fatturazione" $table->string('nome_visualizzato'); $table->text('descrizione')->nullable(); $table->boolean('modificabile_admin')->default(false); // se admin può modificare $table->boolean('modificabile_superadmin')->default(true); $table->timestamps(); $table->index('categoria'); }); // 4. Template configurazioni per stabili Schema::create('template_configurazioni', function (Blueprint $table) { $table->id(); $table->string('nome_template'); // es: "Condominio Standard", "Villette a Schiera" $table->text('descrizione')->nullable(); $table->json('configurazioni_default'); // configurazioni predefinite $table->json('tabelle_millesimali_default'); // tabelle millesimali da creare $table->json('tipi_superficie_incluse'); // tipi superficie da abilitare $table->boolean('attivo')->default(true); $table->timestamps(); }); } /** * Reverse the migrations. */ public function down(): void { Schema::dropIfExists('template_configurazioni'); Schema::dropIfExists('configurazioni_sistema'); Schema::dropIfExists('classificazioni_tecniche'); Schema::dropIfExists('tipi_superficie'); } };