-- MySQL Script generated by MySQL Workbench
-- 03/16/17 07:18:28
-- Model: New Model    Version: 2.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema NFeApi_classes
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `NFeApi_classes` ;

-- -----------------------------------------------------
-- Schema NFeApi_classes
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `NFeApi_classes` DEFAULT CHARACTER SET utf8 ;
USE `NFeApi_classes` ;

-- -----------------------------------------------------
-- Table `NFe.Entity.Destinatario`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Destinatario` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Destinatario` (
  `nome` VARCHAR(200) NULL COMMENT 'Nome do destinatário[L:xNome]',
  `cpf` VARCHAR(11) NOT NULL COMMENT 'CPF do cliente[L:CPF]',
  `email` VARCHAR(100) NULL COMMENT 'Informar o e-mail do destinatário. O campo pode ser utilizado para informar o e-mail de recepção da NF-e indicada pelo destinatário[L:email]',
  `indicador` ENUM('pagamento', 'isento', 'nenhum') NOT NULL DEFAULT 'self::INDICADOR_NENHUM' COMMENT 'Indicador da IE do destinatário:\n1 – Contribuinte ICMS pagamento à vista;\n2 – Contribuinte isento de inscrição;\n9 – Não Contribuinte[E:1|2|9][L:indIEDest][F:self::INDICADOR_NENHUM]')
ENGINE = InnoDB
COMMENT = 'Cliente ou destinatário pessoa física ou jurídica que está comprando os produtos e irá receber a nota fiscal[L:dest][H:Pessoa][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Produto`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Produto` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Produto` (
  `item` INT NULL COMMENT 'Número do Item do Pedido de Compra - Identificação do número do item do pedido de Compra[L:nItemPed]',
  `pedido` VARCHAR(45) NULL COMMENT 'informar o número do pedido de compra, o campo é de livre uso do emissor[L:xPed]',
  `codigo` VARCHAR(6) NOT NULL COMMENT 'Código do produto ou serviço. Preencher com CFOP caso se trate de itens não relacionados com mercadorias/produto e que o contribuinte não possua codificação própria\nFormato ”CFOP9999”.[L:cProd]',
  `codigo_tributario` VARCHAR(60) NOT NULL COMMENT 'Código do produto ou serviço. Preencher com CFOP caso se trate de itens não relacionados com mercadorias/produto e que o contribuinte não possua codificação própria\nFormato ”CFOP9999”.[L:cEANTrib]',
  `codigo_barras` VARCHAR(14) NOT NULL COMMENT 'GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras[L:cEAN]',
  `descricao` VARCHAR(120) NOT NULL COMMENT 'Descrição do produto ou serviço[L:xProd]',
  `unidade` ENUM('unidade', 'peca', 'metro', 'grama', 'litro') NOT NULL DEFAULT 'self::UNIDADE_UNIDADE' COMMENT 'Unidade do produto, Não informar a grandeza[L:uCom][E:UN|PC|m|g|L][F:self::UNIDADE_UNIDADE]',
  `multiplicador` INT NOT NULL DEFAULT 1 COMMENT 'Este campo deverá ser preenchido com:\n0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd)\n1  – o valor do item (vProd) compõe o valor total da NF-e (vProd)[L:indTot][D][F:1]',
  `preco` DECIMAL(19,4) NOT NULL COMMENT 'Valor unitário de comercialização  - alterado para aceitar 0 a 10 casas decimais e 11 inteiros[L:vProd]',
  `quantidade` DOUBLE NOT NULL COMMENT 'Quantidade Comercial  do produto, alterado para aceitar de 0 a 4 casas decimais e 11 inteiros.[L:qCom]',
  `tributada` DOUBLE NOT NULL COMMENT 'Informa a quantidade tributada[L:qTrib]',
  `peso` VARCHAR(45) NOT NULL DEFAULT 'new Peso()' COMMENT 'Informa o peso do produto (Não usado atualmente)[F:new Peso()][S]',
  `excecao` VARCHAR(45) NULL COMMENT 'Código de extensão do IPI[L:EXTIPI]',
  `cfop` INT NOT NULL COMMENT 'Código Fiscal de Operações e Prestações (CFOP)[L:CFOP]',
  `ncm` VARCHAR(8) NOT NULL COMMENT 'Código NCM (8 posições), será permitida a informação do gênero (posição do capítulo do NCM) quando a operação não for de comércio exterior (importação/exportação) ou o produto não seja tributado pelo IPI. Em caso de item de serviço ou item que não tenham produto (Ex. transferência de crédito, crédito do ativo imobilizado, etc.), informar o código 00 (zeros) (v2.0)[L:NCM]',
  `cest` VARCHAR(20) NULL COMMENT ' Código Especificador da Substituição Tributária[L:CEST]',
  `impostos` VARCHAR(20) NOT NULL DEFAULT 'array()' COMMENT 'Lista de impostos incidentes sobre o produto[D][F:array()][S:S][U:impostos|imposto][L:imposto]')
ENGINE = InnoDB
COMMENT = 'Produto ou serviço que está sendo vendido ou prestado e será adicionado na nota fiscal[H:Total][L:prod][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Pessoa`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Pessoa` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Pessoa` (
  `razao_social` VARCHAR(200) NOT NULL COMMENT 'Razão Social ou Nome[L:xNome]',
  `cnpj` VARCHAR(14) NOT NULL COMMENT 'Identificador da pessoa na receita[L:CNPJ]',
  `ie` VARCHAR(20) NOT NULL COMMENT 'Inscrição Estadual[L:IE]',
  `im` VARCHAR(20) NULL COMMENT 'Inscrição Municipal[L:IM]',
  `endereco` VARCHAR(20) NULL DEFAULT 'new Endereco()' COMMENT 'Dados do endereço[L:enderEmit][S][F:new Endereco()]',
  `telefone` VARCHAR(20) NULL COMMENT 'Telefone para contato[L:fone]')
ENGINE = InnoDB
COMMENT = 'Classe base para preenchimento de informações de pessoas físicas e empresas[L:emit][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Endereco`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Endereco` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Endereco` (
  `pais` VARCHAR(100) NOT NULL DEFAULT 'new Pais()' COMMENT 'País do endereço[L:xPais][S][F:new Pais(array(\'codigo\' => 1058, \'nome\' => \'Brasil\'))]',
  `cep` VARCHAR(8) NOT NULL COMMENT 'CEP do endereço[L:CEP]',
  `municipio` VARCHAR(200) NOT NULL DEFAULT 'new Municipio()' COMMENT 'Informa o município do endereço[L:xMun][S][F:new Municipio()]',
  `bairro` VARCHAR(200) NOT NULL COMMENT 'Nome do bairro do endereço[L:xBairro]',
  `logradouro` VARCHAR(200) NOT NULL COMMENT 'Nome da rua ou avenida[L:xLgr]',
  `numero` VARCHAR(20) NOT NULL COMMENT 'Número da casa ou condomínio[L:nro]',
  `complemento` VARCHAR(200) NULL COMMENT 'Complemento do endereço, serve para informar o apartamento e bloco[L:xCpl]')
COMMENT = 'Informação de endereço que será informado nos clientes e no emitente[L:enderEmit][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Core.Nota`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Core.Nota` ;

