focus_nfe 1.0.0
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/.git-hooks/pre_push/steep.rb +18 -0
- data/.git-hooks/pre_push/yard_doc.rb +18 -0
- data/.gitattributes +1 -0
- data/.overcommit.yml +69 -0
- data/.rspec +3 -0
- data/.yardopts +11 -0
- data/CHANGELOG.md +77 -0
- data/CLAUDE.md +118 -0
- data/CODE_OF_CONDUCT.md +10 -0
- data/LICENSE.txt +21 -0
- data/README.md +348 -0
- data/Rakefile +105 -0
- data/data/schemas/schema_cte.json +2793 -0
- data/data/schemas/schema_cte_os.json +1335 -0
- data/data/schemas/schema_cte_os_transporte_rodoviario.json +109 -0
- data/data/schemas/schema_cte_transporte_aereo.json +115 -0
- data/data/schemas/schema_cte_transporte_aquaviario.json +174 -0
- data/data/schemas/schema_cte_transporte_dutoviario.json +65 -0
- data/data/schemas/schema_cte_transporte_ferroviario.json +144 -0
- data/data/schemas/schema_cte_transporte_multimodal.json +45 -0
- data/data/schemas/schema_cte_transporte_rodoviario.json +78 -0
- data/data/schemas/schema_dce.json +549 -0
- data/data/schemas/schema_mdfe.json +1102 -0
- data/data/schemas/schema_mdfe_transporte_aereo.json +44 -0
- data/data/schemas/schema_mdfe_transporte_aquaviario.json +209 -0
- data/data/schemas/schema_mdfe_transporte_ferroviario.json +99 -0
- data/data/schemas/schema_mdfe_transporte_rodoviario.json +628 -0
- data/data/schemas/schema_nfcom.json +1859 -0
- data/data/schemas/schema_nfe.json +4750 -0
- data/data/schemas/schema_nfe_forma_pagamento.json +97 -0
- data/data/schemas/schema_nfe_item.json +2574 -0
- data/data/schemas/schema_nfgas.json +2316 -0
- data/data/schemas/schema_nfse_nacional.json +1847 -0
- data/data/schemas/schema_nfse_recebida.json +548 -0
- data/lib/focus_nfe/client.rb +162 -0
- data/lib/focus_nfe/configuration.rb +104 -0
- data/lib/focus_nfe/errors.rb +123 -0
- data/lib/focus_nfe/esquemas/campo.rb +171 -0
- data/lib/focus_nfe/esquemas/catalogo.rb +34 -0
- data/lib/focus_nfe/esquemas/decimal.rb +66 -0
- data/lib/focus_nfe/esquemas/esquema.rb +72 -0
- data/lib/focus_nfe/esquemas/validador.rb +87 -0
- data/lib/focus_nfe/http/adapter.rb +25 -0
- data/lib/focus_nfe/http/adapters/net_http.rb +99 -0
- data/lib/focus_nfe/http/authentication.rb +23 -0
- data/lib/focus_nfe/http/connection.rb +118 -0
- data/lib/focus_nfe/http/logging.rb +100 -0
- data/lib/focus_nfe/http/response.rb +75 -0
- data/lib/focus_nfe/modelos/documento.rb +113 -0
- data/lib/focus_nfe/modelos/inutilizacao.rb +75 -0
- data/lib/focus_nfe/modelos/pagina.rb +54 -0
- data/lib/focus_nfe/recursos/backups.rb +17 -0
- data/lib/focus_nfe/recursos/base.rb +91 -0
- data/lib/focus_nfe/recursos/ceps.rb +16 -0
- data/lib/focus_nfe/recursos/cfops.rb +16 -0
- data/lib/focus_nfe/recursos/cnaes.rb +16 -0
- data/lib/focus_nfe/recursos/cnpjs.rb +13 -0
- data/lib/focus_nfe/recursos/concerns/baixavel.rb +41 -0
- data/lib/focus_nfe/recursos/concerns/baixavel_eventos.rb +34 -0
- data/lib/focus_nfe/recursos/concerns/cancelavel.rb +25 -0
- data/lib/focus_nfe/recursos/concerns/conciliavel.rb +66 -0
- data/lib/focus_nfe/recursos/concerns/consultavel.rb +26 -0
- data/lib/focus_nfe/recursos/concerns/corrigivel.rb +45 -0
- data/lib/focus_nfe/recursos/concerns/corrigivel_cte.rb +60 -0
- data/lib/focus_nfe/recursos/concerns/emitivel.rb +51 -0
- data/lib/focus_nfe/recursos/concerns/enviavel.rb +40 -0
- data/lib/focus_nfe/recursos/concerns/eventavel.rb +46 -0
- data/lib/focus_nfe/recursos/concerns/inutilizavel.rb +96 -0
- data/lib/focus_nfe/recursos/concerns/listavel.rb +22 -0
- data/lib/focus_nfe/recursos/concerns/localizavel.rb +22 -0
- data/lib/focus_nfe/recursos/concerns/notificavel.rb +23 -0
- data/lib/focus_nfe/recursos/concerns/removivel.rb +20 -0
- data/lib/focus_nfe/recursos/concerns/visualizavel.rb +28 -0
- data/lib/focus_nfe/recursos/cte.rb +35 -0
- data/lib/focus_nfe/recursos/cte_os.rb +29 -0
- data/lib/focus_nfe/recursos/ctes_recebidas.rb +38 -0
- data/lib/focus_nfe/recursos/dce.rb +16 -0
- data/lib/focus_nfe/recursos/emails_bloqueados.rb +31 -0
- data/lib/focus_nfe/recursos/empresas.rb +35 -0
- data/lib/focus_nfe/recursos/mdfe.rb +78 -0
- data/lib/focus_nfe/recursos/municipios.rb +60 -0
- data/lib/focus_nfe/recursos/ncms.rb +16 -0
- data/lib/focus_nfe/recursos/nfce.rb +19 -0
- data/lib/focus_nfe/recursos/nfcom.rb +16 -0
- data/lib/focus_nfe/recursos/nfe.rb +106 -0
- data/lib/focus_nfe/recursos/nfes_recebidas.rb +56 -0
- data/lib/focus_nfe/recursos/nfgas.rb +16 -0
- data/lib/focus_nfe/recursos/nfse.rb +18 -0
- data/lib/focus_nfe/recursos/nfse_nacional.rb +16 -0
- data/lib/focus_nfe/recursos/nfses_nacionais_recebidas.rb +21 -0
- data/lib/focus_nfe/recursos/webhooks.rb +22 -0
- data/lib/focus_nfe/version.rb +6 -0
- data/lib/focus_nfe/webhook.rb +68 -0
- data/lib/focus_nfe.rb +124 -0
- data/sig/focus_nfe/client.rbs +38 -0
- data/sig/focus_nfe/configuration.rbs +29 -0
- data/sig/focus_nfe/errors.rbs +59 -0
- data/sig/focus_nfe/esquemas/campo.rbs +47 -0
- data/sig/focus_nfe/esquemas/catalogo.rbs +8 -0
- data/sig/focus_nfe/esquemas/decimal.rbs +25 -0
- data/sig/focus_nfe/esquemas/esquema.rbs +30 -0
- data/sig/focus_nfe/esquemas/validador.rbs +20 -0
- data/sig/focus_nfe/http/adapter.rbs +7 -0
- data/sig/focus_nfe/http/adapters/net_http.rbs +25 -0
- data/sig/focus_nfe/http/authentication.rbs +9 -0
- data/sig/focus_nfe/http/connection.rbs +32 -0
- data/sig/focus_nfe/http/logging.rbs +30 -0
- data/sig/focus_nfe/http/response.rbs +28 -0
- data/sig/focus_nfe/modelos/documento.rbs +34 -0
- data/sig/focus_nfe/modelos/inutilizacao.rbs +24 -0
- data/sig/focus_nfe/modelos/pagina.rbs +21 -0
- data/sig/focus_nfe/recursos/backups.rbs +7 -0
- data/sig/focus_nfe/recursos/base.rbs +25 -0
- data/sig/focus_nfe/recursos/ceps.rbs +10 -0
- data/sig/focus_nfe/recursos/cfops.rbs +10 -0
- data/sig/focus_nfe/recursos/cnaes.rbs +10 -0
- data/sig/focus_nfe/recursos/cnpjs.rbs +7 -0
- data/sig/focus_nfe/recursos/concerns/baixavel.rbs +12 -0
- data/sig/focus_nfe/recursos/concerns/baixavel_eventos.rbs +14 -0
- data/sig/focus_nfe/recursos/concerns/cancelavel.rbs +9 -0
- data/sig/focus_nfe/recursos/concerns/conciliavel.rbs +15 -0
- data/sig/focus_nfe/recursos/concerns/consultavel.rbs +9 -0
- data/sig/focus_nfe/recursos/concerns/corrigivel.rbs +15 -0
- data/sig/focus_nfe/recursos/concerns/corrigivel_cte.rbs +17 -0
- data/sig/focus_nfe/recursos/concerns/emitivel.rbs +14 -0
- data/sig/focus_nfe/recursos/concerns/enviavel.rbs +15 -0
- data/sig/focus_nfe/recursos/concerns/eventavel.rbs +12 -0
- data/sig/focus_nfe/recursos/concerns/inutilizavel.rbs +20 -0
- data/sig/focus_nfe/recursos/concerns/listavel.rbs +9 -0
- data/sig/focus_nfe/recursos/concerns/localizavel.rbs +9 -0
- data/sig/focus_nfe/recursos/concerns/notificavel.rbs +9 -0
- data/sig/focus_nfe/recursos/concerns/removivel.rbs +9 -0
- data/sig/focus_nfe/recursos/concerns/visualizavel.rbs +9 -0
- data/sig/focus_nfe/recursos/cte.rbs +17 -0
- data/sig/focus_nfe/recursos/cte_os.rbs +17 -0
- data/sig/focus_nfe/recursos/ctes_recebidas.rbs +14 -0
- data/sig/focus_nfe/recursos/dce.rbs +10 -0
- data/sig/focus_nfe/recursos/emails_bloqueados.rbs +12 -0
- data/sig/focus_nfe/recursos/empresas.rbs +12 -0
- data/sig/focus_nfe/recursos/mdfe.rbs +21 -0
- data/sig/focus_nfe/recursos/municipios.rbs +19 -0
- data/sig/focus_nfe/recursos/ncms.rbs +10 -0
- data/sig/focus_nfe/recursos/nfce.rbs +12 -0
- data/sig/focus_nfe/recursos/nfcom.rbs +10 -0
- data/sig/focus_nfe/recursos/nfe.rbs +23 -0
- data/sig/focus_nfe/recursos/nfes_recebidas.rbs +16 -0
- data/sig/focus_nfe/recursos/nfgas.rbs +10 -0
- data/sig/focus_nfe/recursos/nfse.rbs +11 -0
- data/sig/focus_nfe/recursos/nfse_nacional.rbs +10 -0
- data/sig/focus_nfe/recursos/nfses_nacionais_recebidas.rbs +11 -0
- data/sig/focus_nfe/recursos/webhooks.rbs +11 -0
- data/sig/focus_nfe/webhook.rbs +11 -0
- data/sig/focus_nfe.rbs +10 -0
- data/spec/focus_nfe/client_spec.rb +208 -0
- data/spec/focus_nfe/configuration_spec.rb +121 -0
- data/spec/focus_nfe/errors_mapping_spec.rb +68 -0
- data/spec/focus_nfe/errors_spec.rb +107 -0
- data/spec/focus_nfe/esquemas/campo_spec.rb +291 -0
- data/spec/focus_nfe/esquemas/decimal_spec.rb +54 -0
- data/spec/focus_nfe/esquemas/esquema_spec.rb +73 -0
- data/spec/focus_nfe/esquemas/validador_spec.rb +167 -0
- data/spec/focus_nfe/esquemas_spec.rb +42 -0
- data/spec/focus_nfe/http/adapter_spec.rb +8 -0
- data/spec/focus_nfe/http/adapters/net_http_spec.rb +181 -0
- data/spec/focus_nfe/http/authentication_spec.rb +24 -0
- data/spec/focus_nfe/http/connection_spec.rb +255 -0
- data/spec/focus_nfe/http/logging_spec.rb +83 -0
- data/spec/focus_nfe/http/response_spec.rb +161 -0
- data/spec/focus_nfe/modelos/documento_spec.rb +150 -0
- data/spec/focus_nfe/modelos/inutilizacao_spec.rb +91 -0
- data/spec/focus_nfe/modelos/pagina_spec.rb +77 -0
- data/spec/focus_nfe/recursos/backups_spec.rb +29 -0
- data/spec/focus_nfe/recursos/base_spec.rb +56 -0
- data/spec/focus_nfe/recursos/ceps_spec.rb +16 -0
- data/spec/focus_nfe/recursos/cfops_spec.rb +16 -0
- data/spec/focus_nfe/recursos/cnaes_spec.rb +20 -0
- data/spec/focus_nfe/recursos/cnpjs_spec.rb +11 -0
- data/spec/focus_nfe/recursos/concerns/emitivel_validacao_spec.rb +158 -0
- data/spec/focus_nfe/recursos/cte_os_spec.rb +9 -0
- data/spec/focus_nfe/recursos/cte_spec.rb +9 -0
- data/spec/focus_nfe/recursos/ctes_recebidas_spec.rb +56 -0
- data/spec/focus_nfe/recursos/dce_spec.rb +8 -0
- data/spec/focus_nfe/recursos/emails_bloqueados_spec.rb +29 -0
- data/spec/focus_nfe/recursos/empresas_spec.rb +45 -0
- data/spec/focus_nfe/recursos/mdfe_spec.rb +100 -0
- data/spec/focus_nfe/recursos/municipios_spec.rb +58 -0
- data/spec/focus_nfe/recursos/ncms_spec.rb +16 -0
- data/spec/focus_nfe/recursos/nfce_spec.rb +10 -0
- data/spec/focus_nfe/recursos/nfcom_spec.rb +8 -0
- data/spec/focus_nfe/recursos/nfe_spec.rb +262 -0
- data/spec/focus_nfe/recursos/nfes_recebidas_spec.rb +87 -0
- data/spec/focus_nfe/recursos/nfgas_spec.rb +8 -0
- data/spec/focus_nfe/recursos/nfse_nacional_spec.rb +8 -0
- data/spec/focus_nfe/recursos/nfse_spec.rb +9 -0
- data/spec/focus_nfe/recursos/nfses_nacionais_recebidas_spec.rb +17 -0
- data/spec/focus_nfe/recursos/webhooks_spec.rb +22 -0
- data/spec/focus_nfe/webhook_spec.rb +66 -0
- data/spec/focus_nfe_global_configuration_spec.rb +70 -0
- data/spec/focus_nfe_require_spec.rb +87 -0
- data/spec/focus_nfe_spec.rb +11 -0
- data/spec/spec_helper.rb +58 -0
- data/spec/support/shared_examples/recurso_fiscal.rb +445 -0
- data/spec/support/shared_examples/recurso_leitura.rb +217 -0
- data/tools/pull_fields.rb +62 -0
- metadata +420 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
module Concerns
|
|
4
|
+
module Emitivel : FocusNfe::Recursos::Base
|
|
5
|
+
def emitir: (ref: String, dados: Hash[untyped, untyped], ?validar: bool, **untyped opcoes) -> FocusNfe::Modelos::Documento
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def validar_dados!: (Hash[untyped, untyped] dados) -> void
|
|
10
|
+
def carregar_aninhados: (Hash[untyped, untyped] dados) -> Hash[String, FocusNfe::Esquemas::Esquema]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
module Concerns
|
|
4
|
+
module Enviavel : FocusNfe::Recursos::Base
|
|
5
|
+
MAX_EMAILS: Integer
|
|
6
|
+
|
|
7
|
+
def enviar_email: (String ref, emails: Array[String]) -> untyped
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def validar_emails!: (untyped emails) -> void
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
module Concerns
|
|
4
|
+
module Eventavel : FocusNfe::Recursos::Base
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def emitir_evento_em: (String ref, caminho: String, **untyped dados) -> FocusNfe::Modelos::Documento
|
|
8
|
+
def cancelar_evento_em: (String ref, caminho: String, **untyped dados) -> FocusNfe::Modelos::Documento
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
module Concerns
|
|
4
|
+
module Inutilizavel : FocusNfe::Recursos::Base
|
|
5
|
+
CAMINHO_INUTILIZACAO: String
|
|
6
|
+
CAMINHO_INUTILIZACOES: String
|
|
7
|
+
JUSTIFICATIVA_MINIMA: Integer
|
|
8
|
+
|
|
9
|
+
def inutilizar: (cnpj: String, serie: untyped, numero_inicial: untyped, numero_final: untyped, justificativa: String) -> FocusNfe::Modelos::Inutilizacao
|
|
10
|
+
def consultar_inutilizacoes: (**untyped filtros) -> Array[FocusNfe::Modelos::Inutilizacao]
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def validar_justificativa!: (untyped justificativa) -> void
|
|
15
|
+
def validar_faixa!: (untyped numero_inicial, untyped numero_final) -> void
|
|
16
|
+
def numero_para_inteiro: (untyped valor) -> Integer?
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Cte < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::CorrigivelCte
|
|
8
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
9
|
+
|
|
10
|
+
MODAIS: Hash[String, Hash[String, String]]
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def esquemas_extras: (Hash[untyped, untyped] dados) -> Hash[String, String]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class CteOs < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::CorrigivelCte
|
|
8
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
9
|
+
|
|
10
|
+
MODAIS: Hash[String, Hash[String, String]]
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def esquemas_extras: (Hash[untyped, untyped] dados) -> Hash[String, String]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class CtesRecebidas < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Listavel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Baixavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::BaixavelEventos
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
8
|
+
|
|
9
|
+
def consultar: (String chave) -> untyped
|
|
10
|
+
def desacordo: (String chave, observacoes: String) -> untyped
|
|
11
|
+
def consultar_desacordo: (String chave) -> untyped
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Dce < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Empresas < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Listavel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Localizavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Removivel
|
|
7
|
+
|
|
8
|
+
def criar: (dados: Hash[untyped, untyped], ?dry_run: bool) -> untyped
|
|
9
|
+
def atualizar: ((String | Integer) id, dados: Hash[untyped, untyped]) -> untyped
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Mdfe < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
8
|
+
include FocusNfe::Recursos::Concerns::Eventavel
|
|
9
|
+
|
|
10
|
+
MODAIS: Hash[String, String]
|
|
11
|
+
|
|
12
|
+
def encerrar: (String ref, data: untyped, sigla_uf: untyped, nome_municipio: untyped) -> FocusNfe::Modelos::Documento
|
|
13
|
+
def incluir_condutor: (String ref, nome: untyped, cpf: untyped) -> FocusNfe::Modelos::Documento
|
|
14
|
+
def incluir_dfe: (String ref, protocolo: untyped, codigo_municipio_carregamento: untyped, documentos: untyped, ?nome_municipio_carregamento: untyped) -> FocusNfe::Modelos::Documento
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def esquemas_extras: (Hash[untyped, untyped] dados) -> Hash[String, String]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Municipios < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Localizavel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Listavel
|
|
6
|
+
|
|
7
|
+
def listar_codigos_tributarios: (String codigo_municipio, **untyped filtros) -> FocusNfe::Modelos::Pagina
|
|
8
|
+
def listar_itens_lista_servico: (String codigo_municipio, **untyped filtros) -> FocusNfe::Modelos::Pagina
|
|
9
|
+
def consultar_codigo_tributario: (String codigo_municipio, String codigo) -> untyped
|
|
10
|
+
def consultar_item_lista_servico: (String codigo_municipio, String codigo) -> untyped
|
|
11
|
+
def consultar_json: (String codigo_municipio) -> untyped
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def sub_listagem: (String codigo_municipio, String sufixo, Hash[untyped, untyped] filtros) -> FocusNfe::Modelos::Pagina
|
|
16
|
+
def sub_consulta: (String codigo_municipio, String sufixo, String codigo) -> untyped
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Nfce < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Inutilizavel
|
|
8
|
+
include FocusNfe::Recursos::Concerns::Enviavel
|
|
9
|
+
include FocusNfe::Recursos::Concerns::Conciliavel
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Nfcom < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Nfe < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Corrigivel
|
|
8
|
+
include FocusNfe::Recursos::Concerns::Inutilizavel
|
|
9
|
+
include FocusNfe::Recursos::Concerns::Visualizavel
|
|
10
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
11
|
+
include FocusNfe::Recursos::Concerns::Enviavel
|
|
12
|
+
include FocusNfe::Recursos::Concerns::Eventavel
|
|
13
|
+
include FocusNfe::Recursos::Concerns::Conciliavel
|
|
14
|
+
|
|
15
|
+
def importar: (String xml, ?ref: String?) -> FocusNfe::Modelos::Documento
|
|
16
|
+
def emitir_evento: (String ref, tipo_evento: untyped, **untyped dados) -> FocusNfe::Modelos::Documento
|
|
17
|
+
def cancelar_evento: (String ref, tipo_evento: untyped) -> FocusNfe::Modelos::Documento
|
|
18
|
+
def registrar_ator_interessado: (String ref, permite_autorizacao_terceiros: untyped, ?cpf: untyped, ?cnpj: untyped) -> FocusNfe::Modelos::Documento
|
|
19
|
+
def registrar_insucesso_entrega: (String ref, data_tentativa_entrega: untyped, motivo_insucesso: untyped, hash_tentativa_entrega: untyped, **untyped dados) -> FocusNfe::Modelos::Documento
|
|
20
|
+
def cancelar_insucesso_entrega: (String ref) -> FocusNfe::Modelos::Documento
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class NfesRecebidas < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Listavel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Baixavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::BaixavelEventos
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
8
|
+
include FocusNfe::Recursos::Concerns::Eventavel
|
|
9
|
+
|
|
10
|
+
def consultar: (String chave, ?completa: bool) -> untyped
|
|
11
|
+
def manifestar: (String chave, tipo: String, ?justificativa: String?) -> untyped
|
|
12
|
+
def emitir_evento: (String chave, tipo_evento: String, **untyped dados) -> FocusNfe::Modelos::Documento
|
|
13
|
+
def cancelar_evento: (String chave) -> FocusNfe::Modelos::Documento
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Nfgas < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Nfse < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
8
|
+
include FocusNfe::Recursos::Concerns::Enviavel
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class NfseNacional < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Emitivel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Consultavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Cancelavel
|
|
7
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class NfsesNacionaisRecebidas < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Listavel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Baixavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Notificavel
|
|
7
|
+
|
|
8
|
+
def download_html: (String chave) -> String?
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Recursos
|
|
3
|
+
class Webhooks < FocusNfe::Recursos::Base
|
|
4
|
+
include FocusNfe::Recursos::Concerns::Listavel
|
|
5
|
+
include FocusNfe::Recursos::Concerns::Localizavel
|
|
6
|
+
include FocusNfe::Recursos::Concerns::Removivel
|
|
7
|
+
|
|
8
|
+
def criar: (dados: Hash[untyped, untyped]) -> untyped
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
module Webhook
|
|
3
|
+
def self?.parse: (untyped raw_body, ?ref: String?) -> FocusNfe::Modelos::Documento
|
|
4
|
+
|
|
5
|
+
def self?.autenticado?: (headers: untyped, authorization: String, authorization_header: String) -> bool
|
|
6
|
+
|
|
7
|
+
def self?.valor_do_header: (untyped headers, String nome) -> untyped
|
|
8
|
+
|
|
9
|
+
def self?.comparacao_segura?: (String esquerda, String direita) -> bool
|
|
10
|
+
end
|
|
11
|
+
end
|
data/sig/focus_nfe.rbs
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module FocusNfe
|
|
2
|
+
VERSION: String
|
|
3
|
+
|
|
4
|
+
self.@configuration: FocusNfe::Configuration?
|
|
5
|
+
|
|
6
|
+
def self.configure: () ?{ (FocusNfe::Configuration) -> void } -> FocusNfe::Configuration
|
|
7
|
+
def self.configuration: () -> FocusNfe::Configuration
|
|
8
|
+
def self.client: () -> FocusNfe::Client
|
|
9
|
+
def self.reset_configuration!: () -> void
|
|
10
|
+
end
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe FocusNfe::Client do
|
|
4
|
+
describe ".new com tokens e ambiente" do
|
|
5
|
+
it "constrói uma Configuration interna a partir dos argumentos", :aggregate_failures do
|
|
6
|
+
client = described_class.new(token_empresa: "te", token_conta: "tc", environment: :producao)
|
|
7
|
+
|
|
8
|
+
expect(client.configuration).to be_a(FocusNfe::Configuration)
|
|
9
|
+
expect(client.configuration).to have_attributes(token_empresa: "te", token_conta: "tc", environment: :producao)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "repassa opções extras à Configuration" do
|
|
13
|
+
client = described_class.new(token_empresa: "te", timeout: 5, headers: { "X" => "1" })
|
|
14
|
+
|
|
15
|
+
expect(client.configuration).to have_attributes(timeout: 5, headers: { "X" => "1" })
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "usa homologação como ambiente padrão" do
|
|
19
|
+
client = described_class.new(token_empresa: "te")
|
|
20
|
+
|
|
21
|
+
expect(client.configuration.environment).to eq(:homologacao)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "valida a configuração, levantando sem nenhum token" do
|
|
25
|
+
expect { described_class.new(token_empresa: nil, token_conta: nil) }
|
|
26
|
+
.to raise_error(FocusNfe::Errors::ConfigurationError)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "aceita um cliente só com token de empresa" do
|
|
30
|
+
expect { described_class.new(token_empresa: "te") }.not_to raise_error
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "aceita um cliente só com token de conta" do
|
|
34
|
+
expect { described_class.new(token_conta: "tc") }.not_to raise_error
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "valida o ambiente, levantando para um desconhecido" do
|
|
38
|
+
expect { described_class.new(token_empresa: "te", environment: :sandbox) }
|
|
39
|
+
.to raise_error(FocusNfe::Errors::ConfigurationError)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe ".new com uma Configuration pronta" do
|
|
44
|
+
it "aceita e expõe a própria Configuration" do
|
|
45
|
+
config = FocusNfe::Configuration.new(token_empresa: "te")
|
|
46
|
+
|
|
47
|
+
expect(described_class.new(config).configuration).to be(config)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "também roda validate!, levantando para config sem token" do
|
|
51
|
+
config = FocusNfe::Configuration.new(token_empresa: nil, token_conta: nil)
|
|
52
|
+
|
|
53
|
+
expect { described_class.new(config) }.to raise_error(FocusNfe::Errors::ConfigurationError)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe "#connection" do
|
|
58
|
+
subject(:client) { described_class.new(token_empresa: "te") }
|
|
59
|
+
|
|
60
|
+
it "devolve uma HTTP::Connection" do
|
|
61
|
+
expect(client.connection).to be_a(FocusNfe::HTTP::Connection)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "memoiza a conexão entre chamadas" do
|
|
65
|
+
primeira = client.connection
|
|
66
|
+
|
|
67
|
+
expect(client.connection).to be(primeira)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "levanta ConfigurationError sem token_empresa" do
|
|
71
|
+
client = described_class.new(token_conta: "tc")
|
|
72
|
+
|
|
73
|
+
expect { client.connection }.to raise_error(FocusNfe::Errors::ConfigurationError, /token_empresa/)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe "#connection_conta" do
|
|
78
|
+
subject(:client) { described_class.new(token_conta: "tc") }
|
|
79
|
+
|
|
80
|
+
it "devolve uma HTTP::Connection distinta da de empresa", :aggregate_failures do
|
|
81
|
+
client = described_class.new(token_empresa: "te", token_conta: "tc")
|
|
82
|
+
|
|
83
|
+
expect(client.connection_conta).to be_a(FocusNfe::HTTP::Connection)
|
|
84
|
+
expect(client.connection_conta).not_to be(client.connection)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "memoiza a conexão entre chamadas" do
|
|
88
|
+
primeira = client.connection_conta
|
|
89
|
+
|
|
90
|
+
expect(client.connection_conta).to be(primeira)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "levanta ConfigurationError sem token_conta" do
|
|
94
|
+
client = described_class.new(token_empresa: "te")
|
|
95
|
+
|
|
96
|
+
expect { client.connection_conta }.to raise_error(FocusNfe::Errors::ConfigurationError, /token_conta/)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
describe "roteamento de token por escopo" do
|
|
101
|
+
subject(:client) { described_class.new(token_empresa: "te", token_conta: "tc") }
|
|
102
|
+
|
|
103
|
+
let(:json) { { "Content-Type" => "application/json" } }
|
|
104
|
+
|
|
105
|
+
def homologacao = "https://homologacao.focusnfe.com.br"
|
|
106
|
+
|
|
107
|
+
def authorization(token)
|
|
108
|
+
FocusNfe::HTTP::Authentication.header(token).fetch("Authorization")
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "usa o token da empresa nos recursos fiscais" do
|
|
112
|
+
stub = stub_request(:get, "#{homologacao}/v2/nfe/ref-1")
|
|
113
|
+
.with(headers: { "Authorization" => authorization("te") })
|
|
114
|
+
.to_return(status: 200, body: "{}", headers: json)
|
|
115
|
+
|
|
116
|
+
client.nfe.consultar("ref-1")
|
|
117
|
+
|
|
118
|
+
expect(stub).to have_been_requested
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "usa o token da conta nas consultas auxiliares" do
|
|
122
|
+
stub = stub_request(:get, "#{homologacao}/v2/ceps/69909032")
|
|
123
|
+
.with(headers: { "Authorization" => authorization("tc") })
|
|
124
|
+
.to_return(status: 200, body: "{}", headers: json)
|
|
125
|
+
|
|
126
|
+
client.ceps.consultar("69909032")
|
|
127
|
+
|
|
128
|
+
expect(stub).to have_been_requested
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "usa o token da conta na gestão de empresas" do
|
|
132
|
+
stub = stub_request(:get, "#{homologacao}/v2/empresas/7")
|
|
133
|
+
.with(headers: { "Authorization" => authorization("tc") })
|
|
134
|
+
.to_return(status: 200, body: "{}", headers: json)
|
|
135
|
+
|
|
136
|
+
client.empresas.consultar("7")
|
|
137
|
+
|
|
138
|
+
expect(stub).to have_been_requested
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
describe "token ausente por escopo" do
|
|
143
|
+
it "levanta ao acessar recurso de conta sem token_conta" do
|
|
144
|
+
client = described_class.new(token_empresa: "te")
|
|
145
|
+
|
|
146
|
+
expect { client.ceps }.to raise_error(FocusNfe::Errors::ConfigurationError, /token_conta/)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
it "levanta ao acessar recurso fiscal sem token_empresa" do
|
|
150
|
+
client = described_class.new(token_conta: "tc")
|
|
151
|
+
|
|
152
|
+
expect { client.nfe }.to raise_error(FocusNfe::Errors::ConfigurationError, /token_empresa/)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
describe "isolamento entre clientes" do
|
|
157
|
+
it "não compartilha estado entre clientes distintos", :aggregate_failures do
|
|
158
|
+
loja = described_class.new(token_empresa: "loja", environment: :producao)
|
|
159
|
+
filial = described_class.new(token_empresa: "filial", environment: :homologacao)
|
|
160
|
+
|
|
161
|
+
expect(loja.configuration.token_empresa).to eq("loja")
|
|
162
|
+
expect(filial.configuration.token_empresa).to eq("filial")
|
|
163
|
+
expect(loja.connection).not_to be(filial.connection)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
describe "acessores de recurso" do
|
|
168
|
+
subject(:client) { described_class.new(token_empresa: "te", token_conta: "tc") }
|
|
169
|
+
|
|
170
|
+
{
|
|
171
|
+
nfe: FocusNfe::Recursos::Nfe,
|
|
172
|
+
nfce: FocusNfe::Recursos::Nfce,
|
|
173
|
+
nfse: FocusNfe::Recursos::Nfse,
|
|
174
|
+
nfse_nacional: FocusNfe::Recursos::NfseNacional,
|
|
175
|
+
cte: FocusNfe::Recursos::Cte,
|
|
176
|
+
cte_os: FocusNfe::Recursos::CteOs,
|
|
177
|
+
mdfe: FocusNfe::Recursos::Mdfe,
|
|
178
|
+
nfcom: FocusNfe::Recursos::Nfcom,
|
|
179
|
+
dce: FocusNfe::Recursos::Dce,
|
|
180
|
+
nfgas: FocusNfe::Recursos::Nfgas,
|
|
181
|
+
nfes_recebidas: FocusNfe::Recursos::NfesRecebidas,
|
|
182
|
+
ctes_recebidas: FocusNfe::Recursos::CtesRecebidas,
|
|
183
|
+
nfses_nacionais_recebidas: FocusNfe::Recursos::NfsesNacionaisRecebidas,
|
|
184
|
+
ceps: FocusNfe::Recursos::Ceps,
|
|
185
|
+
municipios: FocusNfe::Recursos::Municipios,
|
|
186
|
+
cfops: FocusNfe::Recursos::Cfops,
|
|
187
|
+
cnaes: FocusNfe::Recursos::Cnaes,
|
|
188
|
+
ncms: FocusNfe::Recursos::Ncms,
|
|
189
|
+
cnpjs: FocusNfe::Recursos::Cnpjs,
|
|
190
|
+
empresas: FocusNfe::Recursos::Empresas,
|
|
191
|
+
webhooks: FocusNfe::Recursos::Webhooks,
|
|
192
|
+
emails_bloqueados: FocusNfe::Recursos::EmailsBloqueados,
|
|
193
|
+
backups: FocusNfe::Recursos::Backups
|
|
194
|
+
}.each do |acessor, classe|
|
|
195
|
+
describe "##{acessor}" do
|
|
196
|
+
it "devolve um #{classe}" do
|
|
197
|
+
expect(client.public_send(acessor)).to be_a(classe)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it "memoiza o recurso entre chamadas" do
|
|
201
|
+
primeiro = client.public_send(acessor)
|
|
202
|
+
|
|
203
|
+
expect(client.public_send(acessor)).to be(primeiro)
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|