Class: VerifactuRails::Libro::Cadena
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- VerifactuRails::Libro::Cadena
- 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
-
#anotar_alta!(**datos) ⇒ Object
Anota un alta y la encadena.
- #anotar_anulacion!(**datos) ⇒ Object
- #sistema_informatico ⇒ Object
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_informatico ⇒ Object
58 |
# File 'lib/verifactu_rails/libro/cadena.rb', line 58 def sistema_informatico = Libro.configuracion.sistema_para(self) |