CREATE TABLE IF NOT EXISTS `NFe.Core.Nota` (
  `id` INT NOT NULL COMMENT 'Chave da nota fiscal[L:Id]',
  `numero` VARCHAR(45) NOT NULL COMMENT 'Número do Documento Fiscal[L:nNF]',
  `emitente` VARCHAR(45) NOT NULL DEFAULT 'new Emitente()' COMMENT 'Emitente da nota fiscal[F:new Emitente()][S][L:emit]',
  `destinatario` VARCHAR(45) NULL DEFAULT 'new Destinatario()' COMMENT 'Destinatário que receberá os produtos[F:new Destinatario()][S][L:dest]',
  `produtos` VARCHAR(45) NOT NULL DEFAULT 'array()' COMMENT 'Produtos adicionados na nota[F:array()][S:S][U:produtos|produto][L:prod]',
  `transporte` VARCHAR(45) NULL DEFAULT 'new Transporte()' COMMENT 'Informações de trasnporte da mercadoria[F:new Transporte()][S][L:transp]',
  `pagamentos` VARCHAR(45) NULL DEFAULT 'array()' COMMENT 'Pagamentos realizados[F:array()][S:S][U:pagamentos|pagamento][L:pag]',
  `data_movimentacao` DATETIME NULL COMMENT 'Data e Hora da saída ou de entrada da mercadoria / produto[L:dhSaiEnt]',
  `data_contingencia` DATETIME NULL COMMENT 'Informar a data e hora de entrada em contingência[L:dhCont]',
  `justificativa` VARCHAR(45) NULL COMMENT 'Informar a Justificativa da entrada em contingência[L:xJust]',
  `modelo` ENUM('nfe', 'nfce') NOT NULL COMMENT 'Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e.[L:mod][[E:55|65]',
  `tipo` ENUM('entrada', 'saida') NOT NULL DEFAULT 'self::TIPO_SAIDA' COMMENT 'Tipo do Documento Fiscal (0 - entrada; 1 - saída)[E:0|1][F:self::TIPO_SAIDA][L:tpNF]',
  `destino` ENUM('interna', 'interestadual', 'exterior') NOT NULL DEFAULT 'self::DESTINO_INTERNA' COMMENT 'Identificador de Local de destino da operação (1-Interna;2-Interestadual;3-Exterior)[E:1|2|3][F:self::DESTINO_INTERNA][L:idDest]',
  `natureza` VARCHAR(60) NOT NULL DEFAULT 'VENDA PARA CONSUMIDOR FINAL' COMMENT 'Descrição da Natureza da Operação[L:natOp][F:\'VENDA PARA CONSUMIDOR FINAL\']',
  `codigo` VARCHAR(8) NOT NULL COMMENT 'Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e.[L:cNF]',
  `indicador` ENUM('avista', 'aprazo', 'outros') NOT NULL DEFAULT 'self::INDICADOR_AVISTA' COMMENT 'Indicador da forma de pagamento: 0 – pagamento à vista; 1 – pagamento à prazo; 2 – outros.[E:0|1|2][F:self::INDICADOR_AVISTA][L:indPag]',
  `data_emissao` DATETIME NOT NULL COMMENT 'Data e Hora de emissão do Documento Fiscal[L:dhEmi]',
  `serie` VARCHAR(45) NOT NULL COMMENT 'Série do Documento Fiscal: série normal 0-889, Avulsa Fisco 890-899, SCAN 900-999[L:serie]',
  `formato` ENUM('nenhuma', 'retrato', 'paisagem', 'simplificado', 'consumidor', 'mensagem') NOT NULL DEFAULT 'self::FORMATO_NENHUMA' COMMENT 'Formato de impressão do DANFE (0-sem DANFE;1-DANFe Retrato; 2-DANFe Paisagem;3-DANFe Simplificado;4-DANFe NFC-e;5-DANFe NFC-e em mensagem eletrônica)[E:0|1|2|3|4|5][F:self::FORMATO_NENHUMA][L:tpImp]',
  `emissao` ENUM('normal', 'contingencia') NOT NULL DEFAULT 'self::EMISSAO_NORMAL' COMMENT 'Forma de emissão da NF-e[E:1|9][F:self::EMISSAO_NORMAL][L:tpEmis]',
  `digito_verificador` VARCHAR(1) NOT NULL COMMENT 'Digito Verificador da Chave de Acesso da NF-e[L:cDV]',
  `ambiente` ENUM('producao', 'homologacao') NOT NULL DEFAULT 'self::AMBIENTE_HOMOLOGACAO' COMMENT 'Identificação do Ambiente: 1 - Produção, 2 - Homologação[E:1|2][F:self::AMBIENTE_HOMOLOGACAO][L:tpAmb]',
  `finalidade` ENUM('normal', 'complementar', 'ajuste', 'retorno') NOT NULL DEFAULT 'self::FINALIDADE_NORMAL' COMMENT 'Finalidade da emissão da NF-e: 1 - NFe normal, 2 - NFe complementar, 3 - NFe de ajuste, 4 - Devolução/Retorno[E:1|2|3|4][F:self::FINALIDADE_NORMAL][L:finNFe]',
  `consumidor_final` ENUM('Y', 'N') NOT NULL DEFAULT 'Y' COMMENT 'Indica operação com consumidor final (0-Não;1-Consumidor Final)[E:1|0][F:\'Y\'][L:indFinal]',
  `presenca` ENUM('nenhum', 'presencial', 'internet', 'teleatendimento', 'entrega', 'outros') NOT NULL COMMENT 'Indicador de presença do comprador no estabelecimento comercial no momento da oepração (0-Não se aplica, ex.: Nota Fiscal complementar ou de ajuste;1-Operação presencial;2-Não presencial, internet;3-Não presencial, teleatendimento;4-NFC-e entrega em domicílio;9-Não presencial, outros)[E:0|1|2|3|4|9][L:indPres]',
  `total` VARCHAR(45) NOT NULL DEFAULT 'new Total()' COMMENT 'Dados dos totais da NF-e[F:new \\NFe\\Entity\\Total()][S][L:total]',
  `adicionais` TEXT NULL COMMENT 'Informações adicionais de interesse do Fisco[L:infAdFisco]',
  `observacoes` VARCHAR(60) NULL COMMENT 'Campo de uso livre do contribuinte informar o nome do campo no atributo xCampo e o conteúdo do campo no xTexto[F:array()][S:S][U:observacoes|observacao][L:obsCont]',
  `informacoes` VARCHAR(60) NULL COMMENT 'Campo de uso exclusivo do Fisco informar o nome do campo no atributo xCampo e o conteúdo do campo no xTexto[F:array()][S:S][U:informacoes|informacao][L:obsFisco]',
  `protocolo` VARCHAR(45) NULL COMMENT 'Protocolo de autorização da nota, informado apenas quando a nota for enviada e autorizada[S][L:protNFe]')
ENGINE = InnoDB
COMMENT = 'Classe base para a formação da nota fiscal[L:infNFe][K:NFe\\Core|NFe\\Core\\]';


-- -----------------------------------------------------
-- Table `NFe.Core.NFCe`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Core.NFCe` ;

CREATE TABLE IF NOT EXISTS `NFe.Core.NFCe` (
  `qrcode_url` VARCHAR(200) NOT NULL COMMENT 'Texto com o QR-Code impresso no DANFE NFC-e[L:qrCode]')
ENGINE = InnoDB
COMMENT = 'Classe para validação da nota fiscal eletrônica do consumidor[H:Nota][K:NFe\\Core|NFe\\Core\\]';


-- -----------------------------------------------------
-- Table `NFe.Core.NFe`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Core.NFe` ;

CREATE TABLE IF NOT EXISTS `NFe.Core.NFe` (
)
ENGINE = InnoDB
COMMENT = 'Classe para validação da nota fiscal eletrônica[H:Nota][K:NFe\\Core|NFe\\Core\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Emitente`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Emitente` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Emitente` (
  `fantasia` VARCHAR(200) NULL COMMENT 'Nome fantasia do da empresa emitente[L:xFant]',
  `regime` ENUM('simples', 'excesso', 'normal') NOT NULL DEFAULT 'self::REGIME_SIMPLES' COMMENT 'Código de Regime Tributário. Este campo será obrigatoriamente preenchido com: 1 – Simples Nacional; 2 – Simples Nacional – excesso de sublimite de receita bruta; 3 – Regime Normal.[L:CRT][F:self::REGIME_SIMPLES][E:1|2|3]')
ENGINE = InnoDB
COMMENT = 'Empresa que irá emitir as notas fiscais[L:emit][H:Pessoa][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Core.SEFAZ`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Core.SEFAZ` ;

CREATE TABLE IF NOT EXISTS `NFe.Core.SEFAZ` (
  `notas` VARCHAR(45) NOT NULL DEFAULT 'array()' COMMENT 'Notas fiscais a serem enviadas para autorização[D][F:array()][S:S][L:NFe][N:Notas|Nota]',
  `configuracao` VARCHAR(45) NOT NULL DEFAULT 'new Ajustes' COMMENT 'Informa a configuração que deverá ser utilizada para o envio[F:new Ajuste()][S]')
