nfe_reader 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.gitignore +23 -0
 - data/Gemfile +4 -0
 - data/LICENSE.txt +22 -0
 - data/README.md +38 -0
 - data/Rakefile +13 -0
 - data/lib/nfe_reader/authorization.rb +12 -0
 - data/lib/nfe_reader/carrier.rb +16 -0
 - data/lib/nfe_reader/collection/duplicate.rb +12 -0
 - data/lib/nfe_reader/collection.rb +34 -0
 - data/lib/nfe_reader/customer.rb +62 -0
 - data/lib/nfe_reader/delivery.rb +20 -0
 - data/lib/nfe_reader/document.rb +73 -0
 - data/lib/nfe_reader/export.rb +12 -0
 - data/lib/nfe_reader/fiscal.rb +33 -0
 - data/lib/nfe_reader/header.rb +129 -0
 - data/lib/nfe_reader/information.rb +38 -0
 - data/lib/nfe_reader/product/armament.rb +22 -0
 - data/lib/nfe_reader/product/cane.rb +42 -0
 - data/lib/nfe_reader/product/exportation.rb +20 -0
 - data/lib/nfe_reader/product/fuel.rb +18 -0
 - data/lib/nfe_reader/product/importation.rb +49 -0
 - data/lib/nfe_reader/product/medicament.rb +19 -0
 - data/lib/nfe_reader/product/vehicle.rb +117 -0
 - data/lib/nfe_reader/product.rb +90 -0
 - data/lib/nfe_reader/provider.rb +43 -0
 - data/lib/nfe_reader/purchase.rb +14 -0
 - data/lib/nfe_reader/removal.rb +20 -0
 - data/lib/nfe_reader/taxation/cofins.rb +43 -0
 - data/lib/nfe_reader/taxation/cofins_st.rb +19 -0
 - data/lib/nfe_reader/taxation/icms.rb +86 -0
 - data/lib/nfe_reader/taxation/importation_tax.rb +17 -0
 - data/lib/nfe_reader/taxation/ipi.rb +41 -0
 - data/lib/nfe_reader/taxation/issqn.rb +22 -0
 - data/lib/nfe_reader/taxation/pis.rb +42 -0
 - data/lib/nfe_reader/taxation/pis_st.rb +19 -0
 - data/lib/nfe_reader/total.rb +76 -0
 - data/lib/nfe_reader/transport.rb +97 -0
 - data/lib/nfe_reader/version.rb +5 -0
 - data/lib/nfe_reader.rb +129 -0
 - data/lib/nokogiri_hash.rb +60 -0
 - data/nfe-reader.gemspec +24 -0
 - data/test/files/sample-nfe.xml +234 -0
 - data/test/files/sample2-nfe.xml +192 -0
 - data/test/nfe_reader/authorization_test.rb +22 -0
 - data/test/nfe_reader/cane_test.rb +71 -0
 - data/test/nfe_reader/carrier_test.rb +46 -0
 - data/test/nfe_reader/collection/duplicate_test.rb +27 -0
 - data/test/nfe_reader/collection_test.rb +78 -0
 - data/test/nfe_reader/customer_test.rb +133 -0
 - data/test/nfe_reader/delivery_test.rb +57 -0
 - data/test/nfe_reader/document_test.rb +113 -0
 - data/test/nfe_reader/export_test.rb +22 -0
 - data/test/nfe_reader/fiscal_test.rb +67 -0
 - data/test/nfe_reader/header_test.rb +135 -0
 - data/test/nfe_reader/information_test.rb +37 -0
 - data/test/nfe_reader/product/armament_test.rb +32 -0
 - data/test/nfe_reader/product/exportation_test.rb +34 -0
 - data/test/nfe_reader/product/fuel_test.rb +44 -0
 - data/test/nfe_reader/product/importation_test.rb +64 -0
 - data/test/nfe_reader/product/medicament_test.rb +37 -0
 - data/test/nfe_reader/product/vehicle_test.rb +133 -0
 - data/test/nfe_reader/product_test.rb +125 -0
 - data/test/nfe_reader/provider_test.rb +155 -0
 - data/test/nfe_reader/purchase_test.rb +27 -0
 - data/test/nfe_reader/removal_test.rb +57 -0
 - data/test/nfe_reader/taxation/cofins_st_test.rb +37 -0
 - data/test/nfe_reader/taxation/cofins_test.rb +42 -0
 - data/test/nfe_reader/taxation/icms_test.rb +122 -0
 - data/test/nfe_reader/taxation/importation_tax_test.rb +32 -0
 - data/test/nfe_reader/taxation/ipi_test.rb +78 -0
 - data/test/nfe_reader/taxation/issqn_test.rb +42 -0
 - data/test/nfe_reader/taxation/pis_st_test.rb +37 -0
 - data/test/nfe_reader/taxation/pis_test.rb +42 -0
 - data/test/nfe_reader/total_test.rb +148 -0
 - data/test/nfe_reader/transport_test.rb +172 -0
 - data/test/nfe_reader_test.rb +125 -0
 - data/test/nokogiri_test.rb +27 -0
 - data/test/test_helper.rb +13 -0
 - metadata +201 -0
 
| 
         @@ -0,0 +1,76 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: UTF-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            module Nfe
         
     | 
| 
      
 3 
     | 
    
         
            +
              class Total
         
     | 
| 
      
 4 
     | 
    
         
            +
                attr_reader :icms_base, :icms, :st_base, :st, :product, :freight,
         
     | 
| 
      
 5 
     | 
    
         
            +
                  :insurance, :descount, :ii, :ipi, :pis, :cofins, :another, :total,
         
     | 
| 
      
 6 
     | 
    
         
            +
                  :service_value, :service_base, :service_iss, :service_pis, :service_cofins,
         
     | 
| 
      
 7 
     | 
    
         
            +
                  :retention_pis, :retention_csll, :retention_irrf_base, :retention_cofins,
         
     | 
| 
      
 8 
     | 
    
         
            +
                  :retention_irrf, :retention_foresight_base, :retention_foresight
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                def initialize(attrs = {})
         
     | 
| 
      
 11 
     | 
    
         
            +
                  # Impostos
         
     | 
| 
      
 12 
     | 
    
         
            +
                  if attrs[:ICMSTot]
         
     | 
| 
      
 13 
     | 
    
         
            +
                    # Base ICMS
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @icms_base = attrs[:ICMSTot][:vBC]
         
     | 
| 
      
 15 
     | 
    
         
            +
                    # Valor ICMS
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @icms = attrs[:ICMSTot][:vICMS]
         
     | 
| 
      
 17 
     | 
    
         
            +
                    # Base ICMS ST
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @st_base = attrs[:ICMSTot][:vBCST]
         
     | 
| 
      
 19 
     | 
    
         
            +
                    # Valor ICMS ST
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @st = attrs[:ICMSTot][:vST]
         
     | 
| 
      
 21 
     | 
    
         
            +
                    # Total de Produtos
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @product = attrs[:ICMSTot][:vProd]
         
     | 
| 
      
 23 
     | 
    
         
            +
                    # Total de Frete
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @freight = attrs[:ICMSTot][:vFrete]
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # Total de Seguro
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @insurance = attrs[:ICMSTot][:vSeg]
         
     | 
| 
      
 27 
     | 
    
         
            +
                    # Total de Desconto
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @descount = attrs[:ICMSTot][:vDesc]
         
     | 
| 
      
 29 
     | 
    
         
            +
                    # Total de Imposto de Importacao
         
     | 
| 
      
 30 
     | 
    
         
            +
                    @ii = attrs[:ICMSTot][:vII]
         
     | 
| 
      
 31 
     | 
    
         
            +
                    # Total de IPI
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @ipi = attrs[:ICMSTot][:vIPI]
         
     | 
