Class: VerifactuRails::Libro::Cadena

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

Overview

Una cadena de registros: un "SIF virtual" identificado por su NumeroInstalacion, con su obligado tributario.

Las FAQs (v1.3) exigen que cada facturación distinta -sean de distintos obligados o del mismo obligado en centros independientes, como tiendas- lleve su propio nº de instalación, "porque se consideran SIF independientes, como si fueran SIF virtuales".

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.abrir!(numero_instalacion:, nif_obligado:, nombre_obligado:) ⇒ Object

Abre una cadena. El número de instalación se EXIGE explícito y no se genera nunca aquí: ni con un default, ni con un find_or_create_by, ni "por comodidad".

No es celo: si la gema lo autogenerase, un contenedor que se recrea en cada despliegue acabaría abriendo una instalación por despliegue, y en el límite una por factura, que es exactamente el patrón que vacía de sentido el encadenamiento. Abrir una instalación es un acto deliberado de quien despliega y tiene que constar como tal.

Las FAQs recomiendan como valor un timestamp de instalación o un secuencial propio del obligado. No puede repetirse NUNCA, ni al reinstalar el mismo software en la misma máquina.



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/verifactu_rails/libro/cadena.rb', line 35

def self.abrir!(numero_instalacion:, nif_obligado:, nombre_obligado:)
  if numero_instalacion.to_s.strip.empty?
    raise ValidacionError,
          'numero_instalacion es obligatorio y no se genera solo. Usa un ' \
          'timestamp de instalación o un secuencial propio del obligado, y ' \
          'no lo reutilices jamás (FAQs Desarrolladores v1.3).'
  end

  create!(numero_instalacion: numero_instalacion,
          nif_obligado: Formato.nif(nif_obligado, 'NIF del obligado'),
          nombre_obligado: Formato.limitar(nombre_obligado, 'NombreRazon del obligado', 120))
end

Instance Method Details

#anotar_alta!(**datos) ⇒ Object

Anota un alta y la encadena. Síncrono y bajo lock: el encadenamiento no se puede diferir, aunque el ENVÍO sí.



50
51
52
# File 'lib/verifactu_rails/libro/cadena.rb', line 50

def anotar_alta!(**datos)
  anotar!(RegistroAlta, 'alta', **datos)
end

#anotar_anulacion!(**datos) ⇒ Object



54
55
56
# File 'lib/verifactu_rails/libro/cadena.rb', line 54

def anotar_anulacion!(**datos)
  anotar!(RegistroAnulacion, 'anulacion', **datos)
end

#sistema_informaticoObject



58
# File 'lib/verifactu_rails/libro/cadena.rb', line 58

def sistema_informatico = Libro.configuracion.sistema_para(self)