ENGINE = InnoDB
COMMENT = 'Classe que envia uma ou mais notas fiscais para os servidores da sefaz[K:NFe\\Core|NFe\\Core\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Pagamento`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Pagamento` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Pagamento` (
  `forma` ENUM('dinheiro', 'cheque', 'credito', 'debito', 'crediario', 'alimentacao', 'refeicao', 'presente', 'combustivel', 'outros') NOT NULL COMMENT 'Forma de Pagamento:01-Dinheiro;02-Cheque;03-Cartão de Crédito;04-Cartão de Débito;05-Crédito Loja;10-Vale Alimentação;11-Vale Refeição;12-Vale Presente;13-Vale Combustível;99 - Outros[L:tPag][E:01|02|03|04|05|10|11|12|13|99]',
  `valor` DECIMAL(19,4) NOT NULL COMMENT 'Valor do Pagamento[L:vPag]',
  `integrado` ENUM('Y', 'N') NOT NULL DEFAULT 'N' COMMENT 'Tipo de Integração do processo de pagamento com o sistema de automação da empresa/1=Pagamento integrado com o sistema de automação da empresa Ex. equipamento TEF , Comercio Eletronico 2=Pagamento não integrado com o sistema de automação da empresa Ex: equipamento POS[L:tpIntegra][E:1|2][F:\'N\']',
  `credenciadora` VARCHAR(14) NOT NULL COMMENT 'CNPJ da credenciadora de cartão de crédito/débito[L:CNPJ]',
  `autorizacao` VARCHAR(100) NOT NULL COMMENT 'Número de autorização da operação cartão de crédito/débito[L:cAut]',
  `bandeira` ENUM('visa', 'mastercard', 'amex', 'sorocred', 'outros') NOT NULL COMMENT 'Bandeira da operadora de cartão de crédito/débito:01–Visa; 02–Mastercard; 03–American Express; 04–Sorocred; 99–Outros[L:tBand][E:01|02|03|04|99]')
ENGINE = InnoDB
COMMENT = 'Pagamento efetuado no pedido[L:pag][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Core.NFSe`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Core.NFSe` ;

CREATE TABLE IF NOT EXISTS `NFe.Core.NFSe` (
)
ENGINE = InnoDB
COMMENT = 'Nota fiscal eletrônica de serviços[H:Nota][K:NFe\\Core|NFe\\Core\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Municipio`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Municipio` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Municipio` (
  `estado` VARCHAR(2) NOT NULL DEFAULT 'new Estado()' COMMENT 'Estado do município[L:UF][S][F:new Estado()]',
  `codigo` INT NOT NULL COMMENT 'Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior.[L:cMun]',
  `nome` VARCHAR(200) NOT NULL COMMENT 'Nome do munícipio[L:xMun]')
ENGINE = InnoDB
COMMENT = 'Município de um endereço[L:municipio][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Pais`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Pais` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Pais` (
  `codigo` INT NOT NULL COMMENT 'Código do país[L:cPais]',
  `nome` VARCHAR(200) NOT NULL COMMENT 'Nome do país[L:xPais]')
ENGINE = InnoDB
COMMENT = 'Informações do pais do emitente ou destinatário[L:pais][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto` (
  `tipo` ENUM('importado', 'nacional', 'estadual', 'municipal') NOT NULL COMMENT 'Tipo de imposto',
  `grupo` ENUM('icms', 'pis', 'cofins', 'ipi', 'ii', 'pisst', 'cofinsst', 'issqn', 'icmsufdest') NOT NULL COMMENT 'Grupo do imposto[E:ICMS|PIS|COFINS|IPI|II|PISST|COFINSST|ISSQN|ICMSUFDest]',
  `tributacao` VARCHAR(10) NOT NULL COMMENT 'Código da situação tributária[L:CST]',
  `aliquota` DOUBLE NOT NULL COMMENT 'Porcentagem do imposto',
  `base` DECIMAL(19,4) NOT NULL COMMENT 'Valor base para cálculo do imposto',
  `valor` DECIMAL(19,4) NOT NULL COMMENT 'Calcula o valor do imposto com base na aliquota e valor base',
  `total` DECIMAL(19,4) NOT NULL COMMENT 'Obtém o valor total do imposto')
ENGINE = InnoDB
COMMENT = 'Classe base dos impostos[L:imposto][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Normal`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Normal` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Normal` (
  `modalidade` ENUM('agregado', 'pauta', 'tabelado', 'operacao') NOT NULL COMMENT 'Modalidade de determinação da BC do ICMS:\n0 - Margem Valor Agregado (%);\n1 - Pauta (valor);\n2 - Preço Tabelado Máximo (valor);\n3 - Valor da Operação.[L:modBC][E:0|1|2|3]')
ENGINE = InnoDB
COMMENT = 'Classe base do ICMS normal[L:ICMS][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Base]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.PIS.Aliquota`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.PIS.Aliquota` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.PIS.Aliquota` (
  `tributacao` ENUM('normal', 'diferenciada') NOT NULL DEFAULT 'self::TRIBUTACAO_NORMAL' COMMENT 'Código de Situação Tributária do PIS.\n 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);\n02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);[E:01|02][L:CST][F:self::TRIBUTACAO_NORMAL]')
ENGINE = InnoDB
COMMENT = 'Aliquota do PIS[L:PISAliq][K:NFe\\Entity\\Imposto\\PIS|NFe\\Entity\\Imposto\\PIS\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.COFINS.Aliquota`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.COFINS.Aliquota` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.COFINS.Aliquota` (
  `tributacao` ENUM('normal', 'diferenciada') NOT NULL DEFAULT 'self::TRIBUTACAO_NORMAL' COMMENT 'Código de Situação Tributária do COFINS.\n 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);\n02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);[E:01|02][L:CST][F:self::TRIBUTACAO_NORMAL]')
ENGINE = InnoDB
COMMENT = 'Contribuição para o Financiamento da Seguridade Social usando porcentagem[L:COFINSAliq][K:NFe\\Entity\\Imposto\\COFINS|NFe\\Entity\\Imposto\\COFINS\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.IPI`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.IPI` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.IPI` (
  `classe` VARCHAR(5) NULL COMMENT 'classe de enquadramento do IPI para Cigarros e Bebidas conforme Atos Normativos editados pela Receita Federal do Brasil.[L:clEnq]',
  `cnpj` VARCHAR(14) NULL COMMENT 'CNPJ do produtor da mercadoria, quando diferente do emitente nas exportações direta ou indireta.[L:CNPJProd]',
  `selo` VARCHAR(60) NULL COMMENT 'código do Selo de Controle do IPI conforme Atos Normativos editados pela Receita Federal do Brasil.[L:cSelo]',
  `quantidade` DOUBLE NULL COMMENT 'quantidade de Selo de Controle do IPI utilizados.[L:qSelo]',
  `enquadramento` VARCHAR(3) NOT NULL DEFAULT '999' COMMENT 'Código de Enquadramento Legal do IPI, informar 999 enquanto a tabela não tiver sido criada pela Receita Federal do Brasil[L:cEnq][F:\'999\']',
  `tributo` VARCHAR(45) NOT NULL COMMENT 'Informa o imposto aplicado[S]')
ENGINE = InnoDB
COMMENT = 'Este grupo só precisa ser informado por emissores que sejam contribuintes do IPI ou em uma operação de importação que tenha incidência de IPI[L:IPI][K:NFe\\Entity\\Imposto|NFe\\Entity\\Imposto\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.PIS.Quantidade`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.PIS.Quantidade` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.PIS.Quantidade` (
  `quantidade` DOUBLE NOT NULL COMMENT 'Quantidade Vendida[L:qBCProd]')
ENGINE = InnoDB
COMMENT = 'Quantidade Vendida x Alíquota por Unidade de Produto[L:PISQtde][K:NFe\\Entity\\Imposto\\PIS|NFe\\Entity\\Imposto\\PIS\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.PIS.Isento`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.PIS.Isento` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.PIS.Isento` (
  `tributacao` ENUM('monofasica', 'zero', 'isenta', 'incidencia', 'suspensao') NOT NULL COMMENT 'Código de Situação Tributária do PIS.\n04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);\n06 - Operação Tributável - Alíquota Zero;\n07 - Operação Isenta da contribuição;\n08 - Operação Sem Incidência da contribuição;\n09 - Operação com suspensão da contribuição;\n[E:04|06|07|08|09][L:CST]')
ENGINE = InnoDB
COMMENT = 'PIS não tributado[L:PISNT][K:NFe\\Entity\\Imposto\\PIS|NFe\\Entity\\Imposto\\PIS\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.PIS.Generico`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.PIS.Generico` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.PIS.Generico` (
  `valor` DECIMAL(19,4) NOT NULL COMMENT 'Valor do PIS[L:vPIS]')
ENGINE = InnoDB
COMMENT = 'PIS para Outras Operações[L:PISOutr][K:NFe\\Entity\\Imposto\\PIS|NFe\\Entity\\Imposto\\PIS\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.COFINS.Generico`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.COFINS.Generico` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.COFINS.Generico` (
  `valor` DECIMAL(19,4) NOT NULL COMMENT 'Valor do PIS[L:vPIS]')
