class MX::SAT::Contabilidad::CatalogoCuentas

Constants

NAMESPACE

OJOOOOOO están mal las URLs, pero el SAT así las tiene en sus XSDs al 28 de Feb de 2015

NAMESPACES
VERSION
XSD_CATALOGO_CUENTAS
XSLT_CATALOGO_CUENTAS

Attributes

año[RW]
certificado[RW]
datos[RW]
llave_privada[RW]
mes[RW]
nombre_archivo[R]
passwd_llave_privada[RW]
rfc[RW]
xml[R]
xml_certificado[R]

Public Class Methods

new() click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 18
def initialize
  @xml = nil
  @xml_certificado = nil
  @nombre_archivo = nil
  @rfc = nil
  @año = nil
  @mes = 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/catalogo_cuentas.rb, line 31
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)
  @datos = filas.map { |fila| { CodAgrup: fila[3], NumCta: fila[4], Desc: fila[5], SubCtaDe: fila[6], Nivel: fila[7], Natur: fila[8] } }
end
generar_archivo_xml() click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 51
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/catalogo_cuentas.rb, line 57
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/catalogo_cuentas.rb, line 38
def to_xml
  return if @datos.empty?
  builder = ::Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
    xml['catalogocuentas'].Catalogo(atributos_nodo_catalogo) do
      @datos.each do |dato|
        xml.Ctas((dato[:SubCtaDe].nil? or dato[:SubCtaDe].empty?) ? dato.reject{|k,v| k == :SubCtaDe} : dato)
      end
    end
  end
  @xml = builder.to_xml
  certificar_xml
end
xml_valido?() click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 66
def xml_valido?
  xsd_doc = Nokogiri::XML::Schema(File.open(XSD_CATALOGO_CUENTAS, '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/catalogo_cuentas.rb, line 86
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_CATALOGO_CUENTAS)
  nodo_raiz = xml_doc_sin_sello.at_xpath('/catalogocuentas:Catalogo', 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_ctas(dato) click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 101
def atributos_nodo_ctas(dato)
  (dato[:SubCtaDe].nil? or dato[:SubCtaDe].empty?) ? dato.reject{|k,v| k == :SubCtaDe} : dato
end
certificar_xml() click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 78
def certificar_xml
  if !@certificado.nil? and !@llave_privada.nil?
    @xml_certificado = agregar_certificacion_xml
  else
    @xml
  end
end
fmto_mes(num) click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 112
def fmto_mes(num)
  "%02d" % num
end
obtener_atributos_generales(fila) click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 105
def obtener_atributos_generales(fila)
  arr = fila[0..2]
  @rfc, mes, @año = *arr
  @mes = fmto_mes(mes)
  @nombre_archivo = "#{@rfc}#{@año}#{@mes}CT"
end