Class: VerifactuRails::Libro::Registro

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/verifactu_rails/libro/registro.rb

Overview

Una anotación del libro registro: un registro de facturación tal y como se generó, con su sitio en la cadena.

Es el SISTEMA DE REGISTRO, no una caché de lo que tiene la AEAT. Está comprobado que la consulta de la AEAT devuelve una foto por factura y no el histórico: los eslabones sustituidos desaparecen de allí. Si esta tabla se pierde, el histórico de la cadena no existe en ninguna otra parte.

Constant Summary collapse

ESTADOS =
%w[pendiente enviando anotado aceptado_con_errores rechazado].freeze

Instance Method Summary collapse

Instance Method Details

#a_registro_anteriorObject

Para encadenar el siguiente.



45
46
47
48
# File 'lib/verifactu_rails/libro/registro.rb', line 45

def a_registro_anterior
  RegistroAnterior.new(id_emisor: id_emisor, num_serie: num_serie,
                       fecha_expedicion: fecha_expedicion, huella: huella)
end

#anomalias?Boolean

Returns:

  • (Boolean)


30
# File 'lib/verifactu_rails/libro/registro.rb', line 30

def anomalias? = anomalias.present?

#anomalias_listaObject



32
33
34
# File 'lib/verifactu_rails/libro/registro.rb', line 32

def anomalias_lista
  anomalias.nil? ? [] : JSON.parse(anomalias).map(&:to_sym)
end

#anteriorObject

El eslabón anterior, buscado por su huella. Funciona porque (cadena_id, huella) es único.



38
39
40
41
42
# File 'lib/verifactu_rails/libro/registro.rb', line 38

def anterior
  return nil if primero?

  cadena.registros.find_by(huella: huella_anterior)
end

#huella_cuadra?Boolean

Returns:

  • (Boolean)


71
# File 'lib/verifactu_rails/libro/registro.rb', line 71

def huella_cuadra? = huella_recalculada == huella

#huella_recalculadaObject

Recalcula la huella desde las columnas, sin tocar el payload ni volver a construir el objeto de dominio. Es lo que permite detectar que alguien editó la fila: si el recálculo no da lo almacenado, la anotación está alterada.



57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/verifactu_rails/libro/registro.rb', line 57

def huella_recalculada
  if tipo == 'anulacion'
    Huella.anulacion(id_emisor: id_emisor, num_serie: num_serie,
                     fecha_expedicion: fecha_expedicion,
                     fecha_hora_gen: fecha_hora_gen,
                     huella_anterior: huella_anterior)
  else
    Huella.alta(id_emisor: id_emisor, num_serie: num_serie,
                fecha_expedicion: fecha_expedicion, tipo_factura: tipo_factura,
                cuota_total: cuota_total, importe_total: importe_total,
                fecha_hora_gen: fecha_hora_gen, huella_anterior: huella_anterior)
  end
end

#momentoObject

La marca temporal tal y como entró en la huella, con su huso.



51
# File 'lib/verifactu_rails/libro/registro.rb', line 51

def momento = Time.iso8601(fecha_hora_gen)

#primero?Boolean

Returns:

  • (Boolean)


29
# File 'lib/verifactu_rails/libro/registro.rb', line 29

def primero? = huella_anterior == ''