ENGINE = InnoDB
COMMENT = 'PIS para Outras Operações[L:PISOutr][K:NFe\\Entity\\Imposto\\COFINS|NFe\\Entity\\Imposto\\COFINS\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.COFINS.Isento`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.COFINS.Isento` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.COFINS.Isento` (
  `tributacao` ENUM('monofasica', 'st', 'zero', 'isenta', 'incidencia', 'suspensao') NOT NULL COMMENT 'Código de Situação Tributária do COFINS:\n04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);\n05 - Operação Tributável (ST);\n06 - Operação Tributável - Alíquota Zero;\n07 - Operação Isenta da contribuição;\n08 - Operação Sem Incidência da contribuição;\n09 - Operação com suspensão da contribuição;\n[E:04|05|06|07|08|09][L:CST]')
ENGINE = InnoDB
COMMENT = 'PIS não tributado[L:PISNT][K:NFe\\Entity\\Imposto\\COFINS|NFe\\Entity\\Imposto\\COFINS\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.COFINS.Quantidade`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.COFINS.Quantidade` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.COFINS.Quantidade` (
  `quantidade` DOUBLE NOT NULL COMMENT 'Quantidade Vendida[L:qBCProd]')
ENGINE = InnoDB
COMMENT = 'Contribuição para o Financiamento da Seguridade Social usando Quantidade Vendida x Alíquota por Unidade de Produto[L:COFINSQtde][K:NFe\\Entity\\Imposto\\COFINS|NFe\\Entity\\Imposto\\COFINS\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Integral`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Integral` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Integral` (
)
ENGINE = InnoDB
COMMENT = 'Tributação pelo ICMS\n00 - Tributada integralmente, estende de Normal[L:ICMS00][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Normal]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Parcial`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Parcial` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Parcial` (
  `modalidade` ENUM('tabelado', 'negativo', 'positivo', 'neutro', 'agregado', 'pauta') NOT NULL COMMENT 'Modalidade de determinação da BC do ICMS ST:\n0 – Preço tabelado ou máximo  sugerido;\n1 - Lista Negativa (valor);\n2 - Lista Positiva (valor);\n3 - Lista Neutra (valor);\n4 - Margem Valor Agregado (%);\n5 - Pauta (valor).[E:0|1|2|3|4|5][L:modBCST]',
  `margem` DOUBLE NOT NULL COMMENT 'Percentual da Margem de Valor Adicionado ICMS ST[L:pMVAST]',
  `reducao` DOUBLE NOT NULL COMMENT 'Percentual de redução da BC ICMS ST[L:pRedBCST]')
ENGINE = InnoDB
COMMENT = 'Tributação pelo ICMS\n30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária[L:IMCS30][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Base]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Cobranca`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Cobranca` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Cobranca` (
  `normal` VARCHAR(25) NOT NULL DEFAULT 'new Normal()' COMMENT 'Imposto não ST[F:new Normal()][S]')
ENGINE = InnoDB
COMMENT = 'Tributação pelo ICMS\n10 - Tributada e com cobrança do ICMS por substituição tributária, estende de Parcial[L:ICMS10][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Parcial]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Reducao`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Reducao` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Reducao` (
  `reducao` DOUBLE NOT NULL COMMENT 'Percentual de redução da BC[L:pRedBC]')
ENGINE = InnoDB
COMMENT = 'Tributção pelo ICMS\n20 - Com redução de base de cálculo, estende de Normal[L:ICMS20][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Normal]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Isento`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Isento` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Isento` (
  `desoneracao` DECIMAL(19,4) NULL COMMENT 'O valor do ICMS será informado apenas nas operações com veículos beneficiados com a desoneração condicional do ICMS.[L:vICMSDeson]',
  `motivo` ENUM('taxi', 'produtor', 'locadora', 'consular', 'contran', 'suframa', 'venda', 'outros', 'condutor', 'deficiente', 'olimpiadas') NULL COMMENT 'Informar o motivo da desoneração:\n1 – Táxi;\n3 – Produtor Agropecuário;\n4 – Frotista/Locadora;\n5 – Diplomático/Consular;\n6 – Utilitários e Motocicletas da Amazônia Ocidental e Áreas de Livre Comércio (Resolução 714/88 e 790/94 – CONTRAN e suas alterações);\n7 – SUFRAMA;\n8 - Venda a órgão Público;\n9 – Outros\n10- Deficiente Condutor\n11- Deficiente não condutor\n16 - Olimpíadas Rio 2016[L:motDesICMS][E:1|3|4|5|6|7|8|9|10|11|16]')
ENGINE = InnoDB
COMMENT = 'Tributação pelo ICMS\n40 - Isenta \n41 - Não tributada \n50 - Suspensão, estende de Generico[L:ICMS40][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Generico]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Diferido`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Diferido` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Diferido` (
  `operacao` DECIMAL(19,4) NOT NULL COMMENT 'Valor do ICMS da Operação[L:vICMSOp]',
  `diferimento` DOUBLE NOT NULL COMMENT 'Percentual do diferemento[L:pDif]',
  `diferido` DECIMAL(19,4) NOT NULL COMMENT 'Valor do ICMS da diferido[L:vICMSDif]')
ENGINE = InnoDB
COMMENT = 'Tributção pelo ICMS\n51 - Diferimento\nA exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF, estende de Reducao[L:ICMS51][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Reducao]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Cobrado`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Cobrado` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Cobrado` (
  `valor` DECIMAL(19,4) NOT NULL COMMENT 'Informar o valor do ICMS ST retido na UF remetente[L:vICMSSTRet]')
ENGINE = InnoDB
COMMENT = 'Tributação pelo ICMS\n60 - ICMS cobrado anteriormente por substituição tributária[L:ICMS60][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Generico]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Mista`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Mista` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Mista` (
)
ENGINE = InnoDB
COMMENT = 'Tributação pelo ICMS \n70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária, estende de Cobranca[L:ICMS70][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Cobranca]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Generico`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Generico` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Generico` (
)
ENGINE = InnoDB
COMMENT = 'Tributação pelo ICMS\n90 - Outras, estende de Normal[L:ICMS90][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Mista]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Peso`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Peso` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Peso` (
  `liquido` DOUBLE NOT NULL COMMENT 'Peso liquido[E:pesoL]',
  `bruto` DOUBLE NOT NULL COMMENT 'Peso bruto[E:pesoB]')
ENGINE = InnoDB
COMMENT = 'Peso de um produto, utilizado no cálculo do frete[K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Database.Banco`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Database.Banco` ;

CREATE TABLE IF NOT EXISTS `NFe.Database.Banco` (
  `codigo_estado` VARCHAR(45) NOT NULL COMMENT 'Obtém o código IBGE do estado[S]',
  `codigo_orgao` VARCHAR(45) NOT NULL COMMENT 'Obtém o código do orgão por estado[S]',
  `imposto_aliquota` VARCHAR(45) NOT NULL COMMENT 'Obtém a aliquota do imposto de acordo com o tipo[S]',
  `codigo_municipio` VARCHAR(45) NOT NULL COMMENT 'Obtém o código IBGE do município[S]',
  `notas_abertas` VARCHAR(45) NOT NULL COMMENT 'Obtém as notas pendentes de envio, em contingência e corrigidas após rejeitadas[S]',
  `notas_pendentes` VARCHAR(45) NOT NULL COMMENT 'Obtém as notas em processamento para consulta e possível protocolação[S]',
  `notas_tarefas` VARCHAR(45) NOT NULL COMMENT 'Obtém as tarefas de inutilização, cancelamento e consulta de notas pendentes que entraram em contingência[S]',
  `informacao_servico` VARCHAR(45) NOT NULL COMMENT 'Obtém URL de webservices de acordo com o tipo de nota, ambiente e UF[S]')
ENGINE = InnoDB
COMMENT = 'Classe abstrata que permite fornecer códigos, aliquotas e notas pendentes[K:NFe\\Database|NFe\\Database\\]';


-- -----------------------------------------------------
-- Table `NFe.Database.Estatico`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Database.Estatico` ;

CREATE TABLE IF NOT EXISTS `NFe.Database.Estatico` (
  `ibpt` VARCHAR(45) NOT NULL DEFAULT 'new IBPT()' COMMENT 'Classe que fornece aliquotas para implementar a função getImpostoAliquota[F:new IBPT()][S]')
ENGINE = InnoDB
COMMENT = 'Banco estático que fornece os dados através de arquivos em disco[K:NFe\\Database|NFe\\Database\\][H:Banco]';


-- -----------------------------------------------------
-- Table `NFe.Common.Configuracao`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Common.Configuracao` ;