| 
      
 33 
     | 
    
         
            +
                    # Total de PIS
         
     | 
| 
      
 34 
     | 
    
         
            +
                    @pis = attrs[:ICMSTot][:vPIS]
         
     | 
| 
      
 35 
     | 
    
         
            +
                    # Total de COFINS
         
     | 
| 
      
 36 
     | 
    
         
            +
                    @cofins = attrs[:ICMSTot][:vCOFINS]
         
     | 
| 
      
 37 
     | 
    
         
            +
                    # Total de Outros
         
     | 
| 
      
 38 
     | 
    
         
            +
                    @another = attrs[:ICMSTot][:vOutro]
         
     | 
| 
      
 39 
     | 
    
         
            +
                    # Total NFe
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @total = attrs[:ICMSTot][:vNF]
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  # Servicos
         
     | 
| 
      
 44 
     | 
    
         
            +
                  if attrs[:ISSQNtot]
         
     | 
| 
      
 45 
     | 
    
         
            +
                    # Valor do Servico
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @service_value = attrs[:ISSQNtot][:vServ]
         
     | 
| 
      
 47 
     | 
    
         
            +
                    # Base de calculo do Servico
         
     | 
| 
      
 48 
     | 
    
         
            +
                    @service_base = attrs[:ISSQNtot][:vBC]
         
     | 
| 
      
 49 
     | 
    
         
            +
                    # ISS do Servico
         
     | 
| 
      
 50 
     | 
    
         
            +
                    @service_iss = attrs[:ISSQNtot][:vISS]
         
     | 
| 
      
 51 
     | 
    
         
            +
                    # Pis do Servico
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @service_pis = attrs[:ISSQNtot][:vPIS]
         
     | 
| 
      
 53 
     | 
    
         
            +
                    # Cofins do Servico
         
     | 
| 
      
 54 
     | 
    
         
            +
                    @service_cofins = attrs[:ISSQNtot][:vCOFINS]
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  # Retencoes
         
     | 
| 
      
 58 
     | 
    
         
            +
                  if attrs[:retTrib]
         
     | 
| 
      
 59 
     | 
    
         
            +
                    # Retencao de PIS
         
     | 
| 
      
 60 
     | 
    
         
            +
                    @retention_pis = attrs[:retTrib][:vRetPIS]
         
     | 
| 
      
 61 
     | 
    
         
            +
                    # Retencao de COFINS
         
     | 
| 
      
 62 
     | 
    
         
            +
                    @retention_cofins = attrs[:retTrib][:vRetCOFINS]
         
     | 
| 
      
 63 
     | 
    
         
            +
                    # Retencao de CSLL
         
     | 
| 
      
 64 
     | 
    
         
            +
                    @retention_csll = attrs[:retTrib][:vRetCSLL]
         
     | 
| 
      
 65 
     | 
    
         
            +
                    # Base de Retencao do IRRF 
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @retention_irrf_base = attrs[:retTrib][:vBCIRRF]
         
     | 
| 
      
 67 
     | 
    
         
            +
                    # Valor de Retencao do IRRF
         
     | 
| 
      
 68 
     | 
    
         
            +
                    @retention_irrf = attrs[:retTrib][:vIRRF]
         
     | 
| 
      
 69 
     | 
    
         
            +
                    # Base de Retencao da Previdencia
         
     | 
| 
      
 70 
     | 
    
         
            +
                    @retention_foresight_base = attrs[:retTrib][:vBCRetPrev]
         
     | 
| 
      
 71 
     | 
    
         
            +
                    # Valor de Retencao da Previdencia
         
     | 
| 
      
 72 
     | 
    
         
            +
                    @retention_foresight = attrs[:retTrib][:vRetPrev]
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,97 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: UTF-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            module Nfe
         
     | 
| 
      
 3 
     | 
    
         
            +
              class Transport
         
     | 
| 
      
 4 
     | 
    
         
            +
                attr_reader :kind, :service_value, :base, :icms_aliquot, :icms_value,
         
     | 
| 
      
 5 
     | 
    
         
            +
                  :cfop, :city, :vehicle_plaque, :vehicle_state, :vehicle_rntc, :hauling_palque,
         
     | 
| 
      
 6 
     | 
    
         
            +
                  :hauling_state, :hauling_rntc, :wagon, :ferry, :volume_amount, :volume_kind,
         
     | 
| 
      
 7 
     | 
    
         
            +
                  :volume_brand, :volume_number, :weight_net, :weight_gross, :seals, :carrier
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                # Fields Values:
         
     | 
| 
      
 10 
     | 
    
         
            +
                #
         
     | 
| 
      
 11 
     | 
    
         
            +
                # modFrete: 0- Por conta do emitente;
         
     | 
| 
      
 12 
     | 
    
         
            +
                #           1- Por conta do destinatário/remetente;
         
     | 
| 
      
 13 
     | 
    
         
            +
                #           2- Por conta de terceiros;
         
     | 
| 
      
 14 
     | 
    
         
            +
                #           9- Sem frete.
         
     | 
| 
      
 15 
     | 
    
         
            +
                # 
         
     | 
| 
      
 16 
     | 
    
         
            +
                def initialize(attrs = {})
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # Modalidade
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @kind = attrs[:modFrete]
         
     | 
| 
      
 19 
     | 
    
         
            +
                  
         
     | 
| 
      
 20 
     | 
    
         
            +
                  # == Grupo de Retenção do ICMS do transporte
         
     | 
| 
      
 21 
     | 
    
         
            +
                  if attrs[:retTransp]
         
     | 
| 
      
 22 
     | 
    
         
            +
                    # Valor do Servico
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @service_value = attrs[:retTransp][:vServ]
         
     | 
| 
      
 24 
     | 
    
         
            +
                    # BC da Retenção do ICMS
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @base = attrs[:retTransp][:vBCRet]
         
     | 
| 
      
 26 
     | 
    
         
            +
                    # Alíquota da Retenção
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @icms_aliquot = attrs[:retTransp][:pICMSRet]
         
     | 
| 
      
 28 
     | 
    
         
            +
                    # Valor do ICMS Retido
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @icms_value = attrs[:retTransp][:vICMSRet]
         
     | 
| 
      
 30 
     | 
    
         
            +
                    # CFOP
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @cfop = attrs[:retTransp][:CFOP]
         
     | 
| 
      
 32 
     | 
    
         
            +
                    # Municipio gerador de ICMS
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @city = attrs[:retTransp][:cMunFG]
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  # == Veiculo
         
     | 
| 
      
 37 
     | 
    
         
            +
                  if attrs[:veicTransp]
         
     | 
| 
      
 38 
     | 
    
         
            +
                    # Placa
         
     | 
| 
      
 39 
     | 
    
         
            +
                    @vehicle_plaque = attrs[:veicTransp][:placa]
         
     | 
| 
      
 40 
     | 
    
         
            +
                    # Estado
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @vehicle_state = attrs[:veicTransp][:UF]
         
     | 
| 
      
 42 
     | 
    
         
            +
                    # Registro Nacional de Transportador de Carga
         
     | 
| 
      
 43 
     | 
    
         
            +
                    @vehicle_rntc = attrs[:veicTransp][:RNTC]
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  # == Reboque
         
     | 
| 
      
 47 
     | 
    
         
            +
                  if attrs[:reboque]
         
     | 
| 
      
 48 
     | 
    
         
            +
                    # Placa
         
     | 
| 
      
 49 
     | 
    
         
            +
                    @hauling_palque = attrs[:reboque][:placa]
         
     | 
| 
      
 50 
     | 
    
         
            +
                    # Estado
         
     | 
| 
      
 51 
     | 
    
         
            +
                    @hauling_state = attrs[:reboque][:UF]
         
     | 
