# 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 | | email | 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 Rfc - `linkedSocialAccounts()` - 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 User - `invoices()` - HasMany con Invoice - `taxpayers()` - 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 Rfc - `lines()` - HasMany con InvoiceLine - `payments()` - HasMany con InvoicePayment - `invoiceType()` - BelongsTo con InvoiceType - `conciliations()` - 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 Invoice - `prodServCode()` - BelongsTo con ProdServCode - `unitCode()` - 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 Rfc - `taxRegimes()` - BelongsToMany con TaxRegime - `economicActivities()` - BelongsToMany con EconomicActivity - `risks()` - 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: ```bash # 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 ```bash # 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: ```bash mysql -u usuario -p horux360bd < horux360bd.sql ```