CREATE TABLE IF NOT EXISTS `NFe.Common.Configuracao` (
  `banco` VARCHAR(45) NOT NULL DEFAULT 'new Estatico()' COMMENT 'Banco que fornece informações sobre items da nota como: Códigos e Taxas[S][F:new Estatico()]',
  `emitente` VARCHAR(45) NOT NULL DEFAULT 'new Emitente()' COMMENT 'Emitente da nota fiscal[S][F:new Emitente()]',
  `evento` VARCHAR(45) NULL COMMENT 'Informa a instancia que receberá os eventos do processamento das notas[S]',
  `chave_publica` VARCHAR(45) NOT NULL COMMENT 'Conteúdo da chave pública ou certificado no formato PEM[S]',
  `chave_privada` VARCHAR(45) NOT NULL COMMENT 'Conteúdo da chave privada do certificado no formato PEM[S]',
  `arquivo_chave_publica` VARCHAR(45) NOT NULL COMMENT 'Informa o caminho do arquivo da chave pública ou certificado no formato PEM[S]',
  `arquivo_chave_privada` VARCHAR(45) NOT NULL COMMENT 'Caminho do arquivo da chave privada do certificado no formato PEM[S]',
  `token` VARCHAR(45) NOT NULL COMMENT 'Token do CSC[S]',
  `csc` VARCHAR(45) NOT NULL COMMENT 'Código do contribuinte para emissão de nota fiscal[S]',
  `token_ibpt` VARCHAR(45) NOT NULL COMMENT 'Token IBPT para consulta de impostos online[S]',
  `tempo_limite` VARCHAR(45) NOT NULL DEFAULT '4' COMMENT 'Tempo limite em segundos nas conexões com os Web services, 0 para sem tempo limite[S][F:4]',
  `sincrono` ENUM('Y', 'N') NOT NULL DEFAULT 'Y' COMMENT 'Informa se o processo de autorização da nota é síncrono ou assíncrono[S][F:\'Y\']',
  `offline` ENUM('Y', 'N') NOT NULL COMMENT 'Informa se está operando offline[S]')
ENGINE = InnoDB
COMMENT = 'Fornece informações importante para a geração e envio das notas fiscais[K:NFe\\Common|NFe\\Common\\]';


-- -----------------------------------------------------
-- Table `NFe.Common.Evento`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Common.Evento` ;

CREATE TABLE IF NOT EXISTS `NFe.Common.Evento` (
  `on_nota_gerada` VARCHAR(45) NOT NULL COMMENT 'Chamado quando o XML da nota foi gerado[S]',
  `on_nota_assinada` VARCHAR(45) NOT NULL COMMENT 'Chamado após o XML da nota ser assinado[S]',
  `on_nota_validada` VARCHAR(45) NULL COMMENT 'Chamado após o XML da nota ser validado com sucesso[S]',
  `on_nota_enviando` VARCHAR(45) NOT NULL COMMENT 'Chamado antes de enviar a nota para a SEFAZ[S]',
  `on_nota_contingencia` VARCHAR(45) NOT NULL COMMENT 'Chamado quando a forma de emissão da nota fiscal muda para contigência, aqui deve ser decidido se o número da nota deverá ser pulado e se esse número deve ser cancelado ou inutilizado[S]',
  `on_nota_autorizada` VARCHAR(45) NOT NULL COMMENT 'Chamado quando a nota foi enviada e aceita pela SEFAZ[S]',
  `on_nota_completo` VARCHAR(45) NOT NULL COMMENT 'Chamado quando a emissão da nota foi concluída com sucesso independente da forma de emissão[S]',
  `on_nota_rejeitada` VARCHAR(45) NOT NULL COMMENT 'Chamado quando uma nota é rejeitada pela SEFAZ, a nota deve ser corrigida para depois ser enviada novamente[S]',
  `on_nota_denegada` VARCHAR(45) NOT NULL COMMENT 'Chamado quando a nota é denegada e não pode ser utilizada (outra nota deve ser gerada)[S]',
  `on_nota_pendente` VARCHAR(45) NOT NULL COMMENT 'Chamado após tentar enviar uma nota e não ter certeza se ela foi recebida ou não (problemas técnicos), deverá ser feito uma consulta pela chave para obter o estado da nota[S]',
  `on_nota_processando` VARCHAR(45) NOT NULL COMMENT 'Chamado quando uma nota é enviada, mas não retornou o protocolo que será consultado mais tarde[S]',
  `on_nota_cancelada` VARCHAR(45) NOT NULL COMMENT 'Chamado quando uma nota autorizada é cancelada na SEFAZ[S]',
  `on_nota_erro` VARCHAR(45) NOT NULL COMMENT 'Chamado quando ocorre um erro nas etapas de geração e envio da nota[S]',
  `on_inutilizado` VARCHAR(45) NOT NULL COMMENT 'Chamado quando um ou mais números de notas forem inutilizados[S]',
  `on_tarefa_executada` VARCHAR(45) NOT NULL COMMENT 'Chamado quando uma tarefa é executada[S]',
  `on_tarefa_erro` VARCHAR(45) NOT NULL COMMENT 'Chamado quando ocorre uma falha na execução de uma tarefa[S]')
ENGINE = InnoDB
COMMENT = 'Evento de emissão de nota fiscal eletrônica[K:NFe\\Common|NFe\\Common\\]';


-- -----------------------------------------------------
-- Table `NFe.Database.IBPT`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Database.IBPT` ;

CREATE TABLE IF NOT EXISTS `NFe.Database.IBPT` (
  `imposto` DECIMAL(19,4) NOT NULL COMMENT 'Obtém as aliquotas municipal, estadual, federal e de importação para o NCM informado[S]')
ENGINE = InnoDB
COMMENT = 'Classe que fornece a aliquota de um NCM por estado, também realiza consultas online quando configurado[K:NFe\\Database|NFe\\Database\\]';


-- -----------------------------------------------------
-- Table `NFe.Common.Ajuste`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Common.Ajuste` ;

CREATE TABLE IF NOT EXISTS `NFe.Common.Ajuste` (
  `pasta_xml_base` VARCHAR(45) NOT NULL COMMENT 'Caminho da pasta base para armazenamento dos XML[S]',
  `pasta_xml_inutilizado` VARCHAR(45) NOT NULL COMMENT 'Pasta onde ficam os XML das inutilizações de números de notas[S]',
  `pasta_xml_cancelado` VARCHAR(45) NOT NULL COMMENT 'Pasta onde ficam os XML das notas após serem aceitas e depois canceladas[S]',
  `pasta_xml_pendente` VARCHAR(45) NOT NULL COMMENT 'Pasta onde ficam os XML das notas pendentes de consulta[S]',
  `pasta_xml_denegado` VARCHAR(45) NOT NULL COMMENT 'Pasta onde ficam os XMLs após enviados e denegados[S]',
  `pasta_xml_rejeitado` VARCHAR(45) NOT NULL COMMENT 'Pasta onde ficam os XML das notas após serem enviadas e rejeitadas[S]',
  `pasta_xml_autorizado` VARCHAR(45) NOT NULL COMMENT 'Pasta onde ficam os XML das notas após serem enviados e aceitos pela SEFAZ[S]',
  `pasta_xml_processamento` VARCHAR(45) NOT NULL COMMENT 'Pasta onde ficam os XML das notas em processamento de retorno de autorização[S]',
  `pasta_xml_assinado` VARCHAR(45) NOT NULL COMMENT 'Pasta onde ficam os XMLs após assinado e antes de serem enviados[S]')
ENGINE = InnoDB
COMMENT = 'Configurações padrão para emissão de nota fiscal[H:Configuracao][K:NFe\\Common|NFe\\Common\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Estado`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Estado` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Estado` (
  `codigo` INT NOT NULL COMMENT 'Código do estado (utilizar a tabela do IBGE)[L:cUF]',
  `nome` VARCHAR(200) NULL COMMENT 'Nome do estado (Opcional)[L:xUF]',
  `uf` VARCHAR(2) NOT NULL COMMENT 'Sigla do estado[L:UF]')