| 
      
 52 
     | 
    
         
            +
                    # Registro Nacional de Transportador de Carga
         
     | 
| 
      
 53 
     | 
    
         
            +
                    @hauling_rntc = attrs[:reboque][:RNTC]
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  # Vagao
         
     | 
| 
      
 57 
     | 
    
         
            +
                  @wagon = attrs[:vagao]
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # Balsa
         
     | 
| 
      
 59 
     | 
    
         
            +
                  @ferry = attrs[:balsa]
         
     | 
| 
      
 60 
     | 
    
         
            +
                  
         
     | 
| 
      
 61 
     | 
    
         
            +
                  # == Volume
         
     | 
| 
      
 62 
     | 
    
         
            +
                  if attrs[:vol]
         
     | 
| 
      
 63 
     | 
    
         
            +
                    # Quantidade de volumes
         
     | 
| 
      
 64 
     | 
    
         
            +
                    @volume_amount = attrs[:vol][:qVol]
         
     | 
| 
      
 65 
     | 
    
         
            +
                    # Espécie dos volumes
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @volume_kind = attrs[:vol][:esp]
         
     | 
| 
      
 67 
     | 
    
         
            +
                    # Marca dos volumes
         
     | 
| 
      
 68 
     | 
    
         
            +
                    @volume_brand = attrs[:vol][:marca]
         
     | 
| 
      
 69 
     | 
    
         
            +
                    # Numeração dos volumes
         
     | 
| 
      
 70 
     | 
    
         
            +
                    @volume_number = attrs[:vol][:nVol]
         
     | 
| 
      
 71 
     | 
    
         
            +
                    # Peso Liquido
         
     | 
| 
      
 72 
     | 
    
         
            +
                    @weight_net = attrs[:vol][:pesoL]
         
     | 
| 
      
 73 
     | 
    
         
            +
                    # Peso Bruto
         
     | 
| 
      
 74 
     | 
    
         
            +
                    @weight_gross = attrs[:vol][:pesoB]
         
     | 
| 
      
 75 
     | 
    
         
            +
                    # Lacres
         
     | 
| 
      
 76 
     | 
    
         
            +
                    @seals = set_seals(attrs[:vol][:lacres])
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  # Transportadora
         
     | 
| 
      
 80 
     | 
    
         
            +
                  if attrs[:transporta]
         
     | 
| 
      
 81 
     | 
    
         
            +
                    @carrier = Nfe::Carrier.new(attrs[:transporta])
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                def set_seals(attrs = {})
         
     | 
| 
      
 86 
     | 
    
         
            +
                  return unless attrs
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                  if attrs.is_a? Array
         
     | 
| 
      
 89 
     | 
    
         
            +
                    seals = attrs.map { |l| l[:nLacre] }.join(', ')
         
     | 
| 
      
 90 
     | 
    
         
            +
                  else
         
     | 
| 
      
 91 
     | 
    
         
            +
                    seals = attrs[:nLacre]
         
     | 
| 
      
 92 
     | 
    
         
            +
                  end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                  seals
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
              end
         
     | 
| 
      
 97 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/nfe_reader.rb
    ADDED
    
    | 
         @@ -0,0 +1,129 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: UTF-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "nfe_reader/version"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "nokogiri"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "nokogiri_hash"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            %w(nfe_reader/product nfe_reader/collection nfe_reader/taxation nfe_reader).each do |namespace|
         
     | 
| 
      
 7 
     | 
    
         
            +
              Dir[File.dirname(__FILE__) + "/../lib/#{namespace}/*.rb"].each { |file| require file }
         
     | 
| 
      
 8 
     | 
    
         
            +
            end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            module Nfe
         
     | 
| 
      
 11 
     | 
    
         
            +
              module Reader
         
     | 
| 
      
 12 
     | 
    
         
            +
                class Base
         
     | 
| 
      
 13 
     | 
    
         
            +
                  attr_reader :version, :number, :signature, :client, :information,
         
     | 
| 
      
 14 
     | 
    
         
            +
                    :header, :provider, :customer, :products, :collection, :transport,
         
     | 
| 
      
 15 
     | 
    
         
            +
                    :purchase, :cane, :export, :delivery, :removal,:enviroment,
         
     | 
| 
      
 16 
     | 
    
         
            +
                    :version_app, :key, :date, :protocol, :digest, :status, :description,
         
     | 
| 
      
 17 
     | 
    
         
            +
                    :total, :authorizations
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def initialize(file)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    xml = Nokogiri::XML(file)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    xml = xml.to_hash
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    # Versao da NFe
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @version = xml[:nfeProc][:versao]
         
     | 
| 
      
 26 
     | 
    
         
            +
                    # Assinatura
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @signature = xml[:nfeProc][:NFe][:Signature]
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                    # Protocolo
         
     | 
| 
      
 30 
     | 
    
         
            +
                    if xml[:nfeProc][:protNFe]
         
     | 
| 
      
 31 
     | 
    
         
            +
                      protocol = xml[:nfeProc][:protNFe][:infProt]
         
     | 
| 
      
 32 
     | 
    
         
            +
                      
         
     | 
| 
      
 33 
     | 
    
         
            +
                      @enviroment = protocol[:tpAmb]
         
     | 
| 
      
 34 
     | 
    
         
            +
                      @version_app = protocol[:verAplic]
         
     | 
| 
      
 35 
     | 
    
         
            +
                      @key = protocol[:chNFe]
         
     | 
| 
      
 36 
     | 
    
         
            +
                      @date = protocol[:dhRecbto]
         
     | 
| 
      
 37 
     | 
    
         
            +
                      @protocol = protocol[:nProt]
         
     | 
| 
      
 38 
     | 
    
         
            +
                      @digest = protocol[:digVal]
         
     | 
| 
      
 39 
     | 
    
         
            +
                      @status = protocol[:cStat]
         
     | 
| 
      
 40 
     | 
    
         
            +
                      @description = protocol[:xMotivo]
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    xml = xml[:nfeProc][:NFe][:infNFe]
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                    # Numero da Nfe
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @number = xml[:Id]
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                    # Identificação da Nota Fiscal eletrônica
         
     | 
| 
      
 49 
     | 
    
         
            +
                    @header = Nfe::Header.new(xml[:ide])
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                    # Identificação do Emitente da Nota Fiscal eletrônica
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @provider = Nfe::Provider.new(xml[:emit])
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                    # Identificação do Fisco Emitente da NF-e
         
     | 
| 
      
 55 
     | 
    
         
            +
                    if xml[:avulsa]
         
     | 
| 
      
 56 
     | 
    
         
            +
                      @fiscal = Nfe::Fiscal.new(xml[:avulsa])
         
     | 
| 
      
 57 
     | 
    
         
            +
                    end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                    # Identificação do Destinatário da Nota Fiscal eletrônica
         
     | 
| 
      
 60 
     | 
    
         
            +
                    @customer = Nfe::Customer.new(xml[:dest])
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                    # Informacoes Adicional
         
     | 
| 
      
 63 
     | 
    
         
            +
                    if xml[:infAdic]
         
     | 
| 
      
 64 
     | 
    
         
            +
                      @information = Nfe::Information.new(xml[:infAdic])
         
     | 
| 
      
 65 
     | 
    
         
            +
                    end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                    # Detalhamento de Produtos e Serviços da NF-e
         
     | 
| 
      
 68 
     | 
    
         
            +
                    @products = []
         
     | 
| 
      
 69 
     | 
    
         
            +
                    if xml[:det].is_a? Array
         
     | 
| 
      
 70 
     | 
    
         
            +
                      xml[:det].each do |product|
         
     | 
