Initial commit: Horux Backend API

- API REST para gestion de facturas electronicas mexicanas (CFDI)
- Laravel 9 con autenticacion OAuth 2.0 (Passport)
- Integracion con Syntage, Clerk y Facturama
- 30 modelos Eloquent, 39 controladores
- Documentacion completa en /docs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-18 07:44:29 +00:00
commit 61320b44d8
191 changed files with 22895 additions and 0 deletions

1
database/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.sqlite*

View File

@@ -0,0 +1,40 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
*/
class UserFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
return [
'name' => fake()->name(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
/**
* Indicate that the model's email address should be unverified.
*
* @return static
*/
public function unverified()
{
return $this->state(fn (array $attributes) => [
'email_verified_at' => null,
]);
}
}

View File

@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('roles');
}
};

View File

@@ -0,0 +1,41 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->foreignId('role_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->nullOnDelete();
$table->timestamp('email_verified_at')->nullable();
$table->string('password')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->primary();
$table->string('token');
$table->dateTime('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
};

View File

@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('oauth_auth_codes', function (Blueprint $table) {
$table->string('id', 100)->primary();
$table->unsignedBigInteger('user_id')->index();
$table->uuid('client_id');
$table->text('scopes')->nullable();
$table->boolean('revoked');
$table->dateTime('expires_at')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('oauth_auth_codes');
}
};

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('oauth_access_tokens', function (Blueprint $table) {
$table->string('id', 100)->primary();
$table->unsignedBigInteger('user_id')->nullable()->index();
$table->uuid('client_id');
$table->string('name')->nullable();
$table->text('scopes')->nullable();
$table->boolean('revoked');
$table->timestamps();
$table->dateTime('expires_at')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('oauth_access_tokens');
}
};

View File

@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('oauth_refresh_tokens', function (Blueprint $table) {
$table->string('id', 100)->primary();
$table->string('access_token_id', 100)->index();
$table->boolean('revoked');
$table->dateTime('expires_at')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('oauth_refresh_tokens');
}
};

View File

@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('oauth_clients', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->unsignedBigInteger('user_id')->nullable()->index();
$table->string('name');
$table->string('secret', 100)->nullable();
$table->string('provider')->nullable();
$table->text('redirect');
$table->boolean('personal_access_client');
$table->boolean('password_client');
$table->boolean('revoked');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('oauth_clients');
}
};

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('oauth_personal_access_clients', function (Blueprint $table) {
$table->bigIncrements('id');
$table->uuid('client_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('oauth_personal_access_clients');
}
};

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('linked_social_accounts', function (Blueprint $table) {
$table->id();
$table->string('provider_id');
$table->string('provider_name');
$table->foreignId('user_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->nullOnDelete();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('linked_social_accounts');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('rfcs', function (Blueprint $table) {
$table->id();
$table->string('rfc')->unique();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('rfcs');
}
};

View File

@@ -0,0 +1,41 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('rfc_user', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignId('rfc_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('rfc_user');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('invoice_types', function (Blueprint $table) {
$table->string('id')->primary()->unique();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('invoice_types');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('usages', function (Blueprint $table) {
$table->string('id')->primary()->unique();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('usages');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('payment_types', function (Blueprint $table) {
$table->string('id')->primary()->unique();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('payment_types');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('payment_methods', function (Blueprint $table) {
$table->string('id')->primary()->unique();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('payment_methods');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('currencies', function (Blueprint $table) {
$table->string('id')->primary()->unique();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('currencies');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('statuses', function (Blueprint $table) {
$table->id();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('statuses');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cancellation_types', function (Blueprint $table) {
$table->id();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cancellation_types');
}
};

View File

@@ -0,0 +1,47 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('taxpayers', function (Blueprint $table) {
$table->id();
$table->foreignId('rfc_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->string('name')->nullable();
$table->string('fiscal_address')->nullable();
$table->string('fiscal_address_status')->nullable();
$table->unsignedBigInteger('total_employees')->nullable();
$table->float('last_year_net_income', 16, 2)->nullable();
$table->float('last_year_total_income', 16, 2)->nullable();
$table->float('total_revenue_last_tax_return', 16, 2)->nullable();
$table->float('total_net_profit_last_tax_return', 16, 2)->nullable();
$table->unsignedBigInteger('last_tax_return_year')->nullable();
$table->float('total_sales_revenue_current_year', 16, 2)->nullable();
$table->dateTime('registration_date')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('taxpayers');
}
};

View File

@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('risks', function (Blueprint $table) {
$table->id();
$table->string('tax_compliance')->nullable();
$table->boolean('blacklist_status')->nullable();
$table->unsignedBigInteger('blacklisted_counterparts')->nullable();
$table->unsignedBigInteger('intercompany_transactions')->nullable();
$table->unsignedBigInteger('customer_concentration')->nullable();
$table->unsignedBigInteger('supplier_concentration')->nullable();
$table->unsignedBigInteger('foreign_exchange_risk')->nullable();
$table->float('cash_transaction_risk')->nullable();
$table->float('accounting_insolvency')->nullable();
$table->float('cancelled_issued_invoices')->nullable();
$table->float('cancelled_received_invoices')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('risks');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('economic_activities', function (Blueprint $table) {
$table->id();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('economic_activities');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tax_regimes', function (Blueprint $table) {
$table->id();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tax_regimes');
}
};

View File

@@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('economic_activity_taxpayer', function (Blueprint $table) {
$table->id();
$table->foreignId('taxpayer_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignId('economic_activity_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->integer('order')->nullable();
$table->float('percentage')->nullable();
$table->dateTime('started_at')->nullable();
$table->dateTime('ended_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('economic_activity_taxpayer');
}
};

View File

@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tax_regime_taxpayer', function (Blueprint $table) {
$table->id();
$table->foreignId('taxpayer_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignId('tax_regime_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->dateTime('started_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tax_regime_taxpayer');
}
};

View File

@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('risk_taxpayer', function (Blueprint $table) {
$table->id();
$table->foreignId('taxpayer_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignId('risk_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->boolean('risky');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('risk_taxpayer');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('industries', function (Blueprint $table) {
$table->id();
$table->string('name')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('industries');
}
};

View File

@@ -0,0 +1,96 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('invoices', function (Blueprint $table) {
$table->uuid('id')->primary()->unique();
$table->uuid('api_id')->unique();
$table->foreignId('rfc_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->float('version')->nullable();
$table->string('invoice_type_id')->nullable();
$table->string('usage_id')->nullable();
$table->string('payment_type_id')->nullable();
$table->string('payment_method_id')->nullable();
$table->integer('zip_code')->nullable();
$table->string('currency_id')->nullable();
$table->float('exchange_rate', 16, 4)->nullable();
$table->foreignId('status_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->string('pac');
$table->timestamp('issued_at')->nullable();
$table->timestamp('certified_at')->nullable();
$table->foreignId('cancellation_type_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->unsignedBigInteger('cancellation_status_id')->nullable();
$table->dateTime('cancelled_at')->nullable();
$table->float('discount', 16, 2)->nullable();
$table->float('tax', 16, 2)->nullable();
$table->float('subtotal', 16, 2)->nullable();
$table->float('total', 16, 2)->nullable();
$table->float('paid_amount', 16, 2)->nullable();
$table->float('due_amount', 16, 2)->nullable();
$table->dateTime('fully_paid_at')->nullable();
$table->dateTime('last_payment_date')->nullable();
$table->unsignedBigInteger('issuer_rfc_id')->nullable();
$table->string('issuer_name')->nullable();
$table->unsignedBigInteger('receiver_rfc_id')->nullable();
$table->string('receiver_name')->nullable();
$table->boolean('is_issuer')->nullable();
$table->boolean('is_receiver')->nullable();
$table->string('internal_id')->nullable();
$table->string('reference')->nullable();
$table->float('credited_amount', 16, 2)->nullable();
$table->float('subtotal_credited_amount', 16, 2)->nullable();
$table->float('applied_taxes', 16, 2)->nullable();
$table->float('total_transferred_taxes', 16, 2)->nullable();
$table->float('transferred_local_taxes', 16, 2)->nullable();
$table->float('transferred_vat', 16, 2)->nullable();
$table->float('transferred_sin_tax', 16, 2)->nullable();
$table->float('total_retained_taxes', 16, 2)->nullable();
$table->float('retained_local_taxes', 16, 2)->nullable();
$table->float('retained_vat', 16, 2)->nullable();
$table->float('retained_income_tax', 16, 2)->nullable();
$table->float('retained_sin_tax', 16, 2)->nullable();
$table->timestamps();
$table->foreign('invoice_type_id')->references('id')->on('invoice_types')->onUpdate('cascade')->onDelete('set null');
$table->foreign('usage_id')->references('id')->on('usages')->onUpdate('cascade')->onDelete('set null');
$table->foreign('payment_type_id')->references('id')->on('payment_types')->onUpdate('cascade')->onDelete('set null');
$table->foreign('payment_method_id')->references('id')->on('payment_methods')->onUpdate('cascade')->onDelete('set null');
$table->foreign('currency_id')->references('id')->on('currencies')->onUpdate('cascade')->onDelete('set null');
$table->foreign('cancellation_status_id')->references('id')->on('statuses')->onUpdate('cascade')->onDelete('set null');
$table->foreign('issuer_rfc_id')->references('id')->on('rfcs')->onUpdate('cascade')->onDelete('set null');
$table->foreign('receiver_rfc_id')->references('id')->on('rfcs')->onUpdate('cascade')->onDelete('set null');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('invoices');
}
};

View File

@@ -0,0 +1,52 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('invoice_payments', function (Blueprint $table) {
$table->uuid('id')->primary()->unique();
$table->dateTime('date')->nullable();
$table->foreignId('rfc_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignUuid('invoice_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->string('payment_method_id')->nullable();
$table->string('currency_id')->nullable();
$table->float('exchange_rate')->nullable();
$table->integer('installment')->nullable();
$table->float('previous_balance', 16, 2)->nullable();
$table->float('amount', 16, 2)->nullable();
$table->float('outstanding_balance', 16, 2)->nullable();
$table->dateTime('cancelled_at')->nullable();
$table->timestamps();
$table->foreign('payment_method_id')->references('id')->on('payment_methods')->onUpdate('cascade')->onDelete('set null');
$table->foreign('currency_id')->references('id')->on('currencies')->onUpdate('cascade')->onDelete('set null');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('invoice_payments');
}
};

View File

@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('industry_taxpayer', function (Blueprint $table) {
$table->id();
$table->foreignId('taxpayer_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignId('industry_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->float('gross_margin')->nullable();
$table->float('net_margin')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('industry_taxpayer');
}
};

View File

@@ -0,0 +1,70 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('invoice_lines', function (Blueprint $table) {
$table->uuid('id')->primary()->unique();
$table->foreignId('rfc_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignUuid('invoice_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->string('invoice_type_id')->nullable();
$table->string('payment_type_id')->nullable();
$table->foreignId('status_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->unsignedBigInteger('issuer_rfc_id')->nullable();
$table->string('issuer_name')->nullable();
$table->unsignedBigInteger('receiver_rfc_id')->nullable();
$table->string('receiver_name')->nullable();
$table->dateTime('issued_at')->nullable();
$table->string('identification_number')->nullable();
$table->string('product_identification')->nullable();
$table->longText('description')->nullable();
$table->float('unit_amount', 16, 2)->nullable();
$table->string('unit_code')->nullable();
$table->unsignedBigInteger('quantity')->nullable();
$table->float('discount_amount', 16, 2)->nullable();
$table->float('total_amount', 16, 2)->nullable();
$table->float('retained_vat', 16, 2)->nullable();
$table->float('retained_income_tax', 16, 2)->nullable();
$table->float('retained_sin_tax', 16, 2)->nullable();
$table->float('transferred_vat', 16, 2)->nullable();
$table->float('transferred_sin_tax', 16, 2)->nullable();
$table->timestamps();
$table->foreign('invoice_type_id')->references('id')->on('invoice_types')->onUpdate('cascade')->onDelete('set null');
$table->foreign('payment_type_id')->references('id')->on('payment_types')->onUpdate('cascade')->onDelete('set null');
$table->foreign('issuer_rfc_id')->references('id')->on('rfcs')->onUpdate('cascade')->onDelete('set null');
$table->foreign('receiver_rfc_id')->references('id')->on('rfcs')->onUpdate('cascade')->onDelete('set null');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('invoice_lines');
}
};

View File

@@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('manager_o_t_p_s', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignId('rfc_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->unsignedBigInteger('manager_id')->nullable();
$table->string('otp')->nullable();
$table->boolean('status')->nullable();
$table->timestamps();
$table->foreign('manager_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('manager_o_t_p_s');
}
};

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('invoice_requests', function (Blueprint $table) {
$table->id();
$table->foreignId('rfc_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->string('type');
$table->timestamp('requested_at');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('invoice_requests');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('dimensions', function (Blueprint $table) {
$table->id();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('dimensions');
}
};

View File

@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sales_revenues', function (Blueprint $table) {
$table->id();
$table->foreignId('taxpayer_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->dateTime('start_date')->nullable();
$table->foreignId('dimension_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->float('amount')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('sales_revenues');
}
};

View File

@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('expenditures', function (Blueprint $table) {
$table->id();
$table->foreignId('taxpayer_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->dateTime('start_date')->nullable();
$table->foreignId('dimension_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->float('amount')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('expenditures');
}
};

View File

@@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('conciliations', function (Blueprint $table) {
$table->id();
$table->foreignUuid('invoice_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->foreignId('rfc_id')
->nullable()
->constrained()
->cascadeOnUpdate()
->cascadeOnDelete();
$table->string('payment_description')->nullable();
$table->dateTime('payment_at')->nullable();
$table->boolean('is_conciliated')->nullable();
$table->dateTime('conciliated_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('conciliations');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('prod_serv_codes', function (Blueprint $table) {
$table->string('id')->primary()->unique();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('prod_serv_codes');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('unit_codes', function (Blueprint $table) {
$table->string('id')->primary()->unique();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('unit_codes');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('postal_codes', function (Blueprint $table) {
$table->string('id')->primary()->unique();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('postal_codes');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('taxes', function (Blueprint $table) {
$table->string('id')->primary()->unique();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('taxes');
}
};

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tax_rates', function (Blueprint $table) {
$table->id();
$table->string('tax_id')->nullable();
$table->float('rate', 16, 4)->nullable();
$table->timestamps();
$table->foreign('tax_id')->references('id')->on('taxes')->onUpdate('cascade')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tax_rates');
}
};

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// \App\Models\User::factory(10)->create();
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
}
}