id(); $table->string('tenant_id', 50); // Gestione contabile (dimension) $table->foreignId('gestione_id')->nullable()->constrained('gestioni_contabili'); // Riferimenti $table->foreignId('condominio_id')->constrained('condomini'); $table->foreignId('conto_bancario_id')->constrained('conti_bancari'); $table->foreignId('condomino_id')->nullable()->constrained('condomini'); // Dati originali Gescon $table->integer('id_incasso_gescon')->nullable()->comment('ID originale da incassi'); $table->string('cod_cond_gescon', 10)->nullable()->comment('Codice condominio Gescon'); $table->string('cond_inquil', 10)->nullable()->comment('Inquilino/Proprietario'); $table->string('n_riferimento', 20)->nullable()->comment('Numero riferimento pagamento'); $table->integer('anno_rif')->comment('Anno di riferimento'); $table->string('da_ricev_diretto', 5)->nullable()->comment('Flag ricevuta diretta'); $table->integer('n_ricevuta')->nullable()->comment('Numero ricevuta'); $table->integer('posiz_riga')->default(0)->comment('Posizione riga'); $table->string('anno_ricev', 10)->nullable()->comment('Anno ricevuta'); $table->string('n_mese', 10)->nullable()->comment('Numero mese'); $table->string('o_r_s', 5)->nullable()->comment('Tipo spesa: O=Ordinarie, R=Riscaldamento, S=Straordinarie'); // Importi $table->decimal('importo_pagato', 15, 4)->default(0)->comment('Importo pagato'); $table->decimal('importo_pagato_euro', 15, 4)->default(0)->comment('Importo in Euro'); $table->string('d_p_e', 5)->nullable()->comment('Flag Euro/Lire'); // Date $table->datetime('dt_empag')->nullable()->comment('Data pagamento Gescon'); $table->date('data_pagamento')->nullable()->comment('Data pagamento normalizzata'); $table->date('data_competenza')->nullable()->comment('Data competenza rate'); // Descrizioni e note $table->text('descrizione')->nullable()->comment('Descrizione pagamento'); $table->text('note')->nullable()->comment('Note aggiuntive'); // Riconciliazione bancaria $table->foreignId('movimento_bancario_id')->nullable()->constrained('movimenti_bancari'); $table->enum('stato_riconciliazione', ['automatica', 'manuale', 'sospesa', 'anomala'])->default('sospesa'); $table->decimal('scostamento_importo', 10, 4)->default(0)->comment('Differenza con movimento bancario'); $table->integer('giorni_scostamento')->default(0)->comment('Giorni differenza con movimento'); $table->decimal('confidenza_match', 5, 2)->default(0)->comment('% confidenza match automatico'); // Collegamento rate $table->json('rate_associate')->nullable()->comment('Rate collegate a questo incasso'); $table->enum('tipo_incasso', ['rata_ordinaria', 'rata_straordinaria', 'riscaldamento', 'altro'])->default('rata_ordinaria'); // Gestione cassa $table->string('cod_cassa_gescon', 10)->nullable()->comment('Codice cassa Gescon'); $table->integer('totale')->default(0)->comment('Campo totale Gescon'); $table->integer('str_orig')->default(0)->comment('Struttura origine'); // Provenienza e importazione $table->string('linea_sep_stp', 20)->nullable()->comment('Linea separazione'); $table->string('proviene_ors', 20)->nullable()->comment('Provenienza ORS'); $table->integer('proviene_n_stra')->default(0)->comment('Numero straordinaria'); $table->integer('proviene_eserc')->default(0)->comment('Esercizio provenienza'); // Metadati $table->json('metadati_gescon')->nullable()->comment('Dati originali completi'); $table->json('log_riconciliazione')->nullable()->comment('Log tentativi riconciliazione'); $table->timestamps(); // Indici $table->index(['tenant_id', 'gestione_id']); $table->index(['tenant_id', 'condominio_id']); $table->index(['tenant_id', 'data_pagamento']); $table->index(['tenant_id', 'anno_rif', 'n_mese']); $table->index(['tenant_id', 'stato_riconciliazione']); $table->index(['tenant_id', 'o_r_s']); $table->index(['cod_cond_gescon', 'anno_rif']); }); } public function down(): void { Schema::dropIfExists('incassi'); } };