| 
      
 71 
     | 
    
         
            +
                        @products << Nfe::Product.new(product)
         
     | 
| 
      
 72 
     | 
    
         
            +
                      end
         
     | 
| 
      
 73 
     | 
    
         
            +
                    else
         
     | 
| 
      
 74 
     | 
    
         
            +
                      @products << Nfe::Product.new(xml[:det])
         
     | 
| 
      
 75 
     | 
    
         
            +
                    end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                    # Totalizadores
         
     | 
| 
      
 78 
     | 
    
         
            +
                    @total = Nfe::Total.new(xml[:total])
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                    # Informacao de Pagamento
         
     | 
| 
      
 81 
     | 
    
         
            +
                    if xml[:cobr]
         
     | 
| 
      
 82 
     | 
    
         
            +
                      @collection = Nfe::Collection.new(xml[:cobr])
         
     | 
| 
      
 83 
     | 
    
         
            +
                    end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                    # Transporte
         
     | 
| 
      
 86 
     | 
    
         
            +
                    if xml[:transp]
         
     | 
| 
      
 87 
     | 
    
         
            +
                      @transport = Nfe::Transport.new(xml[:transp])
         
     | 
| 
      
 88 
     | 
    
         
            +
                    end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                    # Identificação do Local de Entrega
         
     | 
| 
      
 91 
     | 
    
         
            +
                    if xml[:retirada]
         
     | 
| 
      
 92 
     | 
    
         
            +
                      @removal = Nfe::Removal.new(xml[:retirada])
         
     | 
| 
      
 93 
     | 
    
         
            +
                    end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                    # Identificação do Local de Retirada
         
     | 
| 
      
 96 
     | 
    
         
            +
                    if xml[:entrega]
         
     | 
| 
      
 97 
     | 
    
         
            +
                      @delivery = Nfe::Delivery.new(xml[:entrega])
         
     | 
| 
      
 98 
     | 
    
         
            +
                    end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                    # Autorização para obter XML
         
     | 
| 
      
 101 
     | 
    
         
            +
                    @authorizations = []
         
     | 
| 
      
 102 
     | 
    
         
            +
                    if xml[:autXML].is_a? Array
         
     | 
| 
      
 103 
     | 
    
         
            +
                      xml[:autXML].each do |product|
         
     | 
| 
      
 104 
     | 
    
         
            +
                        @authorizations << Nfe::Authorization.new(product)
         
     | 
| 
      
 105 
     | 
    
         
            +
                      end
         
     | 
| 
      
 106 
     | 
    
         
            +
                    elsif xml[:autXML].is_a? Hash
         
     | 
| 
      
 107 
     | 
    
         
            +
                      @authorizations << Nfe::Authorization.new(xml[:autXML])
         
     | 
| 
      
 108 
     | 
    
         
            +
                    end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                    # Informacoes de Comercio Exterior
         
     | 
| 
      
 111 
     | 
    
         
            +
                    if xml[:exporta]
         
     | 
| 
      
 112 
     | 
    
         
            +
                      @export = Nfe::Export.new(xml[:exporta])
         
     | 
| 
      
 113 
     | 
    
         
            +
                    end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                    # Informacoes de Compra
         
     | 
| 
      
 116 
     | 
    
         
            +
                    if xml[:compra]
         
     | 
| 
      
 117 
     | 
    
         
            +
                      @purchase = Nfe::Purchase.new(xml[:compra])
         
     | 
| 
      
 118 
     | 
    
         
            +
                    end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                    # Cana de Acucar
         
     | 
| 
      
 121 
     | 
    
         
            +
                    if xml[:cana]
         
     | 
| 
      
 122 
     | 
    
         
            +
                      @cane = Nfe::Cane.new(xml[:cana])
         
     | 
| 
      
 123 
     | 
    
         
            +
                    end
         
     | 
| 
      
 124 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 125 
     | 
    
         
            +
                    file.close
         
     | 
| 
      
 126 
     | 
    
         
            +
                  end
         
     | 
| 
      
 127 
     | 
    
         
            +
                end
         
     | 
| 
      
 128 
     | 
    
         
            +
              end
         
     | 
| 
      
 129 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Nokogiri::XML::Node
         
     | 
| 
      
 2 
     | 
    
         
            +
              def to_hash
         
     | 
| 
      
 3 
     | 
    
         
            +
                return { root.name.to_sym => root.collect_nodes }
         
     | 
| 
      
 4 
     | 
    
         
            +
              rescue Exception => e
         
     | 
| 
      
 5 
     | 
    
         
            +
                { :error => e.to_s }
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
              
         
     | 
| 
      
 8 
     | 
    
         
            +
              def collect_nodes(result_hash = {})
         
     | 
| 
      
 9 
     | 
    
         
            +
                if element?
         
     | 
| 
      
 10 
     | 
    
         
            +
                  hash_attributes = attributes_in_hash
         
     | 
| 
      
 11 
     | 
    
         
            +
                  hash_children = children_in_hash
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  if hash_attributes != {}
         
     | 
| 
      
 14 
     | 
    
         
            +
                    result_hash = hash_attributes.merge(hash_children)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  else
         
     | 
| 
      
 16 
     | 
    
         
            +
                    result_hash = hash_children
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  result_hash
         
     | 
| 
      
 20 
     | 
    
         
            +
                else
         
     | 
| 
      
 21 
     | 
    
         
            +
                  content.to_s
         
     | 
| 
      
 22 
     | 
    
         
            +
                end 
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
              
         
     | 
| 
      
 25 
     | 
    
         
            +
              def attributes_in_hash(node_attributes = {})
         
     | 
| 
      
 26 
     | 
    
         
            +
                attributes.keys.each do |key|
         
     | 
| 
      
 27 
     | 
    
         
            +
                  name = attributes[key].name.to_sym
         
     | 
| 
      
 28 
     | 
    
         
            +
                  node_attributes[name] = attributes[key].value
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                node_attributes
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def children_in_hash(result_hash = {})
         
     | 
| 
      
 35 
     | 
    
         
            +
                children.each do |child|
         
     | 
| 
      
 36 
     | 
    
         
            +
                  result = child.collect_nodes
         
     | 
| 
      
 37 
     | 
    
         
            +
                  name = child.name.to_sym
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  if child.name == "text"
         
     | 
| 
      
 40 
     | 
    
         
            +
                    unless child.next_sibling || child.previous_sibling
         
     | 
| 
      
 41 
     | 
    
         
            +
                      return result
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  elsif result_hash[name]
         
     | 
| 
      
 44 
     | 
    
         
            +
                    if result_hash[name].is_a?(Object::Array)
         
     | 
| 
      
 45 
     | 
    
         
            +
                      result_hash[name] << result
         
     | 
| 
      
 46 
     | 
    
         
            +
                    else
         
     | 
| 
      
 47 
     | 
    
         
            +
                      result_hash[name] = [result_hash[name]] << result
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  else
         
     | 
| 
      
 50 
     | 
    
         
            +
                    if result.class == Hash && result.empty?
         
     | 
| 
      
 51 
     | 
    
         
            +
                      result_hash[name] = nil
         
     | 
| 
      
 52 
     | 
    
         
            +
                    else
         
     | 
| 
      
 53 
     | 
    
         
            +
                      result_hash[name] = result
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                result_hash
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
            end
         
     | 
    
        data/nfe-reader.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # coding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            lib = File.expand_path('../lib', __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'nfe_reader/version'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            Gem::Specification.new do |spec|
         
     | 
| 
      
 7 
     | 
    
         
            +
              spec.name          = "nfe_reader"
         
     | 
| 
      
 8 
     | 
    
         
            +
              spec.version       = Nfe::Reader::VERSION
         
     | 
| 
      
 9 
     | 
    
         
            +
              spec.authors       = ["Eduardo Becker"]
         
     | 
