class MX::SAT::Contabilidad::BalanzaComprobacion
Constants
- NAMESPACE
OJOOOOOO están mal las URLs, pero el
SAT
así las tiene en sus XSDs al 28 de Feb de 2015- NAMESPACES
- TIPOS_ENVIO
- TIPO_ENVIO_COMPLEMENTARIA
- TIPO_ENVIO_NORMAL
- VERSION
- XSD_BALANZA_COMPROBACION
- XSLT_BALANZA_COMPROBACION
Attributes
año[RW]
certificado[RW]
datos[RW]
fecha_modificacion[RW]
llave_privada[RW]
mes[RW]
nombre_archivo[R]
passwd_llave_privada[RW]
rfc[RW]
tipo_envio[RW]
xml[R]
xml_certificado[R]
Public Class Methods
new()
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 25 def initialize @xml = nil @xml_certificado = nil @nombre_archivo = nil @rfc = nil @año = nil @mes = nil @tipo_envio = nil @fecha_mod_bal = nil @fecha_modificacion = nil @datos = [] @certificado = nil @llave_privada = nil @passwd_llave_privada = nil end
Public Instance Methods
cargar_xslx(archivo)
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 41 def cargar_xslx(archivo) doc = ::SimpleXlsxReader.open(archivo) filas = doc.sheets.find{ |s| s.name.downcase == "datos" }.rows[1..-1] obtener_atributos_generales(filas.first) obtener_datos(filas) end
generar_archivo_xml()
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 57 def generar_archivo_xml return unless @nombre_archivo File.open("#{@nombre_archivo}.xml", "w") {|f| f.write(@xml_certifcado || @xml || self.to_xml) } "#{@nombre_archivo}.xml" end
generar_archivo_zip()
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 63 def generar_archivo_zip return unless @nombre_archivo self.generar_archivo_xml unless File.exist?("#{@nombre_archivo}.xml") ::Zip::File.open(File.join("#{@nombre_archivo}.zip"), ::Zip::File::CREATE) do |archivo_zip| archivo_zip.add("#{@nombre_archivo}.xml", "#{@nombre_archivo}.xml") end "#{@nombre_archivo}.zip" end
to_xml()
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 48 def to_xml return if @datos.empty? builder = ::Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml| xml['BCE'].Balanza(atributos_nodo_balanza){ @datos.each{ |dato| xml.Ctas(dato) } } end @xml = builder.to_xml certificar_xml end
xml_valido?()
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 72 def xml_valido? xsd_doc = Nokogiri::XML::Schema(File.open(XSD_BALANZA_COMPROBACION, 'rb')) xml_doc = Nokogiri::XML(@xml_certificado || @xml || self.to_xml, nil, 'UTF-8') errors = "" xsd_doc.validate(xml_doc).each { |error| errors += " #{error.message}" } doc_valido = xsd_doc.valid?(xml_doc) puts "XML validado con #{xsd} es INVÁLIDO!: #{errors}" unless doc_valido return doc_valido end
Private Instance Methods
agregar_certificacion_xml()
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 92 def agregar_certificacion_xml xml_doc_sin_sello = Nokogiri::XML(@xml || to_xml, nil, 'UTF-8') cadena = ::MX::SAT::Certificacion.generar_cadena_original(@xml, XSLT_BALANZA_COMPROBACION) nodo_raiz = xml_doc_sin_sello.at_xpath('/BCE:Balanza', NAMESPACE) nodo_raiz['Sello'] = ::MX::SAT::Certificacion.firma_sha256(cadena, @llave_privada, @passwd_llave_privada) nodo_raiz['noCertificado'] = ::MX::SAT::Certificacion.num_serial_certificado(@certificado) nodo_raiz['Certificado'] = ::MX::SAT::Certificacion.certificado_b64(@certificado) xml_doc_sin_sello.to_xml end
atributos_nodo_balanza()
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 102 def atributos_nodo_balanza atributos = { Version: VERSION, RFC: @rfc, Mes: @mes, Anio: @año, TipoEnvio: @tipo_envio } atributos[:FechaModBal] = @fecha_modificacion unless @fecha_modificacion.nil? atributos.merge(NAMESPACES) end
certificar_xml()
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 84 def certificar_xml if !@certificado.nil? and !@llave_privada.nil? @xml_certificado = agregar_certificacion_xml else @xml end end
establecer_fecha_modificacion()
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 108 def establecer_fecha_modificacion begin @fecha_modificacion = Date.parse(@fecha_mod_bal).to_s if @fecha_mod_bal and !@fecha_mod_bal.empty? @fecha_modificacion = 'falta_fecha' if @fecha_mod_bal.nil? and @fecha_mod_bal.empty? and (@tipo_envio == "C") rescue ArgumentError @fecha_modificacion = 'formato_fecha_incorrecta' end end
fmto_decimal(num)
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 132 def fmto_decimal(num) return "0" if num.to_i.zero? "%.2f" % num end
fmto_mes(num)
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 137 def fmto_mes(num) "%02d" % num end
obtener_atributos_generales(fila)
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 117 def obtener_atributos_generales(fila) arr = fila[0..4] @rfc, mes, @año, @tipo_envio, @fecha_mod_bal = *arr @mes = fmto_mes(mes) establecer_fecha_modificacion @nombre_archivo = "#{@rfc}#{@año}#{@mes}B#{@tipo_envio}" end
obtener_datos(filas)
click to toggle source
# File lib/MX/SAT/Contabilidad/balanza_comprobacion.rb, line 125 def obtener_datos(filas) @datos = filas.map do |fila| { NumCta: fila[5], SaldoIni: fmto_decimal(fila[6]), Debe: fmto_decimal(fila[7]), Haber: fmto_decimal(fila[8]), SaldoFin: fmto_decimal(fila[9]) } end end