Documentación técnica del plugin Amortizaciones

Documento para desarrolladores que necesiten mantener el plugin, ampliarlo o integrarlo con otros. Describe los modelos, los procesos, los asientos que genera y los puntos de extensión.

🗃️ Modelos y tablas

  • Amortizacion (amortizaciones): ficha del inmovilizado o del préstamo.
    • tipo: constante o bancario.
    • contabilizacion: anual, trimestral o mensual. En el tipo bancario se fuerza mensual.
    • periodos: años en el tipo constante, cuotas en el bancario.
    • valor: importe a amortizar.
    • residual: pendiente de amortizar. Se calcula en test() y no se edita.
    • fechainicio; fechafin, calculada en test() a partir de los periodos.
    • Subcuentas: codsubcuentacierre, codsubcuentadebe, codsubcuentahaber, codsubcuentabeneficios, codsubcuentaperdidas y, en el tipo bancario, codsubcuentainteres. En el bancario, codsubcuentadebe es la de capital y codsubcuentahaber la de banco.
    • Datos del préstamo: tasaanual, cargo (0 último día del mes, 1 primer día) y cuotainicial.
    • Enlaces: idfactura (factura de compra), idfacturaventa (factura de venta) e idasientofinvida (asiento de baja), con fechafinvidautil como fecha de baja.
  • LineaAmortizacion (lineasamortizaciones): un periodo del plan.
    • ano y periodo. La fecha se recalcula en test() a partir de ellos con getDateFromPeriod().
    • cantidad (importe a amortizar), amortizado y, en el tipo bancario, capital e interes.
    • idasiento: asiento del periodo.
    • El periodo 99 (PERIOD_FINALIZE) es la línea de cierre que se crea al vender o dar de baja. Conserva su fecha y enlaza el asiento de baja.
  • AmortizacionPlantilla, AmortizacionTabla y AmortizacionSubcuenta: catálogos de plantillas, periodos legales y ayuda de cuentas. Los datos de España se cargan desde Data/Codpais/ESP solo al crear cada tabla, así que los cambios en esos CSV no llegan a las instalaciones existentes.
  • Join\Amortizacion: modelo del listado, que añade el nombre corto de la empresa.

🔄 Procesos

Están en Lib/Amortizaciones, y los que escriben datos se ejecutan dentro de una transacción.

  • AmortizationPlan: crea el plan. Delega en AmortizationConstant (cuota lineal con tres tratamientos del primer periodo) o en AmortizationBank (sistema francés, con la cuota inicial como primera línea de solo intereses), según el tipo.
  • AmortizacionVender: crea la factura de venta si no se indica una existente, cierra el plan hasta la fecha de la factura, genera el asiento de venta y crea la línea de cierre.
  • AmortizacionFinalizar: igual que la venta pero sin factura, con la fecha indicada por el usuario y el asiento de fin de vida.
  • EditAmortizacionAction: acciones de la pestaña de líneas. Editar e insertar líneas, datos de una línea o de la factura de compra para los modales, y autocompletado de asientos de la misma fecha que la línea.
  • AmortizationDateUpdater: actualiza la fecha de las líneas anuales sin asiento cuando cambia el ajuste del día de contabilización.
  • AmortizationInfo: datos de las ayudas de periodos legales y cuentas que se muestran al pie de las pestañas, mediante los bloques de View/Block.

📒 Asientos

Las clases de Lib/Accounting extienden AccountingClass del core. Todas comprueban que el ejercicio de la fecha exista y esté abierto, y guardan el asiento con editable = false.

  • AmortizationPlanToAccounting: un asiento por línea, con la fecha de la línea. Al contabilizar informa idasiento y pone amortizado igual a cantidad.
    • Tipo constante: Debe codsubcuentadebe, Haber codsubcuentahaber.
    • Tipo bancario: Debe codsubcuentadebe por el capital, Debe codsubcuentainteres por el interés y Haber codsubcuentahaber por la cuota.
  • AmortizationFinalizeToAccounting: asiento de fin de vida. Informa idasientofinvida y fechafinvidautil.
    • Haber codsubcuentacierre por valor.
    • Debe codsubcuentahaber por el total amortizado.
    • Debe codsubcuentaperdidas por lo pendiente.
  • AmortizationSellToAccounting: asiento de venta. Informa idasientofinvida y fechafinvidautil.
    • Haber codsubcuentacierre por valor.
    • Debe codsubcuentahaber por el total amortizado.
    • Debe la subcuenta de venta por el importe de la venta, para anular lo que la factura de venta llevó a esa subcuenta.
    • La diferencia va al Haber de codsubcuentabeneficios o al Debe de codsubcuentaperdidas.

🧩 Extensiones

Se registran en Init::init().

  • Extension/Model/Asiento: al borrar un asiento, las líneas enlazadas quedan con amortizado = 0 y sin idasiento, y vuelven a estar pendientes. Las líneas se leen en deleteBefore() porque la clave ajena de lineasamortizaciones.idasiento es ON DELETE SET NULL y, tras el borrado, ya no se podrían localizar.
  • Extension/Controller/EditSettings: al guardar la pestaña SettingsAmortizaciones del panel de control, ejecuta AmortizationDateUpdater.

⚙️ Ajustes

  • amortizaciones.annualday: día de diciembre en que se fechan las líneas anuales (1 a 31, por defecto 31). Se crea en Init::update() y se lee con LineaAmortizacion::annualDay(), que devuelve el valor por defecto si el guardado no es válido. No afecta a las líneas mensuales ni trimestrales.

🔒 Reglas de integridad

  • Una ficha no se puede borrar si alguna de sus líneas tiene asiento.
  • Al borrar una línea con asiento se borra también el asiento, desbloqueándolo antes. El ejercicio cerrado y la regularización de IVA bloqueada siguen impidiéndolo.
  • Al modificar una línea se vuelve a guardar la ficha, para recalcular el pendiente de amortizar.
  • Con el plan creado, la pestaña de contabilización queda en solo lectura y el tipo, la fecha de inicio, el importe y la divisa no se pueden cambiar.
  • Con el asiento de baja informado (idasientofinvida), la ficha queda en solo lectura y no se pueden borrar líneas.
  • La venta y el fin de vida solo están disponibles para el tipo constante.
Cookies
Usamos cookies necesarias para el funcionamiento del sitio y cookies opcionales para recordar tus preferencias y mejorar tu experiencia. Puedes aceptarlas todas, rechazarlas o configurar tus preferencias

Soporte