| 
      
 10 
     | 
    
         
            +
              spec.email         = ["edu.bkr@gmail.com"]
         
     | 
| 
      
 11 
     | 
    
         
            +
              spec.summary       = %q{NFe XML Extractor}
         
     | 
| 
      
 12 
     | 
    
         
            +
              spec.description   = %q{NFe XML Extractor}
         
     | 
| 
      
 13 
     | 
    
         
            +
              spec.homepage      = ""
         
     | 
| 
      
 14 
     | 
    
         
            +
              spec.license       = "MIT"
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              spec.files         = `git ls-files -z`.split("\x0")
         
     | 
| 
      
 17 
     | 
    
         
            +
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         
     | 
| 
      
 18 
     | 
    
         
            +
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
      
 19 
     | 
    
         
            +
              spec.require_paths = ["lib"]
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              spec.add_development_dependency "bundler", "~> 1.6"
         
     | 
| 
      
 22 
     | 
    
         
            +
              spec.add_development_dependency "rake"
         
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_dependency "nokogiri"
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,234 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <?xml version="1.0" encoding="UTF-8"?>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">
         
     | 
| 
      
 3 
     | 
    
         
            +
              <NFe xmlns="http://www.portalfiscal.inf.br/nfe">
         
     | 
| 
      
 4 
     | 
    
         
            +
                <infNFe versao="2.00" Id="NFe12300384950081649000148500001000001310002342">
         
     | 
| 
      
 5 
     | 
    
         
            +
                  <ide>
         
     | 
| 
      
 6 
     | 
    
         
            +
                    <cUF>42</cUF>
         
     | 
| 
      
 7 
     | 
    
         
            +
                    <cNF>00000000</cNF>
         
     | 
| 
      
 8 
     | 
    
         
            +
                    <natOp>Venda de Merc. Recebida ou Adq. De Terc.</natOp>
         
     | 
| 
      
 9 
     | 
    
         
            +
                    <indPag>1</indPag>
         
     | 
| 
      
 10 
     | 
    
         
            +
                    <mod>55</mod>
         
     | 
| 
      
 11 
     | 
    
         
            +
                    <serie>1</serie>
         
     | 
| 
      
 12 
     | 
    
         
            +
                    <nNF>1000</nNF>
         
     | 
| 
      
 13 
     | 
    
         
            +
                    <dEmi>2000-01-01</dEmi>
         
     | 
| 
      
 14 
     | 
    
         
            +
                    <dSaiEnt>2000-01-01</dSaiEnt>
         
     | 
| 
      
 15 
     | 
    
         
            +
                    <hSaiEnt>12:00:00</hSaiEnt>
         
     | 
| 
      
 16 
     | 
    
         
            +
                    <tpNF>1</tpNF>
         
     | 
| 
      
 17 
     | 
    
         
            +
                    <cMunFG>4218202</cMunFG>
         
     | 
| 
      
 18 
     | 
    
         
            +
                    <tpImp>1</tpImp>
         
     | 
| 
      
 19 
     | 
    
         
            +
                    <tpEmis>1</tpEmis>
         
     | 
| 
      
 20 
     | 
    
         
            +
                    <cDV>2</cDV>
         
     | 
| 
      
 21 
     | 
    
         
            +
                    <tpAmb>1</tpAmb>
         
     | 
| 
      
 22 
     | 
    
         
            +
                    <finNFe>1</finNFe>
         
     | 
| 
      
 23 
     | 
    
         
            +
                    <procEmi>0</procEmi>
         
     | 
| 
      
 24 
     | 
    
         
            +
                    <verProc>Software 1.0</verProc>
         
     | 
| 
      
 25 
     | 
    
         
            +
                  </ide>
         
     | 
| 
      
 26 
     | 
    
         
            +
                  <emit>
         
     | 
| 
      
 27 
     | 
    
         
            +
                    <CNPJ>10302227000145</CNPJ>
         
     | 
| 
      
 28 
     | 
    
         
            +
                    <xNome>FORNECEDOR</xNome>
         
     | 
| 
      
 29 
     | 
    
         
            +
                    <enderEmit>
         
     | 
| 
      
 30 
     | 
    
         
            +
                      <xLgr>RUA, 51</xLgr>
         
     | 
| 
      
 31 
     | 
    
         
            +
                      <nro>0</nro>
         
     | 
| 
      
 32 
     | 
    
         
            +
                      <xBairro>BAIRRO</xBairro>
         
     | 
| 
      
 33 
     | 
    
         
            +
                      <cMun>4218202</cMun>
         
     | 
| 
      
 34 
     | 
    
         
            +
                      <xMun>TIMBÓ</xMun>
         
     | 
| 
      
 35 
     | 
    
         
            +
                      <UF>SC</UF>
         
     | 
| 
      
 36 
     | 
    
         
            +
                      <CEP>89120000</CEP>
         
     | 
| 
      
 37 
     | 
    
         
            +
                      <cPais>1058</cPais>
         
     | 
| 
      
 38 
     | 
    
         
            +
                      <fone>4755555555</fone>
         
     | 
| 
      
 39 
     | 
    
         
            +
                    </enderEmit>
         
     | 
| 
      
 40 
     | 
    
         
            +
                    <IE>111111111</IE>
         
     | 
| 
      
 41 
     | 
    
         
            +
                    <CRT>1</CRT>
         
     | 
| 
      
 42 
     | 
    
         
            +
                  </emit>
         
     | 
| 
      
 43 
     | 
    
         
            +
                  <dest>
         
     | 
| 
      
 44 
     | 
    
         
            +
                    <CNPJ>35718645000149</CNPJ>
         
     | 
| 
      
 45 
     | 
    
         
            +
                    <xNome>CLIENTE</xNome>
         
     | 
| 
      
 46 
     | 
    
         
            +
                    <enderDest>
         
     | 
| 
      
 47 
     | 
    
         
            +
                      <xLgr>RUA</xLgr>
         
     | 
| 
      
 48 
     | 
    
         
            +
                      <nro>0</nro>
         
     | 
| 
      
 49 
     | 
    
         
            +
                      <xBairro>BAIRRO</xBairro>
         
     | 
| 
      
 50 
     | 
    
         
            +
                      <cMun>4214805</cMun>
         
     | 
| 
      
 51 
     | 
    
         
            +
                      <xMun>RIO DO SUL</xMun>
         
     | 
| 
      
 52 
     | 
    
         
            +
                      <UF>SC</UF>
         
     | 
| 
      
 53 
     | 
    
         
            +
                      <CEP>89160000</CEP>
         
     | 
| 
      
 54 
     | 
    
         
            +
                      <cPais>1058</cPais>
         
     | 
| 
      
 55 
     | 
    
         
            +
                      <xPais>BRASIL</xPais>
         
     | 
| 
      
 56 
     | 
    
         
            +
                      <fone>4700000000</fone>
         
     | 
| 
      
 57 
     | 
    
         
            +
                    </enderDest>
         
     | 
| 
      
 58 
     | 
    
         
            +
                    <IE>252322746</IE>
         
     | 
| 
      
 59 
     | 
    
         
            +
                    <email>email@cliente.com.br</email>
         
     | 
| 
      
 60 
     | 
    
         
            +
                  </dest>
         
     | 
| 
      
 61 
     | 
    
         
            +
                  <det nItem="1">
         
     | 
| 
      
 62 
     | 
    
         
            +
                    <prod>
         
     | 
| 
      
 63 
     | 
    
         
            +
                      <cProd>000001</cProd>
         
     | 
| 
      
 64 
     | 
    
         
            +
                      <cEAN />
         
     | 
| 
      
 65 
     | 
    
         
            +
                      <xProd>Produto 1</xProd>
         
     | 
