Metadata-Version: 2.1
Name: PYBRDOC
Version: 1.1.5
Summary: Biblioteca para ajudar na validação de documentos em sistemas e verificação da sua existencia no banco de dados da Receita Federal
Home-page: 
Author: Heytor Norberth Leite da Silva
Author-email: heytornorberth2@gmail.com
License: MIT
        classifiers =
        Development Status :: 3 - Alpha
        Environment :: Web Environment
        Intended Audience :: Developers
        License :: OSI Approved :: MIT License
        Natural Language :: English
        Natural Language :: Portuguese
        Natural Language :: Portuguese (Brazilian)
        Programming Language :: Python >= 3.8
Requires-Python: >=3.8
Description-Content-Type: text/markdown


# PYBRDOC

PYBRDOC é uma biblioteca que visa fornecer componentes para trabalhar com tipos de dados específicos da realidade brasileira.

Esta biblioteca surgiu mediante a necessidade de se ter tipos específicos que possibilitem lidar com documentos de identificação próprios do Brasil, como é o caso do Cadastro de Pessoa Física (CPF) e do Cadastro Nacional de Pessoa Jurídica (CNPJ).

Pode servir bastante nas implimentações de códigos que precisam fazer a validação desses determinados documentos.

Além de conter classes que representam o modelo computacional dos principais documentos brasileiros, esta biblioteca também disponibiliza classes que permitem a validação e a geração de números válidos para estes documentos; sendo estas últimas disponibilizadas exclusivamente para fins de testes computacionais.

> This software is coded and documented in portuguese only as it is intended to be used to generate the necessary files for the brazilian government regarding to digital bookkeeping.

## Requisitos

  * python

## Como instalar

    $ pip install PYBRDOC

## Objetivos do Projeto

A ideia inicial do projeto e unificar em uma única biblioteca módulos que permitam representar computacionalmente e validar documentos brasileiros - inicialmente CPF e CNPJ, além de permitir a geração de números válidos para estes documentos.

## Compatibilidade do Projeto

O projeto inicialmente suportará apenas Python 3.6.5+.

Outras linguagens de programação poderão ter versões especificas conforme minha disponibilidade de tempo.

## Status do Projeto

O projeto está em fase inicial de desenvolvimento.

