netgescon-day0/database/migrations/2025_08_07_200100_create_incassi_table.php

97 lines
5.0 KiB
PHP

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* MIGRATION: Incassi Condominiali
* Source: incassi da Gescon
* Registra tutti i pagamenti ricevuti dai condomini
*/
public function up(): void
{
Schema::create('incassi', function (Blueprint $table) {
$table->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');
}
};