| 
      
 66 
     | 
    
         
            +
                      <NCM>00000000</NCM>
         
     | 
| 
      
 67 
     | 
    
         
            +
                      <CFOP>5102</CFOP>
         
     | 
| 
      
 68 
     | 
    
         
            +
                      <uCom>Pr</uCom>
         
     | 
| 
      
 69 
     | 
    
         
            +
                      <qCom>2.0000</qCom>
         
     | 
| 
      
 70 
     | 
    
         
            +
                      <vUnCom>34.7000000000</vUnCom>
         
     | 
| 
      
 71 
     | 
    
         
            +
                      <vProd>69.40</vProd>
         
     | 
| 
      
 72 
     | 
    
         
            +
                      <cEANTrib />
         
     | 
| 
      
 73 
     | 
    
         
            +
                      <uTrib>Pr</uTrib>
         
     | 
| 
      
 74 
     | 
    
         
            +
                      <qTrib>2.0000</qTrib>
         
     | 
| 
      
 75 
     | 
    
         
            +
                      <vUnTrib>34.7000000000</vUnTrib>
         
     | 
| 
      
 76 
     | 
    
         
            +
                      <indTot>1</indTot>
         
     | 
| 
      
 77 
     | 
    
         
            +
                    </prod>
         
     | 
| 
      
 78 
     | 
    
         
            +
                    <imposto>
         
     | 
| 
      
 79 
     | 
    
         
            +
                      <ICMS>
         
     | 
| 
      
 80 
     | 
    
         
            +
                        <ICMSSN102>
         
     | 
| 
      
 81 
     | 
    
         
            +
                          <orig>0</orig>
         
     | 
| 
      
 82 
     | 
    
         
            +
                          <CSOSN>102</CSOSN>
         
     | 
| 
      
 83 
     | 
    
         
            +
                        </ICMSSN102>
         
     | 
| 
      
 84 
     | 
    
         
            +
                      </ICMS>
         
     | 
| 
      
 85 
     | 
    
         
            +
                      <PIS>
         
     | 
| 
      
 86 
     | 
    
         
            +
                        <PISOutr>
         
     | 
| 
      
 87 
     | 
    
         
            +
                          <CST>99</CST>
         
     | 
| 
      
 88 
     | 
    
         
            +
                          <vBC>0.00</vBC>
         
     | 
| 
      
 89 
     | 
    
         
            +
                          <pPIS>0.00</pPIS>
         
     | 
| 
      
 90 
     | 
    
         
            +
                          <vPIS>0.00</vPIS>
         
     | 
| 
      
 91 
     | 
    
         
            +
                        </PISOutr>
         
     | 
| 
      
 92 
     | 
    
         
            +
                      </PIS>
         
     | 
| 
      
 93 
     | 
    
         
            +
                      <COFINS>
         
     | 
| 
      
 94 
     | 
    
         
            +
                        <COFINSOutr>
         
     | 
| 
      
 95 
     | 
    
         
            +
                          <CST>99</CST>
         
     | 
| 
      
 96 
     | 
    
         
            +
                          <vBC>0.00</vBC>
         
     | 
| 
      
 97 
     | 
    
         
            +
                          <pCOFINS>0.00</pCOFINS>
         
     | 
| 
      
 98 
     | 
    
         
            +
                          <vCOFINS>0.00</vCOFINS>
         
     | 
| 
      
 99 
     | 
    
         
            +
                        </COFINSOutr>
         
     | 
| 
      
 100 
     | 
    
         
            +
                      </COFINS>
         
     | 
| 
      
 101 
     | 
    
         
            +
                    </imposto>
         
     | 
| 
      
 102 
     | 
    
         
            +
                  </det>
         
     | 
| 
      
 103 
     | 
    
         
            +
                  <det nItem="2">
         
     | 
| 
      
 104 
     | 
    
         
            +
                    <prod>
         
     | 
| 
      
 105 
     | 
    
         
            +
                      <cProd>000002</cProd>
         
     | 
| 
      
 106 
     | 
    
         
            +
                      <cEAN />
         
     | 
| 
      
 107 
     | 
    
         
            +
                      <xProd>Produto 2</xProd>
         
     | 
| 
      
 108 
     | 
    
         
            +
                      <NCM>00000000</NCM>
         
     | 
| 
      
 109 
     | 
    
         
            +
                      <CFOP>5102</CFOP>
         
     | 
| 
      
 110 
     | 
    
         
            +
                      <uCom>Pr</uCom>
         
     | 
| 
      
 111 
     | 
    
         
            +
                      <qCom>2.0000</qCom>
         
     | 
| 
      
 112 
     | 
    
         
            +
                      <vUnCom>34.7000000000</vUnCom>
         
     | 
| 
      
 113 
     | 
    
         
            +
                      <vProd>c</vProd>
         
     | 
| 
      
 114 
     | 
    
         
            +
                      <cEANTrib />
         
     | 
| 
      
 115 
     | 
    
         
            +
                      <uTrib>Pr</uTrib>
         
     | 
| 
      
 116 
     | 
    
         
            +
                      <qTrib>2.0000</qTrib>
         
     | 
| 
      
 117 
     | 
    
         
            +
                      <vUnTrib>34.7000000000</vUnTrib>
         
     | 
| 
      
 118 
     | 
    
         
            +
                      <indTot>1</indTot>
         
     | 
| 
      
 119 
     | 
    
         
            +
                    </prod>
         
     | 
| 
      
 120 
     | 
    
         
            +
                    <imposto>
         
     | 
| 
      
 121 
     | 
    
         
            +
                      <ICMS>
         
     | 
| 
      
 122 
     | 
    
         
            +
                        <ICMSSN102>
         
     | 
| 
      
 123 
     | 
    
         
            +
                          <orig>0</orig>
         
     | 
| 
      
 124 
     | 
    
         
            +
                          <CSOSN>102</CSOSN>
         
     | 
| 
      
 125 
     | 
    
         
            +
                        </ICMSSN102>
         
     | 
| 
      
 126 
     | 
    
         
            +
                      </ICMS>
         
     | 
| 
      
 127 
     | 
    
         
            +
                      <PIS>
         
     | 
| 
      
 128 
     | 
    
         
            +
                        <PISOutr>
         
     | 
| 
      
 129 
     | 
    
         
            +
                          <CST>99</CST>
         
     | 
| 
      
 130 
     | 
    
         
            +
                          <vBC>0.00</vBC>
         
     | 
| 
      
 131 
     | 
    
         
            +
                          <pPIS>0.00</pPIS>
         
     | 
| 
      
 132 
     | 
    
         
            +
                          <vPIS>0.00</vPIS>
         
     | 
| 
      
 133 
     | 
    
         
            +
                        </PISOutr>
         
     | 
| 
      
 134 
     | 
    
         
            +
                      </PIS>
         
     | 
| 
      
 135 
     | 
    
         
            +
                      <COFINS>
         
     | 
| 
      
 136 
     | 
    
         
            +
                        <COFINSOutr>
         
     | 
| 
      
 137 
     | 
    
         
            +
                          <CST>99</CST>
         
     | 
| 
      
 138 
     | 
    
         
            +
                          <vBC>0.00</vBC>
         
     | 
| 
      
 139 
     | 
    
         
            +
                          <pCOFINS>0.00</pCOFINS>
         
     | 
| 
      
 140 
     | 
    
         
            +
                          <vCOFINS>0.00</vCOFINS>
         
     | 
| 
      
 141 
     | 
    
         
            +
                        </COFINSOutr>
         
     | 
| 
      
 142 
     | 
    
         
            +
                      </COFINS>
         
     | 
| 
      
 143 
     | 
    
         
            +
                    </imposto>
         
     | 
