Class: VerifactuRails::Desglose

Inherits:
Object
  • Object
show all
Defined in:
lib/verifactu_rails/desglose.rb

Overview

Conjunto de líneas del desglose (sf:DesgloseType).

Constant Summary collapse

MAXIMO_LINEAS =

maxOccurs del esquema; no es orientativo

12

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(detalles) ⇒ Desglose

Returns a new instance of Desglose.

Raises:



365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
# File 'lib/verifactu_rails/desglose.rb', line 365

def initialize(detalles)
  @detalles = Array(detalles)

  raise ValidacionError, 'El desglose necesita al menos una línea' if @detalles.empty?

  if @detalles.size > MAXIMO_LINEAS
    raise ValidacionError,
          "El desglose admite como mucho #{MAXIMO_LINEAS} líneas " \
          "(recibidas #{@detalles.size}). Agrupa por tipo impositivo."
  end

  unless @detalles.all?(Detalle)
    raise ValidacionError, 'Todas las líneas deben ser VerifactuRails::Detalle'
  end
end

Instance Attribute Details

#detallesObject (readonly)

Returns the value of attribute detalles.



363
364
365
# File 'lib/verifactu_rails/desglose.rb', line 363

def detalles
  @detalles
end

Instance Method Details

#base_totalObject



392
393
394
# File 'lib/verifactu_rails/desglose.rb', line 392

def base_total
  Importe.formatear(detalles.sum { |d| BigDecimal(d.base_imponible) })
end

#cuota_totalObject

Suma de cuotas repercutidas y de recargos. Se ofrece como ayuda para rellenar CuotaTotal, pero NO se impone: la relación entre el desglose y los totales tiene casos límite (rectificativas, no sujetas) y preferimos que el importe que se envía sea siempre el que decide quien llama.



385
386
387
388
389
390
# File 'lib/verifactu_rails/desglose.rb', line 385

def cuota_total
  suma = detalles.sum do |d|
    BigDecimal(d.cuota_repercutida || '0') + BigDecimal(d.cuota_recargo || '0')
  end
  Importe.formatear(suma)
end