| Módulo                              |  Situação       |
|:------------------------------------|:---------------:|
| [DocumentoIdentificacao](#di)       |Funcional        |
| [CPF](#cpf)                         |Funcional        |
| [ValidadorCpf](#vcpf)               |Funcional        |
| [GeradorCpf](#gcpf)                 |Funcional        |
| [Cnpj](#cnpj)                       |Funcional        |
| [ValidadorCnpj](#vcnpj)             |Funcional        |
| [GeradorCnpj](#gcnpj)               |Funcional        |
| [InscricaoEstadual](#ie)            |Funcional        |
| [ValidadorInscricaoEstadual](#vie)  |Funcional        |
| [GeradorInscricaoEstadual](#gie)    |Não implementado |
| [InscricaoSuframa](#is)             |Funcional        |
| [ValidadorSuframa](#vs)             |Funcional        |
| [GeradorSuframa](#gs)               |Funcional        |


### <a name="di"></a> DocumentoIdentificacao

Classe abstrata, não podendo ser instanciada diretamente, serve como base para todas as classes que representam um documento de identificação ou qualquer outro documento brasileiro que necessite de validação.

### <a name="cpf"></a> CPF

Classe usada para representar em código Pyhton um _Cadastro de Pessoa Física_ (CPF); permitindo representá-lo textualmente, com a devida formatação e identificar a sua validade.

#### Utilização

    >>> cpf = CPF('52513127765')
    >>> cpf
    '525.131.277-65'

    >>> cpf.isValid
    True

    >>> cpf.rawValue
    52513127765

    >>> cpf = CPF('abcdefghijk')
    >>> cpf.isValid
    False

    >>> print(cpf)
    abcdefghijk

    >>> print(cpf.rawValue)
    abcdefghijk

> Independente do conteúdo passado ao se criar uma instância de CPF, **sempre** obter-se-á uma instância deste. Caberá consultar a propriedade __isValid__ de uma instância de CPF para verificar se esta é válida ou não.

> A representação textual de uma instância de CPF só será exibida caso esta instância contenha um número válido de CPF; ao contrário será exibida a _string_ utilizada para criá-la.

> Para obter a _string_ utilizada ao instanciar um CPF, basta acessar a propriedade **rawValue** da instância criada.

### <a name="vcpf"></a> ValidadorCpf

Classe responsável por validar uma instância de CPF ou uma _string_ contendo a representação numérica de um CPF.

#### Utilização

    >>> cpf = CPF('abcdefghijk')
    >>> ValidadorCpf.validar(cpf)
    False

    >>> ValidadorCpf.validar('123.456.789-00')
    False

    Foi criado um CPF válido, porém foi digitado um caractere de separação diferente dos caracteres esperados (.-/ ). Mesmo assim, o validador informa tratar-se de um CPF correto
    >>> cpf = CPF('508,697,212-40')
    >>> ValidadorCpf.validar(cpf)
    True

### <a name="gcpf"></a> GeradorCpf

Classe responsável por gerar aleatoriamente um CPF válido.

#### Utilização

    >>> cpf = GeradorCpf.gerar()
    >>> cpf.isValid
    True

### <a name="cnpj"></a> Cnpj

Classe usada para representar em código Pyhton um _Cadastro Nacional de Pessoa Jurídica_ (CNPJ); permitindo representá-lo textualmente, com a devida formatação e identificar a sua validade.

#### Utilização

	>>> cnpj = Cnpj('abcdefghijklmn')
	>>> cnpj.isValid
	False

	>>> cnpj = Cnpj('12345678901234')
	>>> cnpj.isValid
	False

	>>> cnpj = Cnpj('19.658.147/0001-0O')
	>>> cnpj.isValid
	False

	>>> cnpj = Cnpj('19.658.147/0001-00')
	>>> cnpj.isValid
	True

> Independente do conteúdo passado ao se criar uma instância de CNPJ, **sempre** obter-se-á uma instância deste. Caberá consultar a propriedade __isValid__ de uma instância de CNPJ para verificar se esta é válida ou não.

> A representação textual de uma instância de CNPJ só será exibida caso esta instância contenha um número válido de CNPJ; ao contrário será exibida a _string_ utilizada para criá-la.

> Para obter a _string_ utilizada ao instanciar um CNPJ, basta acessar a propriedade **rawValue** da instância criada.

### <a name="vcnpj"></a> ValidadorCnpj

Classe responsável por validar uma instância de CNPJ ou uma _string_ contendo a representação numérica de um CNPJ.

#### Utilização

	>>> cnpj = Cnpj('abcdefghijklmn')
	>>> ValidadorCnpj.validar(cnpj)
	False

	>>> cnpj = Cnpj('19.658.147/0001-0O')
	>>>ValidadorCnpj.validar(cnpj)
	False

	>>> ValidadorCnpj.validar('12345678901234')
	False

	>>> cnpj = Cnpj('34  633 423,0001/60')
	>>> ValidadorCnpj.validar(cnpj)
	True

	>>> ValidadorCnpj.validar('05.692.744/0001-38')
	True

### <a name="gcnpj"></a> GeradorCnpj

Classe responsável por gerar aleatoriamente um CNPJ válido.

#### Utilização

    >>> cnpj = GeradorCnpj.gerar()
    >>> cnpj.isValid
    True

#### Novidade!!! Consulta Online
Adicionado a função consultar CNPJ, que por meio de uma API da receita federal "ReceitaWS", consegue informar os dados sobre o CNPJ desejado.

### <a name="is"></a> InscricaoSuframa

Representa o número de inscrição na Superintendência da Zona Franca de Manaus (SUFRAMA)

> A SUFRAMA mantém controle sobre as empresas com insentivo fiscal, identificando-as através do número de _Inscrição SUFRAMA_.

A composição deste indicador é: _SS.NNNN.LLD_, onde:

**SS** representa o __código do setor de atividade__ da empresa, conforme exemplo abaixo:

| Código  | Descrição                   |
| :----:  | :---------------------------|
| 01 e 02 | Cooperativa                 |
| 10 e 11 | Comércio                    |
| 20      | Indústria com projeto pleno |
| 60      | Serviços                    |

**NNNN** número sequencial

**LL** representa o código da licalidade da Unidade Administrativa da Suframa que habilitou a empresa, conforme exemplo abaixo:


| Código | Descrição   |
| :----: | :-----------|
|   01   | Manaus      |
|   10   | Boa Vista   |
|   30   | Porto Velho |

**D** dígito verificador

#### Validação

* Campo numérico com 9 posições (incluindo o dígito verificador).
* Pode iniciar por 0 (zero), mas não pode iniciar por 00.
* Dígito verificador calculado por [__módulo 11__](https://pt.wikipedia.org/wiki/D%C3%ADgito_verificador#Módulo_11 "Método de cálculo do dígito verificador usando Módulo 11"), pesos 2 a 9.

#### Utilização

    >>> x = InscricaoSuframa('01.1234.129')
    >>> x.rawValue
    '011234129'
    >>> print(x)
    01.1234.129
    >>> x.isValid
    False

    >>> x = InscricaoSuframa('101580100')
    >>> x.rawValue
    '101580100'
    >>> print(x)
    10.1580.100
    >>> x.isValid
    True

    >>> x = InscricaoSuframa('1015801OO')
    >>> x.rawValue
    '1015801OO'
    >>> print(x)
    1015801OO
    >>> x.isValid
    False

### <a name="vs"></a> ValidadorSuframa

Valida uma instância de InscricaoSuframa ou uma _string_ contendo a representação numérica de uma Inscrição Suframa.

#### Utilização

    # Validação de uma _string_ representando uma Inscrição Suframa:
    >>> ValidadorSuframa.validar('101580100')
    True

    # Validação de uma _string_ representando uma Inscrição Suframa inválida (contendo caracteres não numéricos):
    >>> ValidadorSuframa.validar('1015801OO')
    False

    # Validação de uma instância de InscriçãoSuframa:
    >>> x = InscricaoSuframa('01.1234.129')
    >>> ValidadorSuframa.validar(x)
    False

### <a name="gs"></a> GeradorSuframa

Gera aleatoriamente uma Inscrição Suframa válida

    >>> x = GeradorSuframa.gerar()
    >>> x.isValid
    True

> **IMPORTANTE**: O __GeradorSuframa__ tem por objetivo ajudar estudantes, programadores, analistas de sistemas e testadores de código a gerar Inscrições Suframa válidas visando auxiliar as rotinas de testes de softwares em desenvolvimento.

> A má utilização dos dados gerados pelo __GeradorSuframa__ é de **total responsabilidade do usuário** desta biblioteca.

> As inscrições são geradas de forma aleatória, respeitando as leis de formação estabelecidas pela SUFRAMA.

### <a name="ie"></a> InscricaoEstadual

Representa, em código Pyhton, uma _Inscrição Estadual_ (IE), ou o registro do contribuinte no cadastro do ICMS mantido pela Receita Estadual; permitindo representá-lo textualmente, com a devida formatação e identificar a sua validade.

#### Utilização

    >>> ie = InscricaoEstadual('613.855.219.926', 'SP')
    >>> ie.isValid
    True
    >>> ie.rawValue
    '613855219926'
    >>> ie.UF
    'SP'
    >>> print(ie)
    613.855.219.926

### <a name="vie"></a> ValidadorInscricaoEstadual

Valida a consistência de uma instância de InscricaoEstadual ou uma _string_ contendo a representação numérica de uma Inscrição Estadual para uma determinada Unidade da Federação, informada juntamente com a representação numérica da IE a qual se deseja validar.

> A validação da Inscrição Estadual para cada Unidade da Federação brasileira, leva em consideração o disposto no [__Convênio 57/59__](http://www.sintegra.gov.br/conv_5795.html "ConvênioICMS 57/59"), como também as orientações e especificidades contidas na página [Conferências de Inscrições Estaduais](http://www.sintegra.gov.br/insc_est.html "Conferência de Inscrições Estaduais") do SINTEGRA.

#### Utilização

    >>> ie = InscricaoEstadual('613.855.219.926', 'SP')
    >>> ValidadorInscricaoEstadual.validar(ie)
    True

    >>> ValidadorInscricaoEstadual.validarStr('207653461', 'RN')
    True
    >>> ValidadorInscricaoEstadual.validarStr('209564598', 'TO')
    False

> **NOTA**: Caso não se deseje utilizar o __ValidadorInscricaoEstadual__, pode-se utilizar o validador específico para uma determinada Unidade da Federação.
<p>Cada Unidade da Federação brasileira possui o seu próprio validador, definido por: **Validador**XX, onde _XX_ deve ser substituído pela sigla da Unidade da Federação desejada.</p>
<p>O Exemplo a seguir mostra como utilizar somente o validador específico para o Ceará, visando validar uma Inscrição Estadual deste Estado:</p>

    >>> from bradocs4py.validadoresie import ValidadorCE
    >>> ValidadorCE.validar('1234567')
    False
    >>> ValidadorCE.validar('50374156-6')
    True

> **IMPORTANTE**: Ao contrário de ValidadorInscricaoEstadual, os validadores específicos de cada UF validam somente uma cadeia de caracteres (_string_) contendo o número representativo da Inscrição Estadual a ser validada.