| 
      
 144 
     | 
    
         
            +
                  </det>
         
     | 
| 
      
 145 
     | 
    
         
            +
                  <total>
         
     | 
| 
      
 146 
     | 
    
         
            +
                    <ICMSTot>
         
     | 
| 
      
 147 
     | 
    
         
            +
                      <vBC>0.00</vBC>
         
     | 
| 
      
 148 
     | 
    
         
            +
                      <vICMS>0.00</vICMS>
         
     | 
| 
      
 149 
     | 
    
         
            +
                      <vBCST>0.00</vBCST>
         
     | 
| 
      
 150 
     | 
    
         
            +
                      <vST>0.00</vST>
         
     | 
| 
      
 151 
     | 
    
         
            +
                      <vProd>138.80</vProd>
         
     | 
| 
      
 152 
     | 
    
         
            +
                      <vFrete>0.00</vFrete>
         
     | 
| 
      
 153 
     | 
    
         
            +
                      <vSeg>0.00</vSeg>
         
     | 
| 
      
 154 
     | 
    
         
            +
                      <vDesc>0.00</vDesc>
         
     | 
| 
      
 155 
     | 
    
         
            +
                      <vII>0.00</vII>
         
     | 
| 
      
 156 
     | 
    
         
            +
                      <vIPI>0.00</vIPI>
         
     | 
| 
      
 157 
     | 
    
         
            +
                      <vPIS>0.00</vPIS>
         
     | 
| 
      
 158 
     | 
    
         
            +
                      <vCOFINS>0.00</vCOFINS>
         
     | 
| 
      
 159 
     | 
    
         
            +
                      <vOutro>0.00</vOutro>
         
     | 
| 
      
 160 
     | 
    
         
            +
                      <vNF>138.80</vNF>
         
     | 
| 
      
 161 
     | 
    
         
            +
                    </ICMSTot>
         
     | 
| 
      
 162 
     | 
    
         
            +
                    <retTrib />
         
     | 
| 
      
 163 
     | 
    
         
            +
                  </total>
         
     | 
| 
      
 164 
     | 
    
         
            +
                  <transp>
         
     | 
| 
      
 165 
     | 
    
         
            +
                    <modFrete>0</modFrete>
         
     | 
| 
      
 166 
     | 
    
         
            +
                    <transporta>
         
     | 
| 
      
 167 
     | 
    
         
            +
                      <CNPJ>74793624000140</CNPJ>
         
     | 
| 
      
 168 
     | 
    
         
            +
                      <xNome>TRANSPORTADORA</xNome>
         
     | 
| 
      
 169 
     | 
    
         
            +
                      <IE>111111111</IE>
         
     | 
| 
      
 170 
     | 
    
         
            +
                      <xEnder>RUA</xEnder>
         
     | 
| 
      
 171 
     | 
    
         
            +
                      <xMun>TIMBÓ</xMun>
         
     | 
| 
      
 172 
     | 
    
         
            +
                      <UF>SC</UF>
         
     | 
| 
      
 173 
     | 
    
         
            +
                    </transporta>
         
     | 
| 
      
 174 
     | 
    
         
            +
                    <veicTransp>
         
     | 
| 
      
 175 
     | 
    
         
            +
                      <placa>AAA0000</placa>
         
     | 
| 
      
 176 
     | 
    
         
            +
                      <UF>SC</UF>
         
     | 
| 
      
 177 
     | 
    
         
            +
                    </veicTransp>
         
     | 
| 
      
 178 
     | 
    
         
            +
                  </transp>
         
     | 
| 
      
 179 
     | 
    
         
            +
                  <cobr>
         
     | 
| 
      
 180 
     | 
    
         
            +
                    <fat>
         
     | 
| 
      
 181 
     | 
    
         
            +
                      <nFat>0001</nFat>
         
     | 
| 
      
 182 
     | 
    
         
            +
                      <vOrig>138.80</vOrig>
         
     | 
| 
      
 183 
     | 
    
         
            +
                      <vLiq>138.80.17</vLiq>
         
     | 
| 
      
 184 
     | 
    
         
            +
                    </fat>
         
     | 
| 
      
 185 
     | 
    
         
            +
                    <dup>
         
     | 
| 
      
 186 
     | 
    
         
            +
                      <nDup>001</nDup>
         
     | 
| 
      
 187 
     | 
    
         
            +
                      <dVenc>2000-02-01</dVenc>
         
     | 
| 
      
 188 
     | 
    
         
            +
                      <vDup>138.80</vDup>
         
     | 
| 
      
 189 
     | 
    
         
            +
                    </dup>
         
     | 
| 
      
 190 
     | 
    
         
            +
                  </cobr>
         
     | 
| 
      
 191 
     | 
    
         
            +
                  <infAdic>
         
     | 
| 
      
 192 
     | 
    
         
            +
                    <infAdFisco>
         
     | 
| 
      
 193 
     | 
    
         
            +
                      INFORMACAO ADICIONAL
         
     | 
| 
      
 194 
     | 
    
         
            +
                    </infAdFisco>
         
     | 
| 
      
 195 
     | 
    
         
            +
                  </infAdic>
         
     | 
| 
      
 196 
     | 
    
         
            +
                </infNFe>
         
     | 
| 
      
 197 
     | 
    
         
            +
                <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
         
     | 
| 
      
 198 
     | 
    
         
            +
                  <SignedInfo>
         
     | 
| 
      
 199 
     | 
    
         
            +
                    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
         
     | 
| 
      
 200 
     | 
    
         
            +
                    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
         
     | 
| 
      
 201 
     | 
    
         
            +
                    <Reference URI="#NFe12300384950081649000148500001000001310002342">
         
     | 
| 
      
 202 
     | 
    
         
            +
                      <Transforms>
         
     | 
| 
      
 203 
     | 
    
         
            +
                        <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
         
     | 
| 
      
 204 
     | 
    
         
            +
                        <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
         
     | 
| 
      
 205 
     | 
    
         
            +
                      </Transforms>
         
     | 
| 
      
 206 
     | 
    
         
            +
                      <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
         
     | 
| 
      
 207 
     | 
    
         
            +
                      <DigestValue>ait7e07Xf0nkqcQTCIcOIVVZCrw=</DigestValue>
         
     | 
| 
      
 208 
     | 
    
         
            +
                    </Reference>
         
     | 
| 
      
 209 
     | 
    
         
            +
                  </SignedInfo>
         
     | 
| 
      
 210 
     | 
    
         
            +
                  <SignatureValue>
         
     | 
| 
      
 211 
     | 
    
         
            +
                    rDoxl0n4MhfLwAJq4pmfnb4Il+USPndfz0v+6vxyQhZEORlXoBgst7GneJ550M9gBDHuKlitn8TE28wE7bPS3ttAvcEtqHfN6iIiBYVXR3RqoRVFOEVPhxZwYAs4M3rlzYiCMBzQ8iJPAv2+2OORlJ5foYCDmIHOCvOFc/aFOms2fHoR8O/uUXfHB0ElN55jorqLZom2MSgnMwd0iblKVqndnEMnCM2zvpm4lL9HGFm+lkzWvjy96zO/HKkZ5FBWWdDsUThevpUVOHRHQ48MqsExvUjiFIMZeZDRS7Y/RS/cVGNknuoZ8x3NX/RtMkRsTOuQ4OnkmcU2nvturCXPdg==
         
     | 
| 
      
 212 
     | 
    
         
            +
                  </SignatureValue>
         
     | 
| 
      
 213 
     | 
    
         
            +
                  <KeyInfo>
         
     | 
| 
      
 214 
     | 
    
         
            +
                    <X509Data>
         
     | 
| 
      
 215 
     | 
    
         
            +
                      <X509Certificate>
         
     | 
