fiscalapi-br 0.1.0__tar.gz → 0.2.0__tar.gz

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.
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: fiscalapi-br
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: SDK da FiscalAPI (Brasil): Inscrição Estadual, CNPJ, certidões, NF-e, SIGEF, CNIR e perfil do produtor rural.
5
5
  Project-URL: Homepage, https://fiscalapi.com.br
6
6
  Project-URL: Documentation, https://docs.fiscalapi.com.br
7
- Project-URL: Source, https://github.com/fiscaIapi/fiscalapi-python
8
- Project-URL: Issues, https://github.com/fiscaIapi/fiscalapi-python/issues
7
+ Project-URL: Source, https://github.com/fiscalapi-br/fiscalapi-python
8
+ Project-URL: Issues, https://github.com/fiscalapi-br/fiscalapi-python/issues
9
9
  Author-email: FiscalAPI <contato@fiscalapi.com.br>
10
10
  License-Expression: MIT
11
11
  License-File: LICENSE
@@ -24,7 +24,7 @@ Description-Content-Type: text/markdown
24
24
 
25
25
  # FiscalAPI — SDK Python
26
26
 
27
- Cliente Python da [FiscalAPI](https://fiscalapi.com.br): Inscrição Estadual nos 27 estados, CNPJ, certidões (CND estadual, CND Federal, CNDT, CRF/FGTS), XML de NF-e por chave, SIGEF, CNIR e perfil do produtor rural.
27
+ Cliente Python da [FiscalAPI](https://fiscalapi.com.br): Inscrição Estadual nos 27 estados, CNPJ, certidões (CND estadual, CND Federal, CNDT, CRF/FGTS), XML de NF-e por chave, NFS-e por chave, Simples Nacional, SIGEF, CNIR e perfil do produtor rural.
28
28
 
29
29
  - Zero dependências (só a biblioteca padrão).
30
30
  - Python 3.9 ou superior.
@@ -40,7 +40,7 @@ pip install fiscalapi-br
40
40
  ## Antes de começar
41
41
 
42
42
  1. Crie sua conta em [app.fiscalapi.com.br](https://app.fiscalapi.com.br) e copie a chave de API no painel.
43
- 2. **O uso pela API exige um plano ativo ou créditos.** As consultas gratuitas do mês valem só no painel; pela API, uma conta sem plano recebe `402` (`InsufficientBalanceError`).
43
+ 2. **10 consultas grátis por mês, no painel e pela API**: IE em um estado e CNPJ, para conta que nunca assinou plano, com e-mail confirmado e sem recarga. Não valem para IE em todos os estados nem para CNPJ ao vivo. Depois disso, é preciso plano ou saldo: a API responde `402` (`InsufficientBalanceError`). Sem chave, `403` (`AuthenticationError`).
44
44
  3. Planos e consumo de créditos: [docs.fiscalapi.com.br](https://docs.fiscalapi.com.br/docs/referencia/plans-and-limits).
45
45
 
46
46
  ## Uso rápido
@@ -68,6 +68,8 @@ for ie in resp["results"]:
68
68
  | `consultar_cndt(cpf=/cnpj=)` | `GET /api/consultar-cndt` | Certidão de débitos trabalhistas |
69
69
  | `consultar_crf_fgts(cpf=/cnpj=)` | `GET /api/consultar-crf-fgts` | Regularidade do FGTS |
70
70
  | `consultar_certidoes_todas(cpf=/cnpj=, skip_estaduais=False)` | `GET /api/certidoes-todas` | Todas as certidões em uma chamada |
71
+ | `consultar_simples_nacional(cnpj)` | `GET /api/consultar-simples-nacional` | Situação no Simples Nacional e SIMEI |
72
+ | `consultar_nfse(chave, danfse=False)` | `GET /api/consultar-nfse` | NFS-e (padrão nacional) por chave, sem certificado |
71
73
  | `consultar_nfe_xml(chave, certificado=, senha=, manifestar=True)` | `POST /api/consultar-nfe-xml` | XML completo da NF-e |
72
74
  | `consultar_sigef(cpf=/cnpj=)` | `GET /api/consultar-sigef` | Parcelas certificadas no SIGEF/INCRA |
73
75
  | `consultar_sigef_parcela(uuid, force_fresh=False)` | `GET /api/consultar-sigef-parcela` | Uma parcela com polígono, vértices e confrontantes |
@@ -99,6 +101,25 @@ print(empresa["result"]["razao_social"], empresa["result"]["situacao_cadastral"]
99
101
  api.consultar_cnpj("12345678000195", force_fresh=True)
100
102
  ```
101
103
 
104
+ ### Simples Nacional
105
+
106
+ ```python
107
+ r = api.consultar_simples_nacional("11222333000181")
108
+ print(r["optante_simples"], r["situacao_simei"], r["regime_regular_ibs"])
109
+ ```
110
+
111
+ ### NFS-e por chave
112
+
113
+ ```python
114
+ nfse = api.consultar_nfse(
115
+ "35503082211222333000181000000000012326100000045676",
116
+ danfse=True, # opcional: PDF do DANFSe em base64
117
+ )
118
+ print(nfse["emitente"]["razao_social"], nfse["tributacao_municipal"]["valor_servico"])
119
+ ```
120
+
121
+ Uma consulta nova leva de 30 a 60 segundos. Só a NFS-e entregue é cobrada.
122
+
102
123
  ### Certidões com PDF
103
124
 
104
125
  ```python
@@ -173,7 +194,7 @@ try:
173
194
  except AuthenticationError:
174
195
  ... # chave ausente, inválida ou revogada (401/403)
175
196
  except InsufficientBalanceError as e:
176
- print(e.consultas_restantes) # sem plano ou saldo esgotado (402)
197
+ print(e.consultas_restantes) # cota grátis, plano ou saldo esgotado (402)
177
198
  except RateLimitError as e:
178
199
  print(e.retry_after) # limite por minuto do plano (429)
179
200
  except BadRequestError as e:
@@ -195,6 +216,10 @@ api = FiscalAPI("sua-chave", timeout=200, max_retries=3)
195
216
  ## Links
196
217
 
197
218
  - Documentação: [docs.fiscalapi.com.br](https://docs.fiscalapi.com.br)
219
+ - Guias (Excel, Google Sheets, n8n, Make, Power Automate, Python, Node.js, PHP): [docs.fiscalapi.com.br/docs/guias](https://docs.fiscalapi.com.br/docs/guias)
220
+ - Especificação OpenAPI: [docs.fiscalapi.com.br/openapi.json](https://docs.fiscalapi.com.br/openapi.json)
221
+ - Servidor MCP: [fiscalapi-br/fiscalapi-mcp](https://github.com/fiscalapi-br/fiscalapi-mcp)
222
+ - Para desenvolvedores: [fiscalapi.com.br/desenvolvedores](https://fiscalapi.com.br/desenvolvedores/)
198
223
  - Painel: [app.fiscalapi.com.br](https://app.fiscalapi.com.br)
199
224
  - Suporte: contato@fiscalapi.com.br
200
225
 
@@ -1,6 +1,6 @@
1
1
  # FiscalAPI — SDK Python
2
2
 
3
- Cliente Python da [FiscalAPI](https://fiscalapi.com.br): Inscrição Estadual nos 27 estados, CNPJ, certidões (CND estadual, CND Federal, CNDT, CRF/FGTS), XML de NF-e por chave, SIGEF, CNIR e perfil do produtor rural.
3
+ Cliente Python da [FiscalAPI](https://fiscalapi.com.br): Inscrição Estadual nos 27 estados, CNPJ, certidões (CND estadual, CND Federal, CNDT, CRF/FGTS), XML de NF-e por chave, NFS-e por chave, Simples Nacional, SIGEF, CNIR e perfil do produtor rural.
4
4
 
5
5
  - Zero dependências (só a biblioteca padrão).
6
6
  - Python 3.9 ou superior.
@@ -16,7 +16,7 @@ pip install fiscalapi-br
16
16
  ## Antes de começar
17
17
 
18
18
  1. Crie sua conta em [app.fiscalapi.com.br](https://app.fiscalapi.com.br) e copie a chave de API no painel.
19
- 2. **O uso pela API exige um plano ativo ou créditos.** As consultas gratuitas do mês valem só no painel; pela API, uma conta sem plano recebe `402` (`InsufficientBalanceError`).
19
+ 2. **10 consultas grátis por mês, no painel e pela API**: IE em um estado e CNPJ, para conta que nunca assinou plano, com e-mail confirmado e sem recarga. Não valem para IE em todos os estados nem para CNPJ ao vivo. Depois disso, é preciso plano ou saldo: a API responde `402` (`InsufficientBalanceError`). Sem chave, `403` (`AuthenticationError`).
20
20
  3. Planos e consumo de créditos: [docs.fiscalapi.com.br](https://docs.fiscalapi.com.br/docs/referencia/plans-and-limits).
21
21
 
22
22
  ## Uso rápido
@@ -44,6 +44,8 @@ for ie in resp["results"]:
44
44
  | `consultar_cndt(cpf=/cnpj=)` | `GET /api/consultar-cndt` | Certidão de débitos trabalhistas |
45
45
  | `consultar_crf_fgts(cpf=/cnpj=)` | `GET /api/consultar-crf-fgts` | Regularidade do FGTS |
46
46
  | `consultar_certidoes_todas(cpf=/cnpj=, skip_estaduais=False)` | `GET /api/certidoes-todas` | Todas as certidões em uma chamada |
47
+ | `consultar_simples_nacional(cnpj)` | `GET /api/consultar-simples-nacional` | Situação no Simples Nacional e SIMEI |
48
+ | `consultar_nfse(chave, danfse=False)` | `GET /api/consultar-nfse` | NFS-e (padrão nacional) por chave, sem certificado |
47
49
  | `consultar_nfe_xml(chave, certificado=, senha=, manifestar=True)` | `POST /api/consultar-nfe-xml` | XML completo da NF-e |
48
50
  | `consultar_sigef(cpf=/cnpj=)` | `GET /api/consultar-sigef` | Parcelas certificadas no SIGEF/INCRA |
49
51
  | `consultar_sigef_parcela(uuid, force_fresh=False)` | `GET /api/consultar-sigef-parcela` | Uma parcela com polígono, vértices e confrontantes |
@@ -75,6 +77,25 @@ print(empresa["result"]["razao_social"], empresa["result"]["situacao_cadastral"]
75
77
  api.consultar_cnpj("12345678000195", force_fresh=True)
76
78
  ```
77
79
 
80
+ ### Simples Nacional
81
+
82
+ ```python
83
+ r = api.consultar_simples_nacional("11222333000181")
84
+ print(r["optante_simples"], r["situacao_simei"], r["regime_regular_ibs"])
85
+ ```
86
+
87
+ ### NFS-e por chave
88
+
89
+ ```python
90
+ nfse = api.consultar_nfse(
91
+ "35503082211222333000181000000000012326100000045676",
92
+ danfse=True, # opcional: PDF do DANFSe em base64
93
+ )
94
+ print(nfse["emitente"]["razao_social"], nfse["tributacao_municipal"]["valor_servico"])
95
+ ```
96
+
97
+ Uma consulta nova leva de 30 a 60 segundos. Só a NFS-e entregue é cobrada.
98
+
78
99
  ### Certidões com PDF
79
100
 
80
101
  ```python
@@ -149,7 +170,7 @@ try:
149
170
  except AuthenticationError:
150
171
  ... # chave ausente, inválida ou revogada (401/403)
151
172
  except InsufficientBalanceError as e:
152
- print(e.consultas_restantes) # sem plano ou saldo esgotado (402)
173
+ print(e.consultas_restantes) # cota grátis, plano ou saldo esgotado (402)
153
174
  except RateLimitError as e:
154
175
  print(e.retry_after) # limite por minuto do plano (429)
155
176
  except BadRequestError as e:
@@ -171,6 +192,10 @@ api = FiscalAPI("sua-chave", timeout=200, max_retries=3)
171
192
  ## Links
172
193
 
173
194
  - Documentação: [docs.fiscalapi.com.br](https://docs.fiscalapi.com.br)
195
+ - Guias (Excel, Google Sheets, n8n, Make, Power Automate, Python, Node.js, PHP): [docs.fiscalapi.com.br/docs/guias](https://docs.fiscalapi.com.br/docs/guias)
196
+ - Especificação OpenAPI: [docs.fiscalapi.com.br/openapi.json](https://docs.fiscalapi.com.br/openapi.json)
197
+ - Servidor MCP: [fiscalapi-br/fiscalapi-mcp](https://github.com/fiscalapi-br/fiscalapi-mcp)
198
+ - Para desenvolvedores: [fiscalapi.com.br/desenvolvedores](https://fiscalapi.com.br/desenvolvedores/)
174
199
  - Painel: [app.fiscalapi.com.br](https://app.fiscalapi.com.br)
175
200
  - Suporte: contato@fiscalapi.com.br
176
201
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "fiscalapi-br"
7
- version = "0.1.0"
7
+ version = "0.2.0"
8
8
  description = "SDK da FiscalAPI (Brasil): Inscrição Estadual, CNPJ, certidões, NF-e, SIGEF, CNIR e perfil do produtor rural."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -31,8 +31,8 @@ dependencies = []
31
31
  [project.urls]
32
32
  Homepage = "https://fiscalapi.com.br"
33
33
  Documentation = "https://docs.fiscalapi.com.br"
34
- Source = "https://github.com/fiscaIapi/fiscalapi-python"
35
- Issues = "https://github.com/fiscaIapi/fiscalapi-python/issues"
34
+ Source = "https://github.com/fiscalapi-br/fiscalapi-python"
35
+ Issues = "https://github.com/fiscalapi-br/fiscalapi-python/issues"
36
36
 
37
37
  [tool.hatch.build.targets.wheel]
38
38
  packages = ["src/fiscalapi_br"]
@@ -31,9 +31,11 @@ from .types import (
31
31
  ConsultaIEResponse,
32
32
  ConsultaIETodosResponse,
33
33
  NfeXmlResponse,
34
+ NfseResponse,
34
35
  PerfilProdutorResponse,
35
36
  SigefParcelaResponse,
36
37
  SigefResponse,
38
+ SimplesNacionalResponse,
37
39
  )
38
40
 
39
41
  DEFAULT_BASE_URL = "https://api.fiscalapi.com.br"
@@ -139,6 +141,15 @@ class FiscalAPI:
139
141
  params = {"cnpj": cnpj, "force_fresh": force_fresh or None}
140
142
  return cast(CNPJResponse, self._get("/api/consultar-cnpj", params))
141
143
 
144
+ def consultar_simples_nacional(self, cnpj: str) -> SimplesNacionalResponse:
145
+ """Situação no Simples Nacional e SIMEI (``GET /api/consultar-simples-nacional``)."""
146
+ if not cnpj or not cnpj.strip():
147
+ raise ValueError("Informe o CNPJ.")
148
+ return cast(
149
+ SimplesNacionalResponse,
150
+ self._get("/api/consultar-simples-nacional", {"cnpj": cnpj.strip()}),
151
+ )
152
+
142
153
  # ----------------------------------------------------------- Certidões
143
154
 
144
155
  def consultar_cnd(
@@ -230,6 +241,18 @@ class FiscalAPI:
230
241
  # POST não é repetido em 5xx: a manifestação pode já ter sido registrada.
231
242
  return cast(NfeXmlResponse, self._request("POST", "/api/consultar-nfe-xml", json_body=body))
232
243
 
244
+ def consultar_nfse(self, chave: str, *, danfse: bool = False) -> NfseResponse:
245
+ """NFS-e (padrão nacional) pela chave de acesso, sem certificado (``GET /api/consultar-nfse``).
246
+
247
+ ``danfse=True`` inclui o PDF do DANFSe em base64. Uma consulta nova
248
+ pode levar de 30 a 60 segundos.
249
+ """
250
+ digitos = "".join(c for c in (chave or "") if c.isdigit())
251
+ if not digitos:
252
+ raise ValueError("Informe a chave de acesso.")
253
+ params = {"chave": digitos, "danfse": danfse or None}
254
+ return cast(NfseResponse, self._get("/api/consultar-nfse", params))
255
+
233
256
  # ------------------------------------------------------- Imóvel rural
234
257
 
235
258
  def consultar_sigef(
@@ -0,0 +1 @@
1
+ __version__ = "0.2.0"
@@ -248,3 +248,125 @@ class PerfilProdutorResponse(TypedDict, total=False):
248
248
  cnd_estaduais: Optional[CNDTodosResponse]
249
249
  certidoes_federais: List[CertidaoFederalResponse]
250
250
  cnir: Optional[CnirResponse]
251
+
252
+
253
+ class SimplesNacionalEventoFuturo(TypedDict, total=False):
254
+ regime: str
255
+ descricao: str
256
+ data_efeito: str
257
+
258
+
259
+ class SimplesNacionalPeriodoAnterior(TypedDict, total=False):
260
+ data_inicial: str
261
+ data_final: str
262
+ detalhamento: str
263
+
264
+
265
+ class SimplesNacionalMaisInfo(TypedDict, total=False):
266
+ opcoes_periodos_anteriores: str
267
+ opcoes_periodos_anteriores_lista: List[SimplesNacionalPeriodoAnterior]
268
+ enquadramentos_simei_periodos_anteriores: str
269
+ enquadramentos_simei_periodos_anteriores_lista: List[SimplesNacionalPeriodoAnterior]
270
+ eventos_futuros_simples: str
271
+ eventos_futuros_simei: str
272
+ mei_tac: str
273
+
274
+
275
+ class SimplesNacionalResponse(TypedDict, total=False):
276
+ request_id: str
277
+ cnpj: str
278
+ cnpj_matriz: str # para filiais, a situação é a da matriz
279
+ nome_empresarial: str
280
+ data_consulta: str
281
+ situacao_simples: str
282
+ optante_simples: bool
283
+ data_opcao_simples: Optional[str]
284
+ situacao_simei: str
285
+ enquadrado_simei: bool
286
+ regime_regular_ibs: str
287
+ regime_regular_cbs: str
288
+ eventos_futuros: List[SimplesNacionalEventoFuturo]
289
+ mais_info: Optional[SimplesNacionalMaisInfo]
290
+ cached: bool
291
+
292
+
293
+ class NfseEndereco(TypedDict, total=False):
294
+ logradouro: Optional[str]
295
+ numero: Optional[str]
296
+ complemento: Optional[str]
297
+ bairro: Optional[str]
298
+ cep: Optional[str]
299
+ municipio: Optional[str]
300
+ uf: Optional[str]
301
+
302
+
303
+ class NfseEmitente(TypedDict, total=False):
304
+ razao_social: Optional[str]
305
+ cpf_cnpj: Optional[str]
306
+ inscricao_municipal: Optional[str]
307
+ situacao_simples_nacional: Optional[str]
308
+ regime_especial_tributacao: Optional[str]
309
+ endereco: Optional[NfseEndereco]
310
+
311
+
312
+ class NfsePessoa(TypedDict, total=False):
313
+ cpf_cnpj: Optional[str]
314
+ inscricao_municipal: Optional[str]
315
+ nome: Optional[str]
316
+
317
+
318
+ class NfseServico(TypedDict, total=False):
319
+ pais: Optional[str]
320
+ municipio: Optional[str]
321
+ codigo_tributacao_nacional: Optional[str]
322
+ descricao_codigo: Optional[str]
323
+ item_nbs: Optional[str]
324
+ descricao: Optional[str]
325
+
326
+
327
+ class NfseTributacaoMunicipal(TypedDict, total=False):
328
+ tributacao_issqn: Optional[str]
329
+ municipio_incidencia: Optional[str]
330
+ valor_servico: Optional[float]
331
+ desconto_incondicionado: Optional[float]
332
+ deducoes: Optional[float]
333
+ beneficio_municipal: Optional[float]
334
+ base_calculo: Optional[float]
335
+ aliquota: Optional[float] # percentual (2.5 = 2,5%)
336
+ valor_issqn: Optional[float]
337
+ retencao: Optional[str]
338
+
339
+
340
+ class NfseTributacaoFederal(TypedDict, total=False):
341
+ situacao_pis_cofins: Optional[str]
342
+ base_calculo_pis_cofins: Optional[float]
343
+ aliquota_pis: Optional[float]
344
+ valor_pis: Optional[float]
345
+ aliquota_cofins: Optional[float]
346
+ valor_cofins: Optional[float]
347
+ irrf: Optional[float]
348
+ contribuicoes_sociais_retidas: Optional[float]
349
+ contribuicao_previdenciaria_retida: Optional[float]
350
+
351
+
352
+ class NfseResponse(TypedDict, total=False):
353
+ request_id: str
354
+ chave: str
355
+ numero_nfse: Optional[str]
356
+ codigo_municipio_emissor: Optional[str]
357
+ data_geracao: Optional[str]
358
+ versao: Optional[str]
359
+ dps: Optional[dict]
360
+ situacao: Optional[dict] # codigo/descricao; não indica cancelamento
361
+ emitente: Optional[NfseEmitente]
362
+ tomador: Optional[NfsePessoa]
363
+ intermediario: Optional[NfsePessoa]
364
+ servico: Optional[NfseServico]
365
+ tributacao_municipal: Optional[NfseTributacaoMunicipal]
366
+ tributacao_federal: Optional[NfseTributacaoFederal]
367
+ total_tributos: List[dict]
368
+ informacoes_complementares: Optional[str]
369
+ ambiente_gerador: Optional[str]
370
+ cached: bool
371
+ danfse_pdf_base64: Optional[str] # só com danfse=True
372
+ aviso: Optional[str]
@@ -1 +0,0 @@
1
- __version__ = "0.1.0"
File without changes
File without changes