ENGINE = InnoDB
COMMENT = 'Estado de origem do emitente ou do destinatário[L:estado][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.Total`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.Total` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.Total` (
)
ENGINE = InnoDB
COMMENT = 'Permite calcular o imposto com base na tabela IBPT[L:vTotTrib][K:NFe\\Entity\\Imposto|NFe\\Entity\\Imposto\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Transporte`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Transporte` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Transporte` (
  `frete` ENUM('emitente', 'destinatario', 'terceiros', 'nenhum') NOT NULL DEFAULT 'self::FRETE_NENHUM' COMMENT 'Modalidade do frete\n0- Por conta do emitente;\n1- Por conta do destinatário/remetente;\n2- Por conta de terceiros;\n9- Sem frete (v2.0)[E:0|1|2|9][L:modFrete][F:self::FRETE_NENHUM]',
  `transportador` VARCHAR(45) NULL DEFAULT 'new Transportador()' COMMENT 'Dados da transportadora[L:transporta][F:new Transportador()][S]',
  `retencao` VARCHAR(45) NULL DEFAULT 'new Tributo()' COMMENT 'Dados da retenção  ICMS do Transporte[L:retTransp][F:new Tributo()][S]',
  `veiculo` VARCHAR(45) NULL DEFAULT 'new Veiculo()' COMMENT 'Dados do veículo[L:veicTransp][S][F:new Veiculo()][S]',
  `reboque` VARCHAR(45) NULL DEFAULT 'new Veiculo()' COMMENT 'Dados do reboque/Dolly (v2.0)[L:reboque][S][F:new Veiculo()][S]',
  `vagao` VARCHAR(45) NULL COMMENT 'Identificação do vagão (v2.0)[L:vagao]',
  `balsa` VARCHAR(45) NULL COMMENT 'Identificação da balsa (v2.0)[L:balsa]',
  `volumes` VARCHAR(45) NULL DEFAULT 'array()' COMMENT 'Dados dos volumes[F:array()][S:S][L:vol][U:volumes|volume]')
ENGINE = InnoDB
COMMENT = 'Dados dos transportes da NF-e[L:transp][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Transporte.Transportador`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Transporte.Transportador` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Transporte.Transportador` (
)
ENGINE = InnoDB
COMMENT = 'Dados da transportadora[H:Destinatario][L:transporta][K:NFe\\Entity\\Transporte|NFe\\Entity\\Transporte\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Transporte.Tributo`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Transporte.Tributo` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Transporte.Tributo` (
  `servico` DECIMAL(19,4) NOT NULL COMMENT 'Valor do Serviço[L:vServ]',
  `cfop` VARCHAR(45) NOT NULL COMMENT 'Código Fiscal de Operações e Prestações[L:CFOP]',
  `municipio` VARCHAR(45) NULL DEFAULT 'new Municipio()' COMMENT 'Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE)[L:cMunFG][S][F:new Municipio()]')
ENGINE = InnoDB
COMMENT = 'ICMS retido do Transportador[L:retTransp][H:Imposto][K:NFe\\Entity\\Transporte|NFe\\Entity\\Transporte\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Transporte.Veiculo`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Transporte.Veiculo` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Transporte.Veiculo` (
  `placa` VARCHAR(20) NOT NULL COMMENT 'Placa do veículo (NT2011/004)[L:placa]',
  `uf` VARCHAR(2) NOT NULL COMMENT 'Sigla da UF[L:UF]',
  `rntc` VARCHAR(45) NULL COMMENT 'Registro Nacional de Transportador de Carga (ANTT)[L:RNTC]')
ENGINE = InnoDB
COMMENT = 'Dados do veículo do transporte[L:veicTransp][K:NFe\\Entity\\Transporte|NFe\\Entity\\Transporte\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Volume`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Volume` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Volume` (
  `quantidade` INT NULL COMMENT 'Quantidade de volumes transportados[L:qVol]',
  `especie` VARCHAR(45) NULL COMMENT 'Espécie dos volumes transportados[L:esp]',
  `marca` VARCHAR(45) NULL COMMENT 'Marca dos volumes transportados[L:marca]',
  `numeracoes` VARCHAR(45) NULL DEFAULT 'array()' COMMENT 'Numeração dos volumes transportados[F:array()][S:S][U:numeracoes|numeracao][L:nVol]',
  `peso` VARCHAR(45) NULL DEFAULT 'new Peso()' COMMENT 'Peso líquido e bruto (em kg)[F:new Peso()][L:pesoLB][S]',
  `lacres` VARCHAR(45) NULL DEFAULT 'array()' COMMENT 'Número dos Lacres[F:array()][S:S][L:lacres][U:lacres|lacre]')
ENGINE = InnoDB
COMMENT = 'Volume de mercadoria para ser entregue[L:vol][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Lacre`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Lacre` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Lacre` (
  `numero` INT NOT NULL COMMENT 'Número do lacre[L:nLacre]')
ENGINE = InnoDB
COMMENT = 'Lacre do volume[L:lacres][K:NFe\\Entity|NFe\\Entity\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.IPI.Aliquota`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.IPI.Aliquota` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.IPI.Aliquota` (
  `tributacao` ENUM('credito', 'entrada', 'tributada', 'saida') NOT NULL DEFAULT 'self::TRIBUTACAO_TRIBUTADA' COMMENT 'Código da Situação Tributária do IPI:\n00-Entrada com recuperação de crédito\n49 - Outras entradas\n50-Saída tributada\n99-Outras saídas[E:00|49|50|99][L:CST][F:self::TRIBUTACAO_TRIBUTADA]')
ENGINE = InnoDB
COMMENT = 'Imposto Sobre Produtos Industrializados usando porcentagem[L:IPITrib][K:NFe\\Entity\\Imposto\\IPI|NFe\\Entity\\Imposto\\IPI\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.IPI.Quantidade`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.IPI.Quantidade` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.IPI.Quantidade` (
  `quantidade` DOUBLE NOT NULL COMMENT 'Quantidade total na unidade padrão para tributação[L:qUnid]',
  `preco` DECIMAL(19,4) NOT NULL COMMENT 'Valor por Unidade Tributável. Informar o valor do imposto Pauta por unidade de medida.[L:vUnid]')
ENGINE = InnoDB
COMMENT = 'Imposto Sobre Produtos Industrializados usando Quantidade x Preço por Unidade de Produto[L:IPITrib][K:NFe\\Entity\\Imposto\\IPI|NFe\\Entity\\Imposto\\IPI\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.IPI.Isento`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.IPI.Isento` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.IPI.Isento` (
)
ENGINE = InnoDB
COMMENT = 'IPI não tributado[L:IPINT][K:NFe\\Entity\\Imposto\\IPI|NFe\\Entity\\Imposto\\IPI\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.II`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.II` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.II` (
  `despesas` DECIMAL(19,4) NOT NULL COMMENT 'Informar o valor das despesas aduaneiras[L:vDespAdu]',
  `valor` DECIMAL(19,4) NOT NULL COMMENT 'Informar a o valor do Imposto de Importação[L:vII]',
  `iof` VARCHAR(45) NOT NULL COMMENT 'Informar o Valor do IOF - Imposto sobre Operações Financeiras[L:vIOF]')
ENGINE = InnoDB
COMMENT = 'Funcionalidade para gerar as informações do II do item de produto da NF-e. Este grupo só precisa ser informado em uma operação de importação que tenha incidência de II.[L:II][K:NFe\\Entity\\Imposto|NFe\\Entity\\Imposto\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.PIS.ST.Aliquota`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.PIS.ST.Aliquota` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.PIS.ST.Aliquota` (
)
ENGINE = InnoDB
COMMENT = 'Este grupo só deve ser informado se o produto for sujeito a PIS por ST, CST = 05, a informação deste grupo não desobriga a informação do grupo PIS.[L:PISST][K:NFe\\Entity\\Imposto\\PIS\\ST|NFe\\Entity\\Imposto\\PIS\\ST\\][H:\\NFe\\Entity\\Imposto\\PIS\\Aliquota]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.PIS.ST.Quantidade`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.PIS.ST.Quantidade` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.PIS.ST.Quantidade` (
)
ENGINE = InnoDB
COMMENT = 'Quantidade Vendida x Alíquota por Unidade de Produto[L:PISST][K:NFe\\Entity\\Imposto\\PIS\\ST|NFe\\Entity\\Imposto\\PIS\\ST\\][H:\\NFe\\Entity\\Imposto\\PIS\\Quantidade]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Partilha`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Partilha` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Partilha` (
  `operacao` DOUBLE NOT NULL COMMENT 'Percentual para determinação do valor  da Base de Cálculo da operação própria.[L:pBCOp]',
  `uf` VARCHAR(45) NOT NULL COMMENT 'Sigla da UF para qual é devido o ICMS ST da operação.[L:UFST]')