| 
      
 216 
     | 
    
         
            +
                        MIIIPjCCBiagAwIBAgIQdamExIOY/iVppDltpM5cDDANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYDVQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4XDTEzMDcwNTAwMDAwMFoXDTE0MDcwNDIzNTk1OVowgecxCzAJBgNVBAYTAkJSMRMwEQYDVQQKFApJQ1AtQnJhc2lsMQswCQYDVQQIEwJTQzEOMAwGA1UEBxQFVElNQk8xNjA0BgNVBAsULVNlY3JldGFyaWEgZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEWMBQGA1UECxQNUkZCIGUtQ05QSiBBMTEiMCAGA1UECxQZQXV0ZW50aWNhZG8gcG9yIEFSIENOQiBDRjEyMDAGA1UEAxMpUkVOQVRBIFJPRURFUiBKQUNPQlNFTiBFUFA6MTgxOTk1OTkwMDAxMDgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0n+JyIw7aHE0ZBVQOU+bpSv7Rvd5Iyd9buSYcBd8Qa5EYdWs5I7koUT0fdawh7y54Ud2GZl6TkY8hh61jelxkV+VTJ+okcN6kDeAQ5myGITmwLhly81rtodtdXfwe345IChIx2iMNI4sAJ2R4HNInmVpYBmItqcGCVv95GSQxbo/dRkOOEXkffQa93liFTQqmb6oKv8WeEmOZPcLZ4iVh6J3gdrK8ju4jLw310fjOqrel4yArhKk0ehkbJjvF9J4ZvWj1Ln2+1QgF3PpDMFPU8NqOF0jWi6BQ7oJdC4sLkGenyQ8IUhQkZ0v2UGjQogk1NcTLBNlZI7q3vwh1aSHXAgMBAAGjggNSMIIDTjCBtwYDVR0RBIGvMIGsoD0GBWBMAQMEoDQEMjEyMDExOTM3MDQ5NjAzMzU5MDQwMDAwMDAwMDAwMDAwMDAwMDAwMjQ4NzExMFNTUFNDoCEGBWBMAQMCoBgEFlJFTkFUQSBST0VERVIgSkFDT0JTRU6gGQYFYEwBAwOgEAQOMTgxOTk1OTkwMDAxMDigFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwgRRtYXJjZWxvQGtsdWtlLmNvbS5icjAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFC6R6tZt5bJZgtw4hSl2NBZWPNA+MA4GA1UdDwEB/wQEAwIF4DB/BgNVHSAEeDB2MHQGBmBMAQIBDDBqMGgGCCsGAQUFBwIBFlxodHRwOi8vaWNwLWJyYXNpbC5jZXJ0aXNpZ24uY29tLmJyL3JlcG9zaXRvcmlvL2RwYy9BQ19DZXJ0aXNpZ25fUkZCL0RQQ19BQ19DZXJ0aXNpZ25fUkZCLnBkZjCCARYGA1UdHwSCAQ0wggEJMFegVaBThlFodHRwOi8vaWNwLWJyYXNpbC5jZXJ0aXNpZ24uY29tLmJyL3JlcG9zaXRvcmlvL2xjci9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5jcmwwVqBUoFKGUGh0dHA6Ly9pY3AtYnJhc2lsLm91dHJhbGNyLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25SRkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vcmVwb3NpdG9yaW8uaWNwYnJhc2lsLmdvdi5ici9sY3IvQ2VydGlzaWduL0FDQ2VydGlzaWduUkZCRzQvTGF0ZXN0Q1JMLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwgZsGCCsGAQUFBwEBBIGOMIGLMF8GCCsGAQUFBzAChlNodHRwOi8vaWNwLWJyYXNpbC5jZXJ0aXNpZ24uY29tLmJyL3JlcG9zaXRvcmlvL2NlcnRpZmljYWRvcy9BQ19DZXJ0aXNpZ25fUkZCX0c0LnA3YzAoBggrBgEFBQcwAYYcaHR0cDovL29jc3AuY2VydGlzaWduLmNvbS5icjANBgkqhkiG9w0BAQsFAAOCAgEAQh6TbzE+sevT7T3/wy7oKlhoiNy/Asz1mUXK2pc/ClrZewE4UtW2enjFzQln0Gpy8/y4+rZKtnv0iuLAQg8NwrhCoA//JbUsaD1a9XMH7E/vDKAjghLBZJoBq5Z10SxW/9V+JRaUbCb3AiFWKoyceMjWfXxTqgnXQZU9HeO72rqWEV7oA19IpW3c/mKbTNDAt5JyvcD3qCS7r4KyxBuJ2KfHFzhMa6FODZPC0v21+TdabkQLrEQT8cGp9YNBq0Hu4IXKT6eMPSZq0PTqUB+heN9b+Hv7WEvTIZycGJ/ooz2auJjsiTnVWGDU7cMKriZk06C1x1xFs0rpcCvLJPnOUDFqludijrVsCK8mpPv6xQv/73mN/HQQf/eVF+9NaQ6mkdn0MyVdqnxJmiH5DV5DT+VdtYYBT1VGQYAZjh/jO3eUO6sjwabKyrb+xr1SP74dp70vt6d26s+X5h2HWbSdR3X2eQNT/BF/ZSV5VY0dad3pQPW/VJHfxUBJ4ZP4+ySC/D4VH4U+Pkux+z8wlDorGrzzC/oOYtt3T1ETvEXo4iPIZ7dwVkCv8Rs5IGbTGrJoRnaV/PGHLIlrFaKfOtat51n4HX+ebAFK+ZvabbHNsnwpnZJbuNBV/P7BLttNV0M2BC/WNtTsxor0mTho2Kiz5VOqUpqnyBWqfJApMFJnuF0=
         
     | 
| 
      
 217 
     | 
    
         
            +
                      </X509Certificate>
         
     | 
| 
      
 218 
     | 
    
         
            +
                    </X509Data>
         
     | 
| 
      
 219 
     | 
    
         
            +
                  </KeyInfo>
         
     | 
| 
      
 220 
     | 
    
         
            +
                </Signature>
         
     | 
| 
      
 221 
     | 
    
         
            +
              </NFe>
         
     | 
| 
      
 222 
     | 
    
         
            +
              <protNFe versao="2.00">
         
     | 
| 
      
 223 
     | 
    
         
            +
                <infProt Id="ID100000481241129" xmlns="http://www.portalfiscal.inf.br/nfe">
         
     | 
| 
      
 224 
     | 
    
         
            +
                  <tpAmb>1</tpAmb>
         
     | 
| 
      
 225 
     | 
    
         
            +
                  <verAplic>SVRS2000101120000</verAplic>
         
     | 
| 
      
 226 
     | 
    
         
            +
                  <chNFe>12300384950081649000148500001000001310002342</chNFe>
         
     | 
| 
      
 227 
     | 
    
         
            +
                  <dhRecbto>2000-01-01T12:00:00</dhRecbto>
         
     | 
| 
      
 228 
     | 
    
         
            +
                  <nProt>100000481241129</nProt>
         
     | 
| 
      
 229 
     | 
    
         
            +
                  <digVal>aklOQ0184NjoeaqCIRT01927Crf=</digVal>
         
     | 
| 
      
 230 
     | 
    
         
            +
                  <cStat>100</cStat>
         
     | 
| 
      
 231 
     | 
    
         
            +
                  <xMotivo>Autorizado o uso da NF-e</xMotivo>
         
     | 
| 
      
 232 
     | 
    
         
            +
                </infProt>
         
     | 
| 
      
 233 
     | 
    
         
            +
              </protNFe>
         
     | 
| 
      
 234 
     | 
    
         
            +
            </nfeProc>
         
     |