/* endereço local da Makenfe

localhost:90\nfephp\exemplos\NFe\4.00testaMakeNFe.php

C:\Apache24\htdocs\nfephp\exemplos\NFe\4.00testaMakeNFe.php

*/

delimiter $$

/* id da filial emissora da nota fiscal */
create table nfe_filial (
	id				int not null auto_increment primary key,
	cnpj			numeric( 16) not null ,
	ds_filial		varchar( 40) not null ,
	id_cep	  		varchar( 08) not null , -- $CEP = '72910000';
    ds_endereco		varchar(100) not null , -- $xLgr = 'Av. Rio de Janeiro';
	ds_numero 		varchar( 20) not null , -- $nro = 's/n';
	ds_complemento	varchar( 50) null     , -- $xCpl = 'Qd. 38 Lt. 4,5 e 34';
	
	nm_bairro 		varchar( 50) not null , -- $xBairro = 'Jardim Pinheiros I';
	nm_cidade 		varchar( 50) not null , -- $xMun = 'Águas Lindas de Goiás';
	ds_uf	  		varchar( 02) not null , -- $UF = 'GO';
	ds_pais			varchar( 50) not null , -- $xPais = 'Brasil';
	nr_telefone		numeric( 15) not null , -- $fone = '6239324097';

	/* informações vindas do IBGE  */
	id_municipio	numeric( 08) not null , -- $cMun = '5200258';	
	id_uf			numeric( 02) not null , -- $cUf  = '52' codigo numerico do estado IBGE
	id_pais			numeric( 05) not null ,  -- $cPais= '1058';	

	/*  controles de edição do usuário final */
	ts_atualizacao 	datetime not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
)$$


/* cabeçalho da nfe */
create table nfe_cab(
	id			 int not null auto_increment primary key , -- '00000010'; --numero aleatório da NF
	id_filial	 int 		  not null , -- utilizado para no caso de filiais 
	ds_natureza  varchar( 20) not null , -- 'Venda de Produto'; --natureza da operação
	id_pagamento int 				   , -- $indPag 	= '1' ; --0=Pagamento à vista; 1=Pagamento a prazo; 2=Outros
	nr_modelo	 numeric( 02) not null , -- $mod 	= '55'; --modelo da NFe 55 ou 65 essa última NFCe
	ds_serie	 varchar( 02) not null , -- $serie 	= '1' ; --serie da NFe
	/* campo com numeração de controle com o retorno do sefaz */
	nr_nota		 int not null	   , -- $nNF 	= '10'; -- numero da NFe
	dt_emissao   datetime not null , -- $dhEmi   = date("Y-m-d\TH:i:sP");//Formato: “AAAA-MM-DDThh:mm:ssTZD” (UTC - Universal Coordinated Time).
	dt_saida	 datetime not null , -- dhSaiEnt = date("Y-m-d\TH:i:sP");//Não informar este campo para a NFC-e.
    tp_nota      numeric( 01) Default 1, -- $tpNF    = '1';
	id_destino	 numeric( 01) , -- $idDest  = '1'; --1=Operação interna; 2=Operação interestadual; 3=Operação com exterior.
	tp_geracao	 numeric( 02) , /*
	$tpImp = '1'; --0=Sem geração de DANFE; 1=DANFE normal, Retrato; 2=DANFE normal, Paisagem;
				  --3=DANFE Simplificado; 4=DANFE NFC-e; 5=DANFE NFC-e em mensagem eletrônica
				  //(o envio de mensagem eletrônica pode ser feita de forma simultânea com a impressão do DANFE;
				  --usar o tpImp=5 quando esta for a única forma de disponibilização do DANFE).*/
	tp_emissao	 numeric( 02) , /* 
	$tpEmis = '1'; --1=Emissão normal (não em contingência);
				   --2=Contingência FS-IA, com impressão do DANFE em formulário de segurança;
				   --3=Contingência SCAN (Sistema de Contingência do Ambiente Nacional);
				   --4=Contingência DPEC (Declaração Prévia da Emissão em Contingência);
				   --5=Contingência FS-DA, com impressão do DANFE em formulário de segurança;
				   --6=Contingência SVC-AN (SEFAZ Virtual de Contingência do AN);
				   --7=Contingência SVC-RS (SEFAZ Virtual de Contingência do RS);
				   --9=Contingência off-line da NFC-e (as demais opções de contingência são válidas também para a NFC-e);
				   --Nota: Para a NFC-e somente estão disponíveis e são válidas as opções de contingência 5 e 9.*/
	nr_ambiente	 numeric( 01) Default 2, -- $tpAmb  = '2'; --1=Produção; 2=Homologação
	nr_finalnfe	 numeric( 01) , -- $finNFe = '1'; --1=NF-e normal; 2=NF-e complementar; 3=NF-e de ajuste; 4=Devolução/Retorno.
	id_finaltipo numeric( 01) , -- $indFinal = '0'; --0=Normal; 1=Consumidor final;
	id_presenca  numeric( 02) , 
	/*
	$indPres = '9'; --0=Não se aplica (por exemplo, Nota Fiscal complementar ou de ajuste);
               --1=Operação presencial;
               --2=Operação não presencial, pela Internet;
               --3=Operação não presencial, Teleatendimento;
               --4=NFC-e em operação com entrega a domicílio;
               --9=Operação não presencial, outros.*/
	id_emissao	numeric( 02)  ,
	/*
	$procEmi = '0'; --0=Emissão de NF-e com aplicativo do contribuinte;
                --1=Emissão de NF-e avulsa pelo Fisco;
                --2=Emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site do Fisco;
                --3=Emissão NF-e pelo contribuinte com aplicativo fornecido pelo Fisco. */
	st_emissao	int default 0 , -- status de processamento da nfe 

	/*  controles de edição do usuário final */
	ts_atualizacao 	datetime not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
)$$

/* informações do destinarario */
create table nfe_cliente(
	id_documento 	int not null auto_increment primary key , -- identificação do cliente
	nr_cnpj		 	numeric( 16) null	 , -- destinatário $CNPJ = '23401454000170';	
	nr_cpf			numeric( 11) null	 ,-- $CPF = '';
	fl_emissao		bit not null 		 ,
	id_estrangeiro	varchar( 50) null	 , -- $idEstrangeiro = '';
	nm_cliente		varchar(100) not null, -- $xNome = 'Chinnon Santos - Tecnologia e Assessoria em Softwares';
	nr_ietipo		varchar( 02) not null, -- $indIEDest = '1';
	id_ie			numeric( 16) null	 , -- $IE = '';
	ds_ieuf			varchar( 02) null	 , -- $ISUF = '';
	ds_iemunicipio	varchar( 12) not null, -- $IM = '4128095';
	id_email		varchar( 50) null	 , -- $email = 'nfe@chinnonsantos.com';
/*  controles de edição do usuário final */
	ts_atualizacao 	datetime not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
)$$

/* Endereço do destinatário */
create table nfe_cliente_endereco(
	id_documento 	int not null auto_increment primary key , -- identificação do cliente
	id_cep	  		varchar( 08) , 		   -- $CEP = '74310010';
    ds_endereco		varchar(100) not null ,-- $xLgr = 'Av. Vila Alpes';
	ds_numero 		varchar( 20) not null ,-- $nro = 's/n';
	ds_complemento	varchar( 50) null     ,-- $xCpl = '';
	
	nm_bairro 		varchar( 50) not null , -- $xBairro = 'Vila Alpes';
	nm_cidade 		varchar( 50) not null , -- $xMun = 'Goiânia';
	ds_uf	  		varchar( 02) not null , -- $UF = 'GO';
	ds_pais			varchar( 50) not null , -- $xPais = 'Brasil';
	nr_telefone		numeric( 15) not null , -- $fone = '6292779404';

	/* informações vindas do IBGE  */
	id_municipio	numeric( 08) not null , -- $cMun = '5208707';
	id_uf			numeric( 02) not null , -- $cUf  = '52' codigo numerico do estado IBGE
	id_pais			numeric( 05) not null , -- $cPais = '1058';

	/*  controles de edição do usuário final */
	ts_atualizacao 	datetime not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
)$$

/* informações do produto */
create table nfe_produto(
	id			int not null auto_increment primary key,
	ds_produto	varchar( 100) not null ,
	id_ncm		numeric( 16) , -- 'NCM' => '22030000',
	ds_extipi	varchar( 02) , -- 'EXTIPI' => '',
    nr_cfop		int	, -- 'CFOP' => '5101',
	ds_unidcom	varchar( 10), -- 'uCom' => 'Un',
	ds_unidtrib	varchar( 10), -- 'uTrib' => 'Lt',
	vl_unidcom	numeric( 15,02) not null , -- 'vUnCom' => '210.00',
    
/*  controles de edição do usuário final */
	ts_atualizacao 	datetime not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
)$$

/* informações do produto */
create table nfe_produto_ean(
	id			int not null auto_increment primary key	,
	id_ean		numeric( 15), -- 13 ean e 14dig para caixas 'cEAN' => '97899072659522',
	id_eabtrib	numeric( 15), -- 13 ean e 14dig para caixas 'cEANTrib' => '',
    nr_fci		varchar( 20), -- 'nFCI' => '' numero ficha de controle de importação F76B0071 exemplo oracle
	vl_unidtrib numeric( 15,02) not null , -- 'vUnTrib' => '7.00',

	/*  controles de edição do usuário final */
	ts_atualizacao 	datetime not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
)$$

/* informações do item da nota nfe, produto */
create table nfe_item(
	id			int not null auto_increment primary key, -- numero da id nfe
	id_nfe		int, -- numero da id nfe
	nr_item 	numeric( 03) not null , -- 'nItem' => 1,
    id_produto	int not null 		  , -- 'cProd' => '15',
	id_ean		numeric( 15) not null , -- 'cEAN' => '97899072659522',
	nr_qtdecom	int not null   , -- 'qCom' => '4',
    vl_unidcom	numeric( 15,02) not null , -- 'vUnCom' => '210.00',
    vl_totalcom	numeric( 15,02) not null , -- 'vProd' => '840.00',
	nr_qtdetrib	numeric( 15,02) not null , -- 'qTrib' => '120',
	vl_unidtrib numeric( 15,02) not null , -- 'vUnTrib' => '7.00',
    vl_frete	numeric( 15,02) not null default 0, -- 'vFrete' => '',
    vl_seguro	numeric( 15,02) not null default 0, -- 'vSeg' => '',
	vl_desconto	numeric( 15,02) not null default 0, -- 'vDesc' => '',
	vl_outro	numeric( 15,02) not null default 0, -- 'vOutro' => '',
	fl_indtotal int , -- 'indTot' => '1',
    nr_pedido	int , -- 'xPed' => '16',
    nr_item		int , -- 'nItemPed' => '1',
    nr_fci		varchar( 20), -- 'nFCI' => '' numero ficha de controle de importação F76B0071 exemplo oracle

	/*  controles de edição do usuário final */
	ts_atualizacao 	datetime not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
)$$

/* final da nota em observações 
$nItem = 2; //produtos 2
$vDesc = 'Caixa com 1000 unidades';
*/

/* tabela de impostos composta por estado / produto com valores de ICMS + PIS + CODFINS*/
 create table nfe_produto_imposto(
	id			int not null auto_increment primary key,
	id_produto	int not null ,
	ds_uf	  	varchar( 02) not null , -- $UF = 'GO'
	tp_imposto	varchar( 20) not null , -- ISENTO, TRIBUTADO E NAO TRIBUTADO
	vp_icms		numeric( 04, 02) not null default 0 , /* $pICMS = '27.00' Alíquota do Estado de GO p/ 'NCM 2203.00.00 - Cervejas de Malte, inclusive Chope'*/
	vp_pis		numeric( 04, 02) not null default 0 ,
	vp_cofins	numeric( 04, 02) not null default 0 ,
	vp_RedBC	numeric( 04, 02) not null default 0 ,
	vp_MVAST	numeric( 04,02) null, -- $pMVAST = '';
	vp_RedBCST	numeric( 04,02) null, -- $pRedBCST = '';
	vp_ICMSST	numeric( 04,02) null, -- $pICMSST = '';
	vp_Dif		numeric( 04,02) null, -- $pDif = '';

	/*  controles de edição do usuário final */
	ts_atualizacao 	datetime not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
)$$

/* tabela detalhada do imposto do item */
create table nfe_item_imposto(
	id 				int not null auto_increment primary key,
	nr_origem		numeric( 04,02), -- $orig 	= '0';
	ds_cst			numeric( 04,02), -- $cst 	= '00'; // Tributado Integralmente
	ds_modBC		numeric( 04,02), -- $modBC = '3';
	vp_RedBC		numeric( 04,02), -- nfe_produto.vp_RedBC
	vl_BC			numeric( 15,02), -- $vBC = '840.00'; // = $qTrib * $vUnTrib;
	vl_ICMS			numeric( 15,02), /* $vICMS = '226.80'; // = $vBC * ( $pICMS / 100 ) */
	vl_ICMSDes		numeric( 15,02), -- $vICMSDeson = '';
	ds_motICMSDes	varchar( 50),	-- $motDesICMS = '';
	ds_motBCST		varchar( 50),	-- $modBCST = '';
	vl_BCST			numeric( 15,02),-- $vBCST = '';
	vl_ICMSST		numeric( 15,02),-- $vICMSST = '';
	vl_ICMSDif		numeric( 15,02),-- $vICMSDif = '';
	vl_ICMSOp		numeric( 15,02),-- $vICMSOp = '';
	vl_BCSTRet		numeric( 15,02),-- $vBCSTRet = '';
	vl_ICMSSTRet 	numeric( 15,02),-- $vICMSSTRet = '';

	/*  controles de edição do usuário final */
	ts_atualizacao 	datetime not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
)$$