ENGINE = InnoDB
COMMENT = 'Partilha do ICMS entre a UF de origem e UF de destino ou a UF definida na legislação\nOperação interestadual para consumidor final com partilha do ICMS  devido na operação entre a UF de origem e a UF do destinatário ou ou a UF definida na legislação. (Ex. UF da concessionária de entrega do  veículos)[L:ICMSPart][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Mista]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Substituto`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Substituto` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Substituto` (
)
ENGINE = InnoDB
COMMENT = 'Grupo de informação do ICMSST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário.[L:ICMSST][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Cobrado]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Simples.Generico`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Simples.Generico` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Simples.Generico` (
)
ENGINE = InnoDB
COMMENT = 'Tributação do ICMS pelo SIMPLES NACIONAL, CRT=1 - Simples Nacional e CSOSN=900 (v2.0)[L:ICMSSN900][K:NFe\\Entity\\Imposto\\ICMS\\Simples|NFe\\Entity\\Imposto\\ICMS\\Simples\\][H:Cobranca]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Simples.Cobranca`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Simples.Cobranca` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Simples.Cobranca` (
  `normal` VARCHAR(25) NOT NULL DEFAULT 'new Normal()' COMMENT 'Imposto não ST[F:new Normal()][S]')
ENGINE = InnoDB
COMMENT = 'Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por substituição tributária[L:ICMSSN201][K:NFe\\Entity\\Imposto\\ICMS\\Simples|NFe\\Entity\\Imposto\\ICMS\\Simples\\][H:Parcial]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Simples.Parcial`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Simples.Parcial` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Simples.Parcial` (
)
ENGINE = InnoDB
COMMENT = 'Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por substituição tributária[L:IMCSSN202][K:NFe\\Entity\\Imposto\\ICMS\\Simples|NFe\\Entity\\Imposto\\ICMS\\Simples\\][H:\\NFe\\Entity\\Imposto\\ICMS\\Parcial]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Simples.Cobrado`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Simples.Cobrado` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Simples.Cobrado` (
  `valor` DECIMAL(19,4) NOT NULL COMMENT 'Valor do ICMS ST retido anteriormente[L:vICMSSTRet]')
ENGINE = InnoDB
COMMENT = 'ICMS cobrado anteriormente por substituição tributária (substituído) ou por antecipação[L:ICMSSN500][K:NFe\\Entity\\Imposto\\ICMS\\Simples|NFe\\Entity\\Imposto\\ICMS\\Simples\\][H:Generico]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Simples.Normal`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Simples.Normal` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Simples.Normal` (
)
ENGINE = InnoDB
COMMENT = 'Tributada pelo Simples Nacional com permissão de crédito[L:ICMSSN101][K:NFe\\Entity\\Imposto\\ICMS\\Simples|NFe\\Entity\\Imposto\\ICMS\\Simples\\][H:\\NFe\\Entity\\Imposto\\ICMS\\Normal]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Simples.Isento`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Simples.Isento` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Simples.Isento` (
)
ENGINE = InnoDB
COMMENT = 'Tributada pelo Simples Nacional sem permissão de crédito[L:ICMSSN102][K:NFe\\Entity\\Imposto\\ICMS\\Simples|NFe\\Entity\\Imposto\\ICMS\\Simples\\][H:Generico]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.COFINS.ST.Aliquota`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.COFINS.ST.Aliquota` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.COFINS.ST.Aliquota` (
)
ENGINE = InnoDB
COMMENT = 'Este grupo só deve ser informado se o produto for sujeito a COFINS por ST, CST = 05, a informação deste grupo não desobriga a informação do grupo COFINS.[L:COFINSST][K:NFe\\Entity\\Imposto\\COFINS\\ST|NFe\\Entity\\Imposto\\COFINS\\ST\\][H:\\NFe\\Entity\\Imposto\\COFINS\\Aliquota]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.COFINS.ST.Quantidade`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.COFINS.ST.Quantidade` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.COFINS.ST.Quantidade` (
)
ENGINE = InnoDB
COMMENT = 'Quantidade Vendida x Alíquota por Unidade de Produto[L:COFINSST][K:NFe\\Entity\\Imposto\\COFINS\\ST|NFe\\Entity\\Imposto\\COFINS\\ST\\][H:\\NFe\\Entity\\Imposto\\COFINS\\Quantidade]';


-- -----------------------------------------------------
-- Table `NFe.Task.Autorizacao`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Autorizacao` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Autorizacao` (
)
ENGINE = InnoDB
COMMENT = 'Processa o retorno após enviar uma nota para a SEFAZ, quando autorizado um protocolo é retornado para anexar na nota ou um recibo é retornado para consultar mais tarde[K:NFe\\Task|NFe\\Task\\][H:Retorno]';


-- -----------------------------------------------------
-- Table `NFe.Task.Protocolo`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Protocolo` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Protocolo` (
  `chave` VARCHAR(45) NOT NULL COMMENT 'Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV.[L:chNFe]',
  `validacao` VARCHAR(45) NULL COMMENT 'Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original.[L:digVal]',
  `numero` VARCHAR(45) NULL COMMENT 'Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano.[L:nProt]')
ENGINE = InnoDB
COMMENT = 'Protocolo de autorização da nota, é retornado pela autorização, recibo ou situação e anexado à nota[K:NFe\\Task|NFe\\Task\\][H:Retorno][L:infProt]';


-- -----------------------------------------------------
-- Table `NFe.Task.Inutilizacao`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Inutilizacao` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Inutilizacao` (
  `id` VARCHAR(45) NOT NULL COMMENT 'Formado por:\nID = Literal\n43 = Código Estado\n15 = Ano\n00000000000000 = CNPJ\n55 = Modelo\n001 = Série\n000000411 = Número Inicial\n000000411 = Número Final\n[L:infInut]',
  `ano` VARCHAR(45) NULL COMMENT 'Ano de inutilização da numeração[L:ano]',
  `cnpj` VARCHAR(45) NULL COMMENT 'CNPJ do emitente[L:CNPJ]',
  `modelo` VARCHAR(45) NULL COMMENT 'Modelo da NF-e (55, 65 etc.)[L:mod]',
  `serie` VARCHAR(45) NULL COMMENT 'Série da NF-e[L:serie]',
  `inicio` INT NULL COMMENT 'Número da NF-e inicial[L:nNFIni]',
  `final` INT NULL COMMENT 'Número da NF-e final[L:nNFFin]',
  `justificativa` VARCHAR(45) NOT NULL COMMENT 'Justificativa do pedido de inutilização[L:xJust]',
  `numero` VARCHAR(45) NULL COMMENT 'Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano.[L:nProt]')
ENGINE = InnoDB
COMMENT = 'Permite inutilizar uma nota ou uma faixa de números de notas fiscais[K:NFe\\Task|NFe\\Task\\][L:inutNFe][H:Retorno]';


-- -----------------------------------------------------
-- Table `NFe.Task.Evento`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Evento` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Evento` (
  `id` VARCHAR(45) NOT NULL COMMENT 'Identificador da TAG a ser assinada, a regra de formação do Id é: \"ID\" + tpEvento +  chave da NF-e + nSeqEvento[L:Id]',
  `orgao` VARCHAR(45) NOT NULL COMMENT 'Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional[L:cOrgao]',
  `identificador` VARCHAR(45) NULL COMMENT 'Identificação do  autor do evento[L:CNPJ|CPF]',
  `chave` VARCHAR(45) NULL COMMENT 'Chave de Acesso da NF-e vinculada ao evento[L:chNFe]',
  `data` DATETIME NOT NULL COMMENT 'Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)[L:dhEvento]',
  `tipo` VARCHAR(45) NULL DEFAULT '110111' COMMENT 'Tipo do Evento[L:tpEvento][F:self::TIPO_CANCELAMENTO]',
  `sequencia` VARCHAR(45) NULL DEFAULT '1' COMMENT 'Seqüencial do evento para o mesmo tipo de evento.  Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.[L:nSeqEvento][F:1]',
  `descricao` VARCHAR(45) NULL DEFAULT 'Cancelamento' COMMENT 'Descrição do Evento[L:descEvento][F:\'Cancelamento\']',
  `numero` VARCHAR(45) NULL COMMENT 'Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 posições ano; 10 seqüencial no ano.[L:nProt]',
  `justificativa` VARCHAR(45) NOT NULL COMMENT 'Justificativa do cancelamento[L:xJust]',
  `email` VARCHAR(45) NULL COMMENT 'email do destinatário[L:emailDest]',
  `modelo` VARCHAR(45) NOT NULL COMMENT 'Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e.[L:mod]',
  `informacao` VARCHAR(45) NOT NULL COMMENT 'Resposta de informação do evento[L:infEvento][S]')
