97 lines
5.0 KiB
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');
|
|
}
|
|
};
|