- 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>
10 KiB
Modelos y Base de Datos - Horux Backend
Documentacion de los modelos Eloquent y estructura de la base de datos.
Diagrama de Relaciones
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ User │◄─────►│ Rfc │◄─────►│ Invoice │
└─────────────┘ M:N └─────────────┘ 1:N └─────────────┘
│ │ │
│ 1:N │ 1:N │ 1:N
▼ ▼ ▼
┌─────────────────┐ ┌─────────────┐ ┌─────────────┐
│LinkedSocialAcct │ │ Taxpayer │ │ InvoiceLine │
└─────────────────┘ └─────────────┘ └─────────────┘
│
│ M:N
▼
┌─────────────┐ ┌─────────────────┐
│ TaxRegime │ │ InvoicePayment │
└─────────────┘ └─────────────────┘
Modelos Principales
User
Usuario del sistema.
Tabla: users
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| name | string | Nombre del usuario |
| string | Correo electronico | |
| email_verified_at | timestamp | Fecha verificacion |
| password | string | Contrasena hasheada |
| remember_token | string | Token de sesion |
| created_at | timestamp | Fecha creacion |
| updated_at | timestamp | Fecha actualizacion |
Relaciones:
rfcs()- BelongsToMany con RfclinkedSocialAccounts()- HasMany con LinkedSocialAccount
Rfc
RFC (Registro Federal de Contribuyentes) asociado a usuarios.
Tabla: rfcs
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| rfc | string(13) | RFC del contribuyente |
| razon_social | string | Razon social |
| created_at | timestamp | Fecha creacion |
| updated_at | timestamp | Fecha actualizacion |
Relaciones:
users()- BelongsToMany con Userinvoices()- HasMany con Invoicetaxpayers()- HasMany con Taxpayer
Invoice
Factura electronica (CFDI).
Tabla: invoices
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| uuid | string(36) | UUID unico del CFDI |
| serie | string | Serie de la factura |
| folio | string | Folio de la factura |
| fecha | datetime | Fecha de emision |
| subtotal | decimal(18,2) | Subtotal |
| descuento | decimal(18,2) | Descuento aplicado |
| total | decimal(18,2) | Total de la factura |
| moneda | string(3) | Codigo de moneda |
| tipo_cambio | decimal(10,4) | Tipo de cambio |
| emisor_rfc | string(13) | RFC del emisor |
| emisor_nombre | string | Nombre del emisor |
| receptor_rfc | string(13) | RFC del receptor |
| receptor_nombre | string | Nombre del receptor |
| tipo_comprobante | string(1) | Tipo (I, E, T, N, P) |
| metodo_pago | string(3) | Metodo de pago |
| forma_pago | string(2) | Forma de pago |
| uso_cfdi | string(4) | Uso del CFDI |
| iva_trasladado | decimal(18,2) | IVA trasladado |
| iva_retenido | decimal(18,2) | IVA retenido |
| isr_retenido | decimal(18,2) | ISR retenido |
| rfc_id | bigint | FK a rfcs |
| conciliado | boolean | Estado de conciliacion |
| created_at | timestamp | Fecha creacion |
| updated_at | timestamp | Fecha actualizacion |
Relaciones:
rfc()- BelongsTo con Rfclines()- HasMany con InvoiceLinepayments()- HasMany con InvoicePaymentinvoiceType()- BelongsTo con InvoiceTypeconciliations()- HasMany con Conciliation
InvoiceLine
Linea/concepto de una factura.
Tabla: invoice_lines
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| invoice_id | bigint | FK a invoices |
| clave_prod_serv | string(8) | Codigo SAT producto/servicio |
| clave_unidad | string(6) | Codigo SAT unidad |
| descripcion | text | Descripcion del concepto |
| cantidad | decimal(18,6) | Cantidad |
| valor_unitario | decimal(18,6) | Valor unitario |
| importe | decimal(18,2) | Importe |
| descuento | decimal(18,2) | Descuento |
| created_at | timestamp | Fecha creacion |
| updated_at | timestamp | Fecha actualizacion |
Relaciones:
invoice()- BelongsTo con InvoiceprodServCode()- BelongsTo con ProdServCodeunitCode()- BelongsTo con UnitCode
InvoicePayment
Pago de factura (complemento de pago PPD).
Tabla: invoice_payments
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| invoice_id | bigint | FK a invoice (CFDI de pago) |
| doc_relacionado_uuid | string(36) | UUID factura pagada |
| fecha_pago | datetime | Fecha del pago |
| monto | decimal(18,2) | Monto pagado |
| num_parcialidad | integer | Numero de parcialidad |
| imp_saldo_ant | decimal(18,2) | Saldo anterior |
| imp_pagado | decimal(18,2) | Importe pagado |
| imp_saldo_insoluto | decimal(18,2) | Saldo insoluto |
| created_at | timestamp | Fecha creacion |
| updated_at | timestamp | Fecha actualizacion |
Relaciones:
invoice()- BelongsTo con Invoice
Taxpayer
Informacion del contribuyente.
Tabla: taxpayers
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| rfc_id | bigint | FK a rfcs |
| nombre | string | Nombre o razon social |
| tipo_persona | string | Fisica o Moral |
| situacion | string | Situacion fiscal |
| fecha_inicio_operaciones | date | Inicio de operaciones |
| created_at | timestamp | Fecha creacion |
| updated_at | timestamp | Fecha actualizacion |
Relaciones:
rfc()- BelongsTo con RfctaxRegimes()- BelongsToMany con TaxRegimeeconomicActivities()- BelongsToMany con EconomicActivityrisks()- BelongsToMany con Risk
LinkedSocialAccount
Cuenta social vinculada al usuario.
Tabla: linked_social_accounts
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| user_id | bigint | FK a users |
| provider | string | Proveedor (clerk, google, etc) |
| provider_id | string | ID en el proveedor |
| created_at | timestamp | Fecha creacion |
| updated_at | timestamp | Fecha actualizacion |
Relaciones:
user()- BelongsTo con User
Modelos de Catalogos
InvoiceType
Tipos de comprobante fiscal.
| Codigo | Nombre |
|---|---|
| I | Ingreso |
| E | Egreso |
| T | Traslado |
| N | Nomina |
| P | Pago |
PaymentMethod
Metodos de pago.
| Codigo | Nombre |
|---|---|
| PUE | Pago en una sola exhibicion |
| PPD | Pago en parcialidades o diferido |
PaymentType
Formas de pago (30+ tipos).
| Codigo | Nombre |
|---|---|
| 01 | Efectivo |
| 02 | Cheque nominativo |
| 03 | Transferencia electronica |
| 04 | Tarjeta de credito |
| ... | ... |
Currency
Monedas.
| Codigo | Nombre |
|---|---|
| MXN | Peso Mexicano |
| USD | Dolar Americano |
| EUR | Euro |
| ... | ... |
TaxRegime
Regimenes fiscales.
| Codigo | Nombre |
|---|---|
| 601 | General de Ley Personas Morales |
| 603 | Personas Morales con Fines no Lucrativos |
| 605 | Sueldos y Salarios |
| 606 | Arrendamiento |
| 612 | Personas Fisicas con Actividades Empresariales |
| 621 | Incorporacion Fiscal |
| 626 | Regimen Simplificado de Confianza |
| ... | ... |
Tax
Impuestos.
| Codigo | Nombre |
|---|---|
| 001 | ISR |
| 002 | IVA |
| 003 | IEPS |
TaxRate
Tasas de impuestos.
| Impuesto | Tasa |
|---|---|
| IVA | 0.16 (16%) |
| IVA | 0.08 (8% frontera) |
| IVA | 0.00 (0%) |
| ISR | Variable |
| IEPS | Variable |
Status
Estados de factura.
| Codigo | Nombre |
|---|---|
| 1 | Vigente |
| 0 | Cancelado |
CancellationType
Tipos de cancelacion.
| Codigo | Nombre |
|---|---|
| 01 | Con relacion |
| 02 | Sin relacion |
EconomicActivity
Actividades economicas.
Industry
Industrias/sectores.
Risk
Riesgos fiscales.
Dimension
Dimensiones de empresa.
Modelos de Codigos SAT
ProdServCode
Catalogo de productos y servicios SAT.
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| code | string(8) | Codigo SAT |
| description | string | Descripcion |
UnitCode
Catalogo de unidades SAT.
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| code | string(6) | Codigo SAT |
| name | string | Nombre de la unidad |
PostalCode
Codigos postales.
Modelos Financieros
SalesRevenue
Ingresos por ventas.
Expenditure
Egresos/gastos.
Conciliation
Conciliaciones de facturas.
| Campo | Tipo | Descripcion |
|---|---|---|
| id | bigint | ID primario |
| invoice_id | bigint | FK a invoices |
| fecha_conciliacion | datetime | Fecha de conciliacion |
| usuario_id | bigint | Usuario que concilio |
| created_at | timestamp | Fecha creacion |
| updated_at | timestamp | Fecha actualizacion |
Modelos Auxiliares
ManagerOTP
Gestion de One-Time Passwords.
InvoiceRequest
Solicitudes de facturas.
Usage
Usos de CFDI.
Role
Roles de usuario.
Migraciones
El proyecto incluye 41 migraciones que crean toda la estructura de base de datos. Para ejecutarlas:
# Ejecutar todas las migraciones
php artisan migrate
# Revertir migraciones
php artisan migrate:rollback
# Refrescar base de datos (elimina y recrea)
php artisan migrate:fresh
# Ver estado de migraciones
php artisan migrate:status
Seeders
# Ejecutar todos los seeders
php artisan db:seed
# Ejecutar seeder especifico
php artisan db:seed --class=InvoiceTypeSeeder
Dump de Base de Datos
El archivo horux360bd.sql contiene un dump completo de la base de datos para importar:
mysql -u usuario -p horux360bd < horux360bd.sql