ENGINE = InnoDB
COMMENT = 'Permite cancelar uma nota fiscal por evento[K:NFe\\Task|NFe\\Task\\][H:Retorno][L:infEvento]';


-- -----------------------------------------------------
-- Table `NFe.Task.Status`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Status` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Status` (
  `ambiente` VARCHAR(45) NOT NULL COMMENT 'Identificação do Ambiente:\n1 - Produção\n2 - Homologação[L:tpAmb]',
  `versao` VARCHAR(45) NOT NULL COMMENT 'Versão do Aplicativo que processou a NF-e[L:verAplic]',
  `status` VARCHAR(45) NOT NULL COMMENT 'Código do status da mensagem enviada.[L:cStat]',
  `motivo` VARCHAR(45) NOT NULL COMMENT 'Descrição literal do status do serviço solicitado.[L:xMotivo]',
  `uf` VARCHAR(45) NULL COMMENT 'código da UF de atendimento[L:cUF]')
ENGINE = InnoDB
COMMENT = 'Status das respostas de envios para os servidores da SEFAZ[K:NFe\\Task|NFe\\Task\\][G:o]';


-- -----------------------------------------------------
-- Table `NFe.Task.Envio`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Envio` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Envio` (
  `servico` ENUM('inutilizacao', 'protocolo', 'status', 'cadastro', 'autorizacao', 'retorno', 'recepcao', 'confirmacao', 'evento', 'destinadas', 'download', 'distribuicao') NOT NULL COMMENT 'Tipo de serviço a ser executado[E:NFeInutilizacao|NFeConsulta|NFeStatusServico|CadConsultaCadastro|NFeAutorizacao|NFeRetAutorizacao|NfeRecepcao|NfeRetRecepcao|NFeRecepcaoEvento|NFeConsultaDest|NfeDownloadNF|NFeDistribuicaoDFe]',
  `ambiente` VARCHAR(45) NOT NULL COMMENT 'Identificação do Ambiente:\n1 - Produção\n2 - Homologação',
  `modelo` VARCHAR(45) NOT NULL COMMENT 'Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e.',
  `emissao` VARCHAR(45) NOT NULL COMMENT 'Forma de emissão da NF-e',
  `conteudo` VARCHAR(45) NOT NULL COMMENT 'Conteudo a ser enviado[S]')
ENGINE = InnoDB
COMMENT = 'Envia requisições para os servidores da SEFAZ[K:NFe\\Task|NFe\\Task\\][L:nfeDadosMsg]';


-- -----------------------------------------------------
-- Table `NFe.Task.Retorno`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Retorno` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Retorno` (
  `data_recebimento` DATETIME NULL COMMENT 'Data e hora do recebimento[L:dhRecbto]')
ENGINE = InnoDB
COMMENT = 'Informações de retorno de envios para a SEFAZ[K:NFe\\Task|NFe\\Task\\][H:Status]';


-- -----------------------------------------------------
-- Table `NFe.Task.Recibo`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Recibo` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Recibo` (
  `numero` VARCHAR(45) NOT NULL COMMENT 'Número do Recibo[L:nRec]',
  `tempo_medio` VARCHAR(45) NULL COMMENT 'Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos[L:tMed]',
  `codigo` VARCHAR(45) NULL COMMENT 'Código da Mensagem (v2.0) alterado para tamanho variavel 1-4. (NT2011/004)[L:cMsg]',
  `mensagem` VARCHAR(45) NULL COMMENT 'Mensagem da SEFAZ para o emissor. (v2.0)[L:xMsg]',
  `modelo` VARCHAR(45) NOT NULL COMMENT 'Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e.[L:mod]')
ENGINE = InnoDB
COMMENT = 'Processa a resposta da SEFAZ quando no modo assíncrono, permite também consultar o status de em envio pelo número do recibo[K:NFe\\Task|NFe\\Task\\][H:Retorno][L:retConsReciNFe]';


-- -----------------------------------------------------
-- Table `NFe.Task.Situacao`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Situacao` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Situacao` (
  `chave` VARCHAR(45) NOT NULL COMMENT 'Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV.[L:chNFe]',
  `modelo` VARCHAR(45) NOT NULL COMMENT 'Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e.[L:mod]')
ENGINE = InnoDB
COMMENT = 'Consulta a situação da nota fiscal e retorna o protocolo quando autorizado[K:NFe\\Task|NFe\\Task\\][H:Retorno][L:retConsSitNFe]';


-- -----------------------------------------------------
-- Table `NFe.Task.Tarefa`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Task.Tarefa` ;

CREATE TABLE IF NOT EXISTS `NFe.Task.Tarefa` (
  `id` VARCHAR(45) NULL COMMENT 'Código aleatório e opcional que identifica a tarefa[S]',
  `acao` ENUM('consultar', 'inutilizar', 'cancelar') NOT NULL COMMENT 'Ação a ser realizada sobre o objeto ou recibo[S]',
  `nota` VARCHAR(45) NULL COMMENT 'Nota que será processada se informado[S]',
  `documento` VARCHAR(45) NOT NULL COMMENT 'Informa o XML do objeto, quando não informado o XML é gerado a partir do objeto[S]',
  `agente` VARCHAR(45) NULL COMMENT 'Agente que obteve ou vai obter a resposta, podendo ser: pedido de inutilização (Inutilizacao), recibo (Recibo) ou pedido de cancelamento (Evento)[S]',
  `resposta` VARCHAR(45) NULL COMMENT 'Resposta da tarefa após ser executada[S]')
ENGINE = InnoDB
COMMENT = 'Tarefa de processamento de notas fiscais[K:NFe\\Task|NFe\\Task\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Imposto.ICMS.Base`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Imposto.ICMS.Base` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Imposto.ICMS.Base` (
  `origem` ENUM('nacional', 'estrangeira', 'interno') NOT NULL DEFAULT 'self::ORIGEM_NACIONAL' COMMENT 'origem da mercadoria:\n0 - Nacional\n1 - Estrangeira - Importação direta\n2 - Estrangeira - Adquirida no mercado interno[E:0|1|2][L:orig][F:self::ORIGEM_NACIONAL]')
ENGINE = InnoDB
COMMENT = 'Classe base do ICMS, estende de Imposto[L:ICMS][K:NFe\\Entity\\Imposto\\ICMS|NFe\\Entity\\Imposto\\ICMS\\][H:Imposto]';


-- -----------------------------------------------------
-- Table `NFe.Log.Logger`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Log.Logger` ;

CREATE TABLE IF NOT EXISTS `NFe.Log.Logger` (
  `directory` VARCHAR(200) NOT NULL DEFAULT 'dirname(...)' COMMENT 'Pasta onde serão salvos os arquivos de Log[S][F:dirname(dirname(__DIR__)).\'/logs\']')
ENGINE = InnoDB
COMMENT = 'Salva mensagens de erro, depuração entre outros[K:NFe\\Log|NFe\\Log\\]';


-- -----------------------------------------------------
-- Table `NFe.Entity.Total`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `NFe.Entity.Total` ;

CREATE TABLE IF NOT EXISTS `NFe.Entity.Total` (
  `produtos` DECIMAL(19,4) NOT NULL COMMENT 'Valor Total dos produtos e serviços[L:vProd]',
  `desconto` DECIMAL(19,4) NULL COMMENT 'Valor do Desconto[L:vDesc]',
  `seguro` DECIMAL(19,4) NULL COMMENT 'informar o valor do Seguro, o Seguro deve ser rateado entre os itens de produto[L:vSeg]',
  `frete` DECIMAL(19,4) NULL COMMENT 'informar o valor do Frete, o Frete deve ser rateado entre os itens de produto.[L:vFrete]',
  `despesas` DECIMAL(19,4) NULL COMMENT 'informar o valor de outras despesas acessórias do item de produto ou serviço[L:vOutro]',
  `tributos` DECIMAL(19,4) NULL COMMENT 'Valor estimado total de impostos federais, estaduais e municipais[L:vTotTrib]',
  `complemento` TEXT NULL COMMENT 'Informações complementares de interesse do Contribuinte[L:infCpl]')
ENGINE = InnoDB
COMMENT = 'Dados dos totais da NF-e e do produto[L:prod][K:NFe\\Entity|NFe\\Entity\\]';


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
