Files
workbloomerp-api/install_database.sql
T

1422 lines
69 KiB
SQL
Executable File

-- ============================================================================
-- WORKBLOOM ERP - ESQUEMA DE BANCO DE DADOS (POSTGRESQL)
-- Sistema Completo de Emissão Fiscal:
-- NF-e (55), NFC-e (65), CT-e (57), MDF-e (58) e NFS-e (Serviços ABRASF / Nacional)
-- Multi-empresa (Matriz e Filiais), Séries Dinâmicas e Reforma Tributária (EC 132/2023)
-- ============================================================================
-- Extensão para geração nativa de UUIDs
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
-- ============================================================================
-- 1. AUTENTICAÇÃO E CONTROLE DE ACESSO
-- ============================================================================
CREATE TABLE IF NOT EXISTS "usuario" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"nome_completo" VARCHAR(128) NOT NULL,
"cpf" CHAR(11) DEFAULT NULL,
"email" VARCHAR(255) NOT NULL,
"nome_usuario" VARCHAR(50) NOT NULL,
"senha_hash" VARCHAR(255) NOT NULL,
"ativo" BOOLEAN NOT NULL DEFAULT TRUE,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- ============================================================================
-- 2. CONTABILIDADE, EMPRESAS, CONFIGURAÇÕES FISCAIS E SÉRIES
-- ============================================================================
CREATE TABLE IF NOT EXISTS "contador" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"nome_empresarial" VARCHAR(128) NOT NULL,
"nome_fantasia" VARCHAR(128) DEFAULT NULL,
"cnpj" CHAR(14) DEFAULT NULL,
"cpf" CHAR(11) DEFAULT NULL,
"crc" VARCHAR(20) DEFAULT NULL,
"email" VARCHAR(255) NOT NULL,
"telefone" VARCHAR(20) DEFAULT NULL,
"end_cep" CHAR(8) DEFAULT NULL,
"end_codigo_ibge" CHAR(7) DEFAULT NULL,
"end_logradouro" VARCHAR(255) DEFAULT NULL,
"end_numero" VARCHAR(10) DEFAULT NULL,
"end_complemento" VARCHAR(255) DEFAULT NULL,
"end_bairro" VARCHAR(255) DEFAULT NULL,
"end_cidade" VARCHAR(255) DEFAULT NULL,
"end_uf" CHAR(2) DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS "certificado" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"nome_arquivo" VARCHAR(255) NOT NULL,
"arquivo_binario" BYTEA DEFAULT NULL,
"senha" TEXT NOT NULL,
"data_emissao" DATE NOT NULL,
"data_validade" DATE NOT NULL,
"tp_certificado" VARCHAR(10) NOT NULL DEFAULT 'A1',
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS "empresa" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"matriz_id" BIGINT DEFAULT NULL, -- NULL se for Matriz; ID da Matriz se for Filial
"tipo_estabelecimento" VARCHAR(10) NOT NULL DEFAULT 'MATRIZ', -- 'MATRIZ', 'FILIAL'
"contador_id" BIGINT DEFAULT NULL,
"certificado_id" BIGINT DEFAULT NULL,
"status" VARCHAR(20) NOT NULL DEFAULT 'ATIVO', -- ATIVO, INATIVO, BLOQUEADO
"nome_empresarial" VARCHAR(128) NOT NULL,
"nome_fantasia" VARCHAR(128) DEFAULT NULL,
"cnpj" CHAR(14) NOT NULL,
"inscricao_estadual" VARCHAR(30) DEFAULT NULL,
"inscricao_municipal" VARCHAR(30) DEFAULT NULL,
"cnae_principal" CHAR(7) DEFAULT NULL,
"regime_tributario" SMALLINT NOT NULL DEFAULT 1, -- 1: Simples Nacional, 2: Simples com Excesso, 3: Regime Normal, 4: MEI - Microempreendedor Individual
"dia_do_pagamento" SMALLINT DEFAULT NULL,
-- Endereço
"end_cep" CHAR(8) DEFAULT NULL,
"end_codigo_ibge" CHAR(7) DEFAULT NULL,
"end_logradouro" VARCHAR(255) DEFAULT NULL,
"end_numero" VARCHAR(10) DEFAULT NULL,
"end_complemento" VARCHAR(255) DEFAULT NULL,
"end_bairro" VARCHAR(255) DEFAULT NULL,
"end_cidade" VARCHAR(255) DEFAULT NULL,
"end_uf" CHAR(2) DEFAULT NULL,
-- Contato
"email" VARCHAR(255) DEFAULT NULL,
"email_nfe" VARCHAR(255) DEFAULT NULL,
"telefone" VARCHAR(20) DEFAULT NULL,
-- Timestamps
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- Configurações Fiscais e Ambientes SEFAZ/Prefeituras desacoplados por Empresa e Modelo
CREATE TABLE IF NOT EXISTS "empresa_configuracao_fiscal" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"modelo_documento" VARCHAR(5) NOT NULL, -- '55': NF-e, '65': NFC-e, '57': CT-e, '58': MDF-e, 'NFS': NFS-e
"ambiente_sefaz" SMALLINT NOT NULL DEFAULT 2, -- 1: Produção, 2: Homologação
"tipo_emissao" SMALLINT NOT NULL DEFAULT 1, -- 1: Normal, 9: Contingência Off-line
"versao_layout" VARCHAR(10) NOT NULL DEFAULT '4.00',
-- Tokens de Segurança NFC-e (quando modelo = 65)
"csc_id" VARCHAR(10) DEFAULT NULL,
"csc_token" VARCHAR(128) DEFAULT NULL,
-- Provedores e Acesso NFS-e (quando modelo = NFS)
"provedor_nfse" VARCHAR(50) DEFAULT NULL, -- ABRASF, NACIONAL, GINFES, BETHA, IPM, NOTACONTROL, ISSNET, etc.
"login_prefeitura" VARCHAR(60) DEFAULT NULL,
"senha_prefeitura" TEXT DEFAULT NULL,
"token_prefeitura" VARCHAR(255) DEFAULT NULL,
"client_id_nacional" VARCHAR(128) DEFAULT NULL,
"client_secret_nacional" VARCHAR(128) DEFAULT NULL,
-- Configurações visuais do DANFE/DANFSE
"orientacao_danfe" VARCHAR(10) NOT NULL DEFAULT 'RETRATO', -- RETRATO, PAISAGEM
"imprimir_mensagem_tributos" BOOLEAN NOT NULL DEFAULT TRUE,
"ativo" BOOLEAN NOT NULL DEFAULT TRUE,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL
);
-- Gerenciamento de Séries Fiscais Dinâmicas e Customizáveis
CREATE TABLE IF NOT EXISTS "serie_fiscal" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"modelo_documento" VARCHAR(5) NOT NULL, -- '55': NF-e, '65': NFC-e, '57': CT-e, '58': MDF-e, 'NFS': NFS-e (RPS)
"serie" VARCHAR(5) NOT NULL DEFAULT '1',
"ambiente_sefaz" SMALLINT NOT NULL DEFAULT 2, -- 1: Produção, 2: Homologação
"ultimo_numero" INTEGER NOT NULL DEFAULT 0,
"descricao" VARCHAR(128) DEFAULT NULL, -- Ex: "Série Balcão 1", "Série RPS Principal", "Série E-Commerce"
"padrao" BOOLEAN NOT NULL DEFAULT FALSE,
"ativo" BOOLEAN NOT NULL DEFAULT TRUE,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL
);
-- Tabela associativa de Usuários com Empresas/Filiais (Multi-tenant)
CREATE TABLE IF NOT EXISTS "usuario_empresa" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"usuario_id" BIGINT NOT NULL,
"empresa_id" BIGINT NOT NULL,
"perfil" VARCHAR(20) NOT NULL DEFAULT 'OPERADOR', -- ADMIN, OPERADOR, CONSULTA, EMISSOR
"acesso_todas_filiais" BOOLEAN NOT NULL DEFAULT FALSE,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL
);
-- ============================================================================
-- 3. CADASTROS BASE (UNIDADES, CLIENTES, FORNECEDORES, TRANSPORTADORAS, VEÍCULOS, CONDUTORES)
-- ============================================================================
CREATE TABLE IF NOT EXISTS "unidade" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"sigla" VARCHAR(10) NOT NULL,
"descricao" VARCHAR(128) NOT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS "cliente" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"tipo_pessoa" SMALLINT NOT NULL DEFAULT 1, -- 1: Física, 2: Jurídica, 3: Estrangeiro
"nome_razao_social" VARCHAR(128) NOT NULL,
"nome_fantasia" VARCHAR(128) DEFAULT NULL,
"cpf" CHAR(11) DEFAULT NULL,
"cnpj" CHAR(14) DEFAULT NULL,
"id_estrangeiro" VARCHAR(20) DEFAULT NULL,
"indicador_ie" SMALLINT NOT NULL DEFAULT 9, -- 1: Contribuinte ICMS, 2: Isento, 9: Não Contribuinte
"inscricao_estadual" VARCHAR(30) DEFAULT NULL,
"inscricao_municipal" VARCHAR(30) DEFAULT NULL,
"suframa" VARCHAR(9) DEFAULT NULL,
"email" VARCHAR(255) DEFAULT NULL,
"telefone" VARCHAR(20) DEFAULT NULL,
-- Endereço
"end_cep" CHAR(8) DEFAULT NULL,
"end_codigo_ibge" CHAR(7) DEFAULT NULL,
"end_logradouro" VARCHAR(255) DEFAULT NULL,
"end_numero" VARCHAR(10) DEFAULT NULL,
"end_complemento" VARCHAR(255) DEFAULT NULL,
"end_bairro" VARCHAR(255) DEFAULT NULL,
"end_cidade" VARCHAR(255) DEFAULT NULL,
"end_uf" CHAR(2) DEFAULT NULL,
"end_pais_codigo" CHAR(4) DEFAULT '1058',
"end_pais_nome" VARCHAR(60) DEFAULT 'BRASIL',
-- Timestamps
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS "fornecedor" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"tipo_pessoa" SMALLINT NOT NULL DEFAULT 2, -- 1: Física, 2: Jurídica
"nome_razao_social" VARCHAR(128) NOT NULL,
"nome_fantasia" VARCHAR(128) DEFAULT NULL,
"cpf" CHAR(11) DEFAULT NULL,
"cnpj" CHAR(14) DEFAULT NULL,
"indicador_ie" SMALLINT NOT NULL DEFAULT 1,
"inscricao_estadual" VARCHAR(30) DEFAULT NULL,
"inscricao_municipal" VARCHAR(30) DEFAULT NULL,
"email" VARCHAR(255) DEFAULT NULL,
"telefone" VARCHAR(20) DEFAULT NULL,
-- Endereço
"end_cep" CHAR(8) DEFAULT NULL,
"end_codigo_ibge" CHAR(7) DEFAULT NULL,
"end_logradouro" VARCHAR(255) DEFAULT NULL,
"end_numero" VARCHAR(10) DEFAULT NULL,
"end_complemento" VARCHAR(255) DEFAULT NULL,
"end_bairro" VARCHAR(255) DEFAULT NULL,
"end_cidade" VARCHAR(255) DEFAULT NULL,
"end_uf" CHAR(2) DEFAULT NULL,
-- Timestamps
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS "transportadora" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"nome_razao_social" VARCHAR(128) NOT NULL,
"cnpj" CHAR(14) DEFAULT NULL,
"cpf" CHAR(11) DEFAULT NULL,
"inscricao_estadual" VARCHAR(30) DEFAULT NULL,
"isento_ie" BOOLEAN NOT NULL DEFAULT FALSE,
"endereco_completo" VARCHAR(255) DEFAULT NULL,
"end_cidade" VARCHAR(255) DEFAULT NULL,
"end_uf" CHAR(2) DEFAULT NULL,
"end_codigo_ibge" CHAR(7) DEFAULT NULL,
"placa_veiculo" VARCHAR(10) DEFAULT NULL,
"uf_veiculo" CHAR(2) DEFAULT NULL,
"rntrc" VARCHAR(20) DEFAULT NULL,
"telefone" VARCHAR(20) DEFAULT NULL,
-- Timestamps
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- Cadastro de Veículos (utilizado por Transportadoras, CT-e e MDF-e)
CREATE TABLE IF NOT EXISTS "veiculo" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"placa" VARCHAR(10) NOT NULL,
"renavam" VARCHAR(20) DEFAULT NULL,
"uf_licenciamento" CHAR(2) NOT NULL,
"tipo_veiculo" VARCHAR(20) NOT NULL DEFAULT 'TRACAO', -- 'TRACAO', 'REBOQUE'
"tipo_rodado" VARCHAR(2) DEFAULT '01', -- 01: Truck, 02: Toco, 03: Cavalo Mecânico, 04: VAN, 05: Utilitário, 06: Outros
"tipo_carroceria" VARCHAR(2) DEFAULT '00', -- 00: Não aplicável, 01: Aberta, 02: Fechada/Baú, 03: Granelera, 04: Porta-contêiner, 05: Sider
"tara_kg" INTEGER DEFAULT 0,
"capacidade_kg" INTEGER DEFAULT 0,
"capacidade_m3" INTEGER DEFAULT 0,
"rntrc" VARCHAR(20) DEFAULT NULL,
"proprietario_tipo_pessoa" SMALLINT DEFAULT 1, -- 1: Próprio/Empresa, 2: Terceiro PF, 3: Terceiro PJ
"proprietario_cpf_cnpj" VARCHAR(14) DEFAULT NULL,
"proprietario_nome" VARCHAR(128) DEFAULT NULL,
"proprietario_ie" VARCHAR(30) DEFAULT NULL,
"proprietario_uf" CHAR(2) DEFAULT NULL,
"ativo" BOOLEAN NOT NULL DEFAULT TRUE,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- Cadastro de Condutores / Motoristas (utilizado em CT-e e MDF-e)
CREATE TABLE IF NOT EXISTS "condutor" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"nome" VARCHAR(128) NOT NULL,
"cpf" CHAR(11) NOT NULL,
"cnh" VARCHAR(20) DEFAULT NULL,
"telefone" VARCHAR(20) DEFAULT NULL,
"ativo" BOOLEAN NOT NULL DEFAULT TRUE,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- ============================================================================
-- 4. PRODUTOS E REGRAS TRIBUTÁRIAS (VIGENTE + REFORMA TRIBUTÁRIA EC 132/2023)
-- ============================================================================
CREATE TABLE IF NOT EXISTS "produto" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"codigo_interno" VARCHAR(60) NOT NULL,
"nome" VARCHAR(128) NOT NULL,
-- GTIN / Código de Barras (SEFAZ exige 'SEM GTIN' quando inexistente)
"codigo_barras_ean" VARCHAR(14) NOT NULL DEFAULT 'SEM GTIN',
"codigo_barras_ean_trib" VARCHAR(14) NOT NULL DEFAULT 'SEM GTIN',
"unidade_comercial_id" BIGINT NOT NULL,
"unidade_tributavel_id" BIGINT DEFAULT NULL,
"fator_conversao_tributaria" NUMERIC(15, 4) NOT NULL DEFAULT 1.0000,
"valor_unitario" NUMERIC(15, 4) NOT NULL DEFAULT 0.0000,
"valor_custo" NUMERIC(15, 4) NOT NULL DEFAULT 0.0000,
"peso_liquido_kg" NUMERIC(15, 4) DEFAULT NULL,
"peso_bruto_kg" NUMERIC(15, 4) DEFAULT NULL,
-- Classificação Fiscal Geral
"ncm" CHAR(8) NOT NULL,
"cest" CHAR(7) DEFAULT NULL,
"ex_tipi" VARCHAR(3) DEFAULT NULL,
"cfop_padrao_nfe_interno" CHAR(4) NOT NULL DEFAULT '5102',
"cfop_padrao_nfe_externo" CHAR(4) NOT NULL DEFAULT '6102',
"cfop_padrao_nfce" CHAR(4) NOT NULL DEFAULT '5102',
"origem_mercadoria" SMALLINT NOT NULL DEFAULT 0,
-- Tributação Vigente: ICMS / Simples Nacional
"cst_icms" CHAR(3) DEFAULT NULL,
"csosn" CHAR(4) DEFAULT NULL,
"modalidade_bc_icms" SMALLINT DEFAULT 3,
"aliquota_icms" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"percentual_reducao_bc_icms" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_icms_st" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"percentual_mva_st" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"percentual_reducao_bc_icms_st" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_fcp" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_fcp_st" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
-- Tributação Vigente: PIS / COFINS / IPI
"cst_pis" CHAR(2) NOT NULL DEFAULT '07',
"aliquota_pis" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"cst_cofins" CHAR(2) NOT NULL DEFAULT '07',
"aliquota_cofins" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"cst_ipi" CHAR(2) DEFAULT NULL,
"codigo_enquadramento_ipi" CHAR(3) DEFAULT '999',
"aliquota_ipi" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
-- ========================================================================
-- PREPARAÇÃO PARA A REFORMA TRIBUTÁRIA (EC 132/2023 - IBS / CBS / IS)
-- ========================================================================
"c_classif_trib" VARCHAR(20) DEFAULT NULL, -- Código de Classificação Tributária Nacional
"c_prod_anp" VARCHAR(10) DEFAULT NULL, -- Código ANP de Combustíveis e Derivados
"codigo_beneficio_fiscal" VARCHAR(10) DEFAULT NULL, -- cBenef
-- IBS (Imposto sobre Bens e Serviços)
"cst_ibs" VARCHAR(3) DEFAULT NULL,
"aliquota_ibs_estadual" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_ibs_municipal" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"percentual_diferimento_ibs" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"percentual_reducao_ibs" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
-- CBS (Contribuição sobre Bens e Serviços)
"cst_cbs" VARCHAR(3) DEFAULT NULL,
"aliquota_cbs" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"percentual_diferimento_cbs" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"percentual_reducao_cbs" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
-- Imposto Seletivo (IS)
"tributado_imposto_seletivo" BOOLEAN NOT NULL DEFAULT FALSE,
"cst_is" VARCHAR(3) DEFAULT NULL,
"aliquota_is" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
-- Controle
"ativo" BOOLEAN NOT NULL DEFAULT TRUE,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- ============================================================================
-- 5. CATÁLOGO DE SERVIÇOS (PARA EMPRESAS PRESTADORAS DE SERVIÇOS - NFS-e)
-- ============================================================================
CREATE TABLE IF NOT EXISTS "servico" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"codigo_interno" VARCHAR(60) NOT NULL,
"nome" VARCHAR(128) NOT NULL,
"discriminacao_padrao" TEXT DEFAULT NULL,
-- Classificação do Serviço conforme LC 116/2003 e Prefeituras
"item_lista_servico" VARCHAR(10) NOT NULL, -- Ex: '01.01', '07.02', '14.01', '17.01'
"codigo_cnae" CHAR(7) DEFAULT NULL,
"codigo_tributacao_municipio" VARCHAR(30) DEFAULT NULL,
"codigo_tributacao_nacional" VARCHAR(10) DEFAULT NULL, -- cTribNac (Padrão Nacional NFS-e)
"c_classif_trib" VARCHAR(20) DEFAULT NULL, -- Reforma Tributária
-- Valores e Regras do ISS
"valor_unitario" NUMERIC(15, 4) NOT NULL DEFAULT 0.0000,
"aliquota_iss" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"iss_retido_padrao" BOOLEAN NOT NULL DEFAULT FALSE,
"exigibilidade_iss" SMALLINT NOT NULL DEFAULT 1, -- 1: Exigível, 2: Não incidência, 3: Isenção, 4: Exportação, 5: Imunidade, 6: Suspensa por Decisão Judicial, 7: Suspensa por Processo Administrativo
-- Retenções Federais Padrão
"aliquota_pis" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_cofins" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_inss" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_ir" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_csll" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
-- Reforma Tributária no Serviço (IBS / CBS)
"aliquota_ibs_estadual" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_ibs_municipal" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"aliquota_cbs" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
-- Controle
"ativo" BOOLEAN NOT NULL DEFAULT TRUE,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- ============================================================================
-- 6. DOCUMENTOS FISCAIS DE MERCADORIAS (NF-e MOD 55 / NFC-e MOD 65)
-- ============================================================================
CREATE TABLE IF NOT EXISTS "documento_fiscal" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL, -- Filial emissora
"serie_fiscal_id" BIGINT DEFAULT NULL, -- Série fiscal dinâmica utilizada
"cliente_id" BIGINT DEFAULT NULL, -- Opcional em NFC-e (consumidor)
"transportadora_id" BIGINT DEFAULT NULL,
-- Identificação do DF-e
"modelo" CHAR(2) NOT NULL DEFAULT '55', -- '55': NF-e, '65': NFC-e
"serie" VARCHAR(5) NOT NULL DEFAULT '1',
"numero" INTEGER NOT NULL,
"codigo_numerico" CHAR(8) DEFAULT NULL, -- cNF (código aleatório de 8 dígitos)
"natureza_operacao" VARCHAR(128) NOT NULL DEFAULT 'VENDA DE MERCADORIAS',
"tipo_documento" SMALLINT NOT NULL DEFAULT 1, -- 0: Entrada, 1: Saída
"destino_operacao" SMALLINT NOT NULL DEFAULT 1, -- 1: Interna, 2: Interestadual, 3: Exterior
"tipo_emissao" SMALLINT NOT NULL DEFAULT 1, -- 1: Normal, 9: Contingência Off-line
"finalidade_emissao" SMALLINT NOT NULL DEFAULT 1, -- 1: Normal, 2: Complementar, 3: Ajuste, 4: Devolução
"consumidor_final" SMALLINT NOT NULL DEFAULT 1, -- 0: Normal, 1: Consumidor Final
"presenca_comprador" SMALLINT NOT NULL DEFAULT 1, -- 1: Presencial, 2: Internet, etc.
"ambiente_sefaz" SMALLINT NOT NULL DEFAULT 2, -- 1: Produção, 2: Homologação
-- Datas e Status
"data_emissao" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"data_saida_entrada" TIMESTAMP DEFAULT NULL,
"status" VARCHAR(20) NOT NULL DEFAULT 'DIGITACAO', -- DIGITACAO, TRANSMITIDA, AUTORIZADA, CANCELADA, DENEGADA, REJEITADA, INUTILIZADA
"chave_acesso" CHAR(44) DEFAULT NULL,
"protocolo_autorizacao" VARCHAR(60) DEFAULT NULL,
"data_autorizacao" TIMESTAMP DEFAULT NULL,
"motivo_status_sefaz" VARCHAR(512) DEFAULT NULL,
"codigo_status_sefaz" VARCHAR(10) DEFAULT NULL,
-- Transporte / Frete
"modalidade_frete" SMALLINT NOT NULL DEFAULT 9, -- 0: CIF, 1: FOB, 2: Terceiros, 9: Sem Frete
"valor_frete" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_seguro" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_desconto" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_outras_despesas" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"placa_veiculo" VARCHAR(10) DEFAULT NULL,
"uf_veiculo" CHAR(2) DEFAULT NULL,
"quantidade_volumes" NUMERIC(10, 2) DEFAULT NULL,
"especie_volumes" VARCHAR(60) DEFAULT NULL,
"peso_liquido" NUMERIC(15, 3) DEFAULT NULL,
"peso_bruto" NUMERIC(15, 3) DEFAULT NULL,
-- Totais de Produtos e Tributação Vigente
"valor_total_produtos" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_bc_icms" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_icms" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_icms_desonerado" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_bc_icms_st" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_icms_st" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_fcp" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_fcp_st" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_fcp_retido_st" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_ipi" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_ipi_devolvido" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_pis" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_cofins" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_tributos_aproximado" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_documento" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- ========================================================================
-- TOTAIS DA REFORMA TRIBUTÁRIA (EC 132/2023 - IBS / CBS / IS)
-- ========================================================================
"valor_bc_ibs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_ibs_estadual" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_ibs_municipal" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_ibs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_bc_cbs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_cbs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_bc_is" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_is" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Informações Adicionais
"informacoes_complementares" TEXT DEFAULT NULL,
"informacoes_fisco" TEXT DEFAULT NULL,
-- Armazenamento SEFAZ e NFC-e
"xml_envio" TEXT DEFAULT NULL,
"xml_autorizado" TEXT DEFAULT NULL,
"xml_cancelamento" TEXT DEFAULT NULL,
"retorno_sefaz_json" JSONB DEFAULT NULL,
"qrcode_url_nfce" TEXT DEFAULT NULL,
-- Timestamps
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- Itens do Documento Fiscal
CREATE TABLE IF NOT EXISTS "documento_fiscal_item" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"documento_fiscal_id" BIGINT NOT NULL,
"numero_item" INTEGER NOT NULL,
"produto_id" BIGINT DEFAULT NULL,
"codigo_produto" VARCHAR(60) NOT NULL,
"descricao_produto" VARCHAR(128) NOT NULL,
"ncm" CHAR(8) NOT NULL,
"cest" CHAR(7) DEFAULT NULL,
"cfop" CHAR(4) NOT NULL,
"codigo_barras_ean" VARCHAR(14) NOT NULL DEFAULT 'SEM GTIN',
"codigo_barras_ean_trib" VARCHAR(14) NOT NULL DEFAULT 'SEM GTIN',
-- Unidades e Quantidades
"unidade_comercial" VARCHAR(10) NOT NULL,
"quantidade_comercial" NUMERIC(15, 4) NOT NULL,
"valor_unitario_comercial" NUMERIC(15, 4) NOT NULL,
"valor_total_bruto" NUMERIC(15, 2) NOT NULL,
"unidade_tributavel" VARCHAR(10) NOT NULL,
"quantidade_tributavel" NUMERIC(15, 4) NOT NULL,
"valor_unitario_tributavel" NUMERIC(15, 4) NOT NULL,
-- Rateios no Item
"valor_desconto" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_frete" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_seguro" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_outras_despesas" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"ind_total" SMALLINT NOT NULL DEFAULT 1,
-- Detalhamento Tributação Vigente: ICMS / Simples Nacional
"origem_mercadoria" SMALLINT NOT NULL DEFAULT 0,
"cst_icms" CHAR(3) DEFAULT NULL,
"csosn" CHAR(4) DEFAULT NULL,
"modalidade_bc_icms" SMALLINT DEFAULT 3,
"base_icms" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_icms" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_icms" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"percentual_reducao_bc_icms" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"base_icms_st" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_icms_st" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_icms_st" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"percentual_mva_st" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"percentual_reducao_bc_icms_st" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"base_fcp" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_fcp" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_fcp" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Detalhamento Tributação Vigente: PIS / COFINS / IPI
"cst_pis" CHAR(2) NOT NULL DEFAULT '07',
"base_pis" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_pis" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_pis" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"cst_cofins" CHAR(2) NOT NULL DEFAULT '07',
"base_cofins" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_cofins" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_cofins" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"cst_ipi" CHAR(2) DEFAULT NULL,
"codigo_enquadramento_ipi" CHAR(3) DEFAULT '999',
"base_ipi" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_ipi" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_ipi" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- ========================================================================
-- DETALHAMENTO REFORMA TRIBUTÁRIA POR ITEM (EC 132/2023 - IBS / CBS / IS)
-- ========================================================================
"c_classif_trib" VARCHAR(20) DEFAULT NULL,
"c_prod_anp" VARCHAR(10) DEFAULT NULL,
"c_benef" VARCHAR(10) DEFAULT NULL,
-- IBS Item
"cst_ibs" VARCHAR(3) DEFAULT NULL,
"base_ibs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_ibs_estadual" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_ibs_estadual" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_ibs_municipal" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_ibs_municipal" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_ibs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- CBS Item
"cst_cbs" VARCHAR(3) DEFAULT NULL,
"base_cbs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_cbs" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_cbs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Imposto Seletivo Item
"cst_is" VARCHAR(3) DEFAULT NULL,
"base_is" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_is" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_is" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_tributos_item" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"informacoes_adicionais" TEXT DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Formas de Pagamento do Documento Fiscal
CREATE TABLE IF NOT EXISTS "documento_fiscal_pagamento" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"documento_fiscal_id" BIGINT NOT NULL,
"forma_pagamento" CHAR(2) NOT NULL DEFAULT '01', -- 01: Dinheiro, 02: Cheque, 03: Cartão de Crédito, 04: Cartão de Débito, 15: Boleto, 17: PIX, 90: Sem Pagamento, 99: Outros
"valor_pagamento" NUMERIC(15, 2) NOT NULL,
"tipo_integracao" SMALLINT NOT NULL DEFAULT 2, -- 1: Integrado TEF, 2: Não Integrado
"cnpj_credenciadora" CHAR(14) DEFAULT NULL,
"bandeira_operadora" CHAR(2) DEFAULT NULL, -- 01: Visa, 02: Mastercard, 03: Amex, 04: Sorocred, 05: Elo, 99: Outras
"numero_autorizacao" VARCHAR(20) DEFAULT NULL,
"valor_troco" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Duplicatas / Parcelas de Cobrança (NF-e)
CREATE TABLE IF NOT EXISTS "documento_fiscal_duplicata" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"documento_fiscal_id" BIGINT NOT NULL,
"numero_duplicata" VARCHAR(60) NOT NULL,
"data_vencimento" DATE NOT NULL,
"valor_duplicata" NUMERIC(15, 2) NOT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Eventos SEFAZ (Cancelamento, Carta de Correção - CCe, Inutilização)
CREATE TABLE IF NOT EXISTS "documento_fiscal_evento" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"documento_fiscal_id" BIGINT NOT NULL,
"tipo_evento" VARCHAR(30) NOT NULL, -- 'CANCELAMENTO', 'CCE', 'INUTILIZACAO'
"codigo_evento" CHAR(6) NOT NULL, -- 110111: Cancelamento, 110110: CC-e
"sequencial_evento" INTEGER NOT NULL DEFAULT 1,
"data_evento" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"protocolo" VARCHAR(60) DEFAULT NULL,
"justificativa" TEXT NOT NULL,
"xml_evento" TEXT DEFAULT NULL,
"xml_retorno" TEXT DEFAULT NULL,
"status_sefaz" VARCHAR(10) DEFAULT NULL,
"motivo_sefaz" VARCHAR(512) DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- ============================================================================
-- 7. MÓDULO DE NFS-e (NOTA FISCAL DE SERVIÇOS ELETRÔNICA - ABRASF / NACIONAL)
-- ============================================================================
CREATE TABLE IF NOT EXISTS "nfse" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL, -- Filial prestadora do serviço
"serie_fiscal_id" BIGINT DEFAULT NULL, -- Série do RPS / DPS
"cliente_id" BIGINT DEFAULT NULL, -- Tomador do serviço
"intermediario_id" BIGINT DEFAULT NULL, -- Intermediário do serviço (opcional)
-- Identificação da NFS-e Nacional (ADN / Receita Federal) e Prefeituras
"chave_acesso" CHAR(50) DEFAULT NULL, -- Chave de acesso oficial de 50 dígitos da NFS-e Nacional
"numero_nfse" VARCHAR(30) DEFAULT NULL,
"codigo_verificacao" VARCHAR(30) DEFAULT NULL,
"data_emissao_nfse" TIMESTAMP DEFAULT NULL,
"link_url_nfse" TEXT DEFAULT NULL,
"link_danfse_pdf" TEXT DEFAULT NULL, -- Link para download direto do DANFSe no ADN (Receita Federal)
"qrcode_url_nfse" TEXT DEFAULT NULL, -- URL do QR-Code da NFS-e Nacional
-- Dados da DPS (Declaração de Prestação de Serviços) / RPS
"tipo_documento" VARCHAR(10) NOT NULL DEFAULT 'DPS', -- 'DPS' (Padrão Nacional), 'RPS' (ABRASF/Municipal)
"id_dps" VARCHAR(50) DEFAULT NULL, -- Identificador da DPS (ex: DPS3550308...)
"numero_rps" INTEGER NOT NULL,
"serie_rps" VARCHAR(5) NOT NULL DEFAULT '1',
"tipo_rps" SMALLINT NOT NULL DEFAULT 1, -- 1: RPS, 2: Nota Fiscal Conjugada Mista, 3: Cupom
"data_emissao_rps" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"ambiente_sefaz" SMALLINT NOT NULL DEFAULT 2, -- 1: Produção, 2: Produção Restrita (Homologação)
-- Local de Prestação do Serviço
"end_codigo_ibge_prestacao" CHAR(7) NOT NULL,
"end_cidade_prestacao" VARCHAR(128) NOT NULL,
"end_uf_prestacao" CHAR(2) NOT NULL,
"end_pais_codigo" CHAR(4) DEFAULT '1058',
"pais_resultado_prestacao" CHAR(4) DEFAULT '1058',
-- Regime e Tributação do ISS (Padrão Nacional / LC 116)
"regime_especial_tributacao" SMALLINT DEFAULT 0, -- 0: Nenhum, 1: Microempresa Municipal, 2: Estimativa, 3: Sociedade de Profissionais, 4: Cooperativa, 5: MEI, 6: Simples Nacional / ME / EPP
"optante_simples_nacional" BOOLEAN NOT NULL DEFAULT TRUE,
"incentivo_fiscal" BOOLEAN NOT NULL DEFAULT FALSE,
"tp_tributacao_iss" SMALLINT NOT NULL DEFAULT 1, -- 1: Tributável no município, 2: Tributável fora do município, 3: Isenção, 4: Imunidade, 5: Exigibilidade suspensa judicial, 6: Exigibilidade suspensa administrativo, 7: Não incidência
"tp_retencao_iss" SMALLINT NOT NULL DEFAULT 1, -- 1: Não Retido, 2: Retido pelo Tomador, 3: Retido pelo Intermediário
-- Valores do Serviço
"valor_servicos" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_deducoes" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_desconto_incondicionado" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_desconto_condicionado" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_outras_retencoes" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- ISS
"base_calculo_iss" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_iss" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_iss" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"iss_retido" BOOLEAN NOT NULL DEFAULT FALSE,
"valor_iss_retido" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"responsavel_retencao_iss" SMALLINT DEFAULT 1, -- 1: Tomador, 2: Intermediário
-- Retenções Federais
"valor_pis" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_cofins" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_inss" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_ir" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_csll" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Reforma Tributária na NFS-e (EC 132/2023 - IBS / CBS)
"valor_bc_ibs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_ibs_estadual" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_ibs_municipal" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_ibs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_bc_cbs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_cbs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Valor Líquido Final da NFS-e
"valor_liquido_nfse" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Status e Integração Web Service ADN (Nacional) / Prefeitura (ABRASF)
"status" VARCHAR(20) NOT NULL DEFAULT 'DIGITACAO', -- DIGITACAO, ENVIADO_LOTE, PROCESSANDO, EMITIDA, CANCELADA, REJEITADA, SUBSTITUIDA
"numero_lote_rps" VARCHAR(30) DEFAULT NULL,
"protocolo_lote" VARCHAR(60) DEFAULT NULL,
"motivo_status" VARCHAR(512) DEFAULT NULL,
"codigo_status" VARCHAR(10) DEFAULT NULL,
"xml_rps_envio" TEXT DEFAULT NULL,
"xml_nfse_autorizada" TEXT DEFAULT NULL,
"xml_cancelamento" TEXT DEFAULT NULL,
"retorno_prefeitura_json" JSONB DEFAULT NULL,
-- Timestamps
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- Itens / Discriminação do Serviço na NFS-e
CREATE TABLE IF NOT EXISTS "nfse_item" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"nfse_id" BIGINT NOT NULL,
"numero_item" INTEGER NOT NULL,
"servico_id" BIGINT DEFAULT NULL,
"discriminacao_servico" TEXT NOT NULL,
-- Códigos Fiscais do Item
"item_lista_servico" VARCHAR(10) NOT NULL,
"codigo_cnae" CHAR(7) DEFAULT NULL,
"codigo_tributacao_municipio" VARCHAR(30) DEFAULT NULL,
"codigo_tributacao_nacional" VARCHAR(10) DEFAULT NULL,
"c_classif_trib" VARCHAR(20) DEFAULT NULL,
-- Quantidades e Valores
"quantidade" NUMERIC(15, 4) NOT NULL DEFAULT 1.0000,
"valor_unitario" NUMERIC(15, 4) NOT NULL DEFAULT 0.0000,
"valor_total_servico" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_deducao" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_desconto" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Tributação do Item
"aliquota_iss" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_iss" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"iss_retido" BOOLEAN NOT NULL DEFAULT FALSE,
"aliquota_ibs" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_ibs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_cbs" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_cbs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Eventos e Cancelamento de NFS-e
CREATE TABLE IF NOT EXISTS "nfse_evento" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"nfse_id" BIGINT NOT NULL,
"tipo_evento" VARCHAR(30) NOT NULL, -- 'CANCELAMENTO', 'SUBSTITUICAO'
"codigo_motivo_cancelamento" VARCHAR(5) DEFAULT NULL, -- 1: Erro emissão, 2: Serviço não prestado, 3: Erro assinatura, 4: Duplicidade, 9: Outros
"justificativa" TEXT NOT NULL,
"data_evento" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"protocolo" VARCHAR(60) DEFAULT NULL,
"xml_evento" TEXT DEFAULT NULL,
"xml_retorno" TEXT DEFAULT NULL,
"status_prefeitura" VARCHAR(10) DEFAULT NULL,
"motivo_prefeitura" VARCHAR(512) DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- ============================================================================
-- 8. MÓDULO DE CT-e (CONHECIMENTO DE TRANSPORTE ELETRÔNICO - MODELO 57)
-- ============================================================================
CREATE TABLE IF NOT EXISTS "cte" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL, -- Filial emissora do frete
"serie_fiscal_id" BIGINT DEFAULT NULL, -- Série fiscal do CT-e
"serie" VARCHAR(5) NOT NULL DEFAULT '1',
"numero" INTEGER NOT NULL,
"codigo_numerico" CHAR(8) DEFAULT NULL, -- cCT
"natureza_operacao" VARCHAR(128) NOT NULL DEFAULT 'PRESTACAO DE SERVICO DE TRANSPORTE',
"cfop" CHAR(4) NOT NULL,
"tipo_cte" SMALLINT NOT NULL DEFAULT 0, -- 0: Normal, 1: Complementar, 2: Anulação, 3: Substituto
"tipo_servico" SMALLINT NOT NULL DEFAULT 0, -- 0: Normal, 1: Subcontratação, 2: Redespacho, 3: Redespacho Intermediário, 4: Multimodal
"modal" VARCHAR(2) NOT NULL DEFAULT '01', -- 01: Rodoviário, 02: Aéreo, 03: Aquaviário, 04: Ferroviário, 05: Dutoviário, 06: Multimodal
"ambiente_sefaz" SMALLINT NOT NULL DEFAULT 2, -- 1: Produção, 2: Homologação
"tipo_emissao" SMALLINT NOT NULL DEFAULT 1, -- 1: Normal, 7: EPEC, 8: Contingência FSDA
-- Datas e Status
"data_emissao" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"status" VARCHAR(20) NOT NULL DEFAULT 'DIGITACAO',
"chave_acesso" CHAR(44) DEFAULT NULL,
"protocolo_autorizacao" VARCHAR(60) DEFAULT NULL,
"data_autorizacao" TIMESTAMP DEFAULT NULL,
"motivo_status_sefaz" VARCHAR(512) DEFAULT NULL,
"codigo_status_sefaz" VARCHAR(10) DEFAULT NULL,
-- Localidade da Prestação
"end_codigo_ibge_inicio" CHAR(7) NOT NULL,
"end_cidade_inicio" VARCHAR(128) NOT NULL,
"end_uf_inicio" CHAR(2) NOT NULL,
"end_codigo_ibge_fim" CHAR(7) NOT NULL,
"end_cidade_fim" VARCHAR(128) NOT NULL,
"end_uf_fim" CHAR(2) NOT NULL,
-- Atores do Frete (Tomador do Serviço)
"tomador_servico" SMALLINT NOT NULL DEFAULT 0, -- 0: Remetente, 1: Expedidor, 2: Recebedor, 3: Destinatário, 4: Outros
"remetente_id" BIGINT DEFAULT NULL, -- FK cliente/fornecedor
"destinatario_id" BIGINT DEFAULT NULL,
"expedidor_id" BIGINT DEFAULT NULL,
"recebedor_id" BIGINT DEFAULT NULL,
"tomador_id" BIGINT DEFAULT NULL,
-- Valores do Frete e Tributação
"valor_total_prestacao" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_receber" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Tributação ICMS
"cst_icms" CHAR(3) DEFAULT NULL,
"base_icms" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"aliquota_icms" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_icms" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"percentual_reducao_bc_icms" NUMERIC(5, 2) NOT NULL DEFAULT 0.00,
"valor_icms_outra_uf" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Reforma Tributária no CT-e
"c_classif_trib" VARCHAR(20) DEFAULT NULL,
"valor_bc_ibs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_ibs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_bc_cbs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"valor_total_cbs" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Informações da Carga
"produto_predominante" VARCHAR(128) DEFAULT NULL,
"outras_caracteristicas_carga" VARCHAR(60) DEFAULT NULL,
"valor_total_carga" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
-- Informações Adicionais e Arquivos
"informacoes_complementares" TEXT DEFAULT NULL,
"xml_envio" TEXT DEFAULT NULL,
"xml_autorizado" TEXT DEFAULT NULL,
"xml_cancelamento" TEXT DEFAULT NULL,
"retorno_sefaz_json" JSONB DEFAULT NULL,
"qrcode_url_cte" TEXT DEFAULT NULL,
-- Timestamps
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- Componentes Tarifários do Valor da Prestação do Frete
CREATE TABLE IF NOT EXISTS "cte_componente_valor" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"cte_id" BIGINT NOT NULL,
"nome_componente" VARCHAR(60) NOT NULL, -- 'FRETE VALOR', 'FRETE PESO', 'PEDAGIO', 'GRIS', 'TAXA DESPACHO', 'OUTROS'
"valor" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Documentos Originários Referenciados no CT-e (ex: NF-e transportadas)
CREATE TABLE IF NOT EXISTS "cte_documento_referenciado" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"cte_id" BIGINT NOT NULL,
"tipo_documento" VARCHAR(10) NOT NULL DEFAULT 'NFE', -- 'NFE', 'NF_PAPEL', 'OUTROS'
"chave_acesso_nfe" CHAR(44) DEFAULT NULL,
"numero_documento" VARCHAR(30) DEFAULT NULL,
"serie_documento" VARCHAR(5) DEFAULT NULL,
"data_emissao" DATE DEFAULT NULL,
"valor_documento" NUMERIC(15, 2) DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Informações de Quantidades da Carga no CT-e
CREATE TABLE IF NOT EXISTS "cte_carga" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"cte_id" BIGINT NOT NULL,
"codigo_unidade_medida" VARCHAR(2) NOT NULL DEFAULT '01', -- 00: M3, 01: KG, 02: TON, 03: UNID, 04: LITROS, 05: MMBTU
"tipo_medida" VARCHAR(60) NOT NULL, -- 'PESO BRUTO', 'PESO DECLARADO', 'PESO LIQUIDO', 'VOLUME', 'LITRAGEM'
"quantidade" NUMERIC(15, 4) NOT NULL DEFAULT 0.0000,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Informações do Veículo Rodoviário e Condutores no CT-e
CREATE TABLE IF NOT EXISTS "cte_veiculo_rodoviario" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"cte_id" BIGINT NOT NULL,
"veiculo_id" BIGINT DEFAULT NULL,
"rntrc" VARCHAR(20) DEFAULT NULL,
"condutor_id" BIGINT DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Eventos do CT-e (Cancelamento, Carta de Correção - CC-e)
CREATE TABLE IF NOT EXISTS "cte_evento" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"cte_id" BIGINT NOT NULL,
"tipo_evento" VARCHAR(30) NOT NULL, -- 'CANCELAMENTO', 'CCE'
"codigo_evento" CHAR(6) NOT NULL, -- 110111: Cancelamento, 110110: CC-e
"sequencial_evento" INTEGER NOT NULL DEFAULT 1,
"data_evento" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"protocolo" VARCHAR(60) DEFAULT NULL,
"justificativa" TEXT NOT NULL,
"xml_evento" TEXT DEFAULT NULL,
"xml_retorno" TEXT DEFAULT NULL,
"status_sefaz" VARCHAR(10) DEFAULT NULL,
"motivo_sefaz" VARCHAR(512) DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- ============================================================================
-- 9. MÓDULO DE MDF-e (MANIFESTO ELETRÔNICO DE DOCUMENTOS FISCAIS - MODELO 58)
-- ============================================================================
CREATE TABLE IF NOT EXISTS "mdfe" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL, -- Filial emissora do manifesto
"serie_fiscal_id" BIGINT DEFAULT NULL, -- Série fiscal do MDF-e
"serie" VARCHAR(5) NOT NULL DEFAULT '1',
"numero" INTEGER NOT NULL,
"codigo_numerico" CHAR(8) DEFAULT NULL, -- cMDF
"tipo_emissao" SMALLINT NOT NULL DEFAULT 1, -- 1: Normal, 2: Contingência
"tipo_transportador" SMALLINT NOT NULL DEFAULT 1, -- 1: ETC, 2: TAC, 3: CTC
"modal" SMALLINT NOT NULL DEFAULT 1, -- 1: Rodoviário, 2: Aéreo, 3: Aquaviário, 4: Ferroviário
"ambiente_sefaz" SMALLINT NOT NULL DEFAULT 2, -- 1: Produção, 2: Homologação
-- Datas e Status
"data_emissao" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"data_inicio_viagem" TIMESTAMP DEFAULT NULL,
"status" VARCHAR(20) NOT NULL DEFAULT 'DIGITACAO', -- DIGITACAO, TRANSMITIDO, AUTORIZADO, ENCERRADO, CANCELADO, REJEITADO
"chave_acesso" CHAR(44) DEFAULT NULL,
"protocolo_autorizacao" VARCHAR(60) DEFAULT NULL,
"data_autorizacao" TIMESTAMP DEFAULT NULL,
"motivo_status_sefaz" VARCHAR(512) DEFAULT NULL,
"codigo_status_sefaz" VARCHAR(10) DEFAULT NULL,
-- Rota do Transporte
"uf_carregamento" CHAR(2) NOT NULL,
"uf_descarregamento" CHAR(2) NOT NULL,
-- Totais Consolidados da Carga
"valor_total_carga" NUMERIC(15, 2) NOT NULL DEFAULT 0.00,
"codigo_unidade_peso" VARCHAR(2) NOT NULL DEFAULT '01', -- 01: KG, 02: TON
"peso_bruto_total" NUMERIC(15, 4) NOT NULL DEFAULT 0.0000,
"quantidade_total_dfe" INTEGER NOT NULL DEFAULT 0, -- Total de CT-e / NF-e manifestados
-- Seguro de Carga
"responsavel_seguro" SMALLINT DEFAULT 1, -- 1: Emitente do MDF-e, 2: Contratante do Serviço
"seguradora_cnpj" CHAR(14) DEFAULT NULL,
"seguradora_nome" VARCHAR(128) DEFAULT NULL,
"numero_apolice" VARCHAR(60) DEFAULT NULL,
"numero_averbacao" VARCHAR(60) DEFAULT NULL,
-- Arquivos e Informações
"informacoes_complementares" TEXT DEFAULT NULL,
"informacoes_fisco" TEXT DEFAULT NULL,
"xml_envio" TEXT DEFAULT NULL,
"xml_autorizado" TEXT DEFAULT NULL,
"xml_encerramento" TEXT DEFAULT NULL,
"xml_cancelamento" TEXT DEFAULT NULL,
"retorno_sefaz_json" JSONB DEFAULT NULL,
"qrcode_url_mdfe" TEXT DEFAULT NULL,
-- Timestamps
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- Municípios de Carregamento do MDF-e
CREATE TABLE IF NOT EXISTS "mdfe_municipio_carregamento" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"mdfe_id" BIGINT NOT NULL,
"end_codigo_ibge" CHAR(7) NOT NULL,
"end_cidade" VARCHAR(128) NOT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Municípios de Descarregamento do MDF-e
CREATE TABLE IF NOT EXISTS "mdfe_municipio_descarregamento" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"mdfe_id" BIGINT NOT NULL,
"end_codigo_ibge" CHAR(7) NOT NULL,
"end_cidade" VARCHAR(128) NOT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- UFs de Percurso do Transporte (quando interestadual)
CREATE TABLE IF NOT EXISTS "mdfe_percurso_uf" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"mdfe_id" BIGINT NOT NULL,
"ordem" SMALLINT NOT NULL DEFAULT 1,
"uf_percurso" CHAR(2) NOT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Veículo de Tração do MDF-e
CREATE TABLE IF NOT EXISTS "mdfe_veiculo_tracao" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"mdfe_id" BIGINT NOT NULL,
"veiculo_id" BIGINT DEFAULT NULL,
"placa" VARCHAR(10) NOT NULL,
"renavam" VARCHAR(20) DEFAULT NULL,
"uf_licenciamento" CHAR(2) NOT NULL,
"tara_kg" INTEGER NOT NULL DEFAULT 0,
"capacidade_kg" INTEGER DEFAULT 0,
"capacidade_m3" INTEGER DEFAULT 0,
"tipo_rodado" VARCHAR(2) DEFAULT '01',
"tipo_carroceria" VARCHAR(2) DEFAULT '00',
"rntrc" VARCHAR(20) DEFAULT NULL,
"proprietario_tipo_pessoa" SMALLINT DEFAULT 1,
"proprietario_cpf_cnpj" VARCHAR(14) DEFAULT NULL,
"proprietario_nome" VARCHAR(128) DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Reboques Acoplados no MDF-e
CREATE TABLE IF NOT EXISTS "mdfe_veiculo_reboque" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"mdfe_id" BIGINT NOT NULL,
"veiculo_id" BIGINT DEFAULT NULL,
"placa" VARCHAR(10) NOT NULL,
"renavam" VARCHAR(20) DEFAULT NULL,
"uf_licenciamento" CHAR(2) NOT NULL,
"tara_kg" INTEGER NOT NULL DEFAULT 0,
"capacidade_kg" INTEGER DEFAULT 0,
"capacidade_m3" INTEGER DEFAULT 0,
"tipo_carroceria" VARCHAR(2) DEFAULT '00',
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Condutores / Motoristas Vinculados ao MDF-e
CREATE TABLE IF NOT EXISTS "mdfe_condutor" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"mdfe_id" BIGINT NOT NULL,
"condutor_id" BIGINT DEFAULT NULL,
"nome_condutor" VARCHAR(128) NOT NULL,
"cpf_condutor" CHAR(11) NOT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Documentos Fiscais Manifestados no MDF-e (NF-e ou CT-e)
CREATE TABLE IF NOT EXISTS "mdfe_documento_referenciado" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"mdfe_id" BIGINT NOT NULL,
"tipo_documento" VARCHAR(10) NOT NULL DEFAULT 'NFE', -- 'NFE', 'CTE'
"chave_acesso" CHAR(44) NOT NULL,
"end_codigo_ibge_descarregamento" CHAR(7) NOT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Eventos do MDF-e (Cancelamento, Encerramento, Inclusão de Condutor)
CREATE TABLE IF NOT EXISTS "mdfe_evento" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"mdfe_id" BIGINT NOT NULL,
"tipo_evento" VARCHAR(30) NOT NULL, -- 'ENCERRAMENTO', 'CANCELAMENTO', 'INCLUSAO_CONDUTOR'
"codigo_evento" CHAR(6) NOT NULL, -- 110112: Encerramento, 110111: Cancelamento, 110114: Inclusão Condutor
"sequencial_evento" INTEGER NOT NULL DEFAULT 1,
"data_evento" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"protocolo" VARCHAR(60) DEFAULT NULL,
"justificativa" TEXT DEFAULT NULL,
-- Dados específicos do encerramento (UF e Município de Encerramento)
"end_codigo_ibge_encerramento" CHAR(7) DEFAULT NULL,
"end_uf_encerramento" CHAR(2) DEFAULT NULL,
"xml_evento" TEXT DEFAULT NULL,
"xml_retorno" TEXT DEFAULT NULL,
"status_sefaz" VARCHAR(10) DEFAULT NULL,
"motivo_sefaz" VARCHAR(512) DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- ============================================================================
-- 10. CONFIGURAÇÕES & MENSALIDADES DA EMPRESA
-- ============================================================================
CREATE TABLE IF NOT EXISTS "configuracao" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"nome_app" VARCHAR(128) NOT NULL DEFAULT 'Workbloom ERP',
"mensagem_suporte" VARCHAR(512) DEFAULT NULL,
"contato_suporte" VARCHAR(32) DEFAULT NULL,
"contato_suporte_formatado" VARCHAR(32) DEFAULT NULL,
"info_pagamento_pix" TEXT DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS "pagamento_empresa" (
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"uuid" UUID NOT NULL,
"empresa_id" BIGINT NOT NULL,
"contador_id" BIGINT DEFAULT NULL,
"data_vencimento" DATE NOT NULL,
"data_pagamento" DATE DEFAULT NULL,
"valor" NUMERIC(15, 2) NOT NULL,
"status" VARCHAR(20) NOT NULL DEFAULT 'PENDENTE', -- PENDENTE, PAGO, CANCELADO, VENCIDO
"observacoes" VARCHAR(512) DEFAULT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP DEFAULT NULL,
"deleted_at" TIMESTAMP DEFAULT NULL
);
-- ============================================================================
-- 11. CONSTRAINTS (CHAVES ESTRANGEIRAS E UNICIDADES)
-- ============================================================================
-- Usuario
ALTER TABLE "usuario"
ADD CONSTRAINT "usuario_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "usuario_email_unique" UNIQUE ("email"),
ADD CONSTRAINT "usuario_nome_usuario_unique" UNIQUE ("nome_usuario");
-- Contador
ALTER TABLE "contador"
ADD CONSTRAINT "contador_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "contador_email_unique" UNIQUE ("email");
-- Certificado
ALTER TABLE "certificado"
ADD CONSTRAINT "certificado_uuid_unique" UNIQUE ("uuid");
-- Empresa
ALTER TABLE "empresa"
ADD CONSTRAINT "empresa_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "empresa_cnpj_unique" UNIQUE ("cnpj"),
ADD CONSTRAINT "fk_empresa_matriz" FOREIGN KEY ("matriz_id") REFERENCES "empresa" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_empresa_contador" FOREIGN KEY ("contador_id") REFERENCES "contador" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_empresa_certificado" FOREIGN KEY ("certificado_id") REFERENCES "certificado" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- Empresa Configuração Fiscal
ALTER TABLE "empresa_configuracao_fiscal"
ADD CONSTRAINT "empresa_config_fiscal_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "empresa_config_fiscal_mod_unique" UNIQUE ("empresa_id", "modelo_documento"),
ADD CONSTRAINT "fk_empresa_config_fiscal_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Série Fiscal
ALTER TABLE "serie_fiscal"
ADD CONSTRAINT "serie_fiscal_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "serie_fiscal_empresa_mod_serie_amb_unique" UNIQUE ("empresa_id", "modelo_documento", "serie", "ambiente_sefaz"),
ADD CONSTRAINT "fk_serie_fiscal_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Usuario Empresa
ALTER TABLE "usuario_empresa"
ADD CONSTRAINT "usuario_empresa_unique" UNIQUE ("usuario_id", "empresa_id"),
ADD CONSTRAINT "fk_usuario_empresa_usuario" FOREIGN KEY ("usuario_id") REFERENCES "usuario" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT "fk_usuario_empresa_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Unidade
ALTER TABLE "unidade"
ADD CONSTRAINT "unidade_sigla_unique" UNIQUE ("sigla");
-- Cliente
ALTER TABLE "cliente"
ADD CONSTRAINT "cliente_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_cliente_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Fornecedor
ALTER TABLE "fornecedor"
ADD CONSTRAINT "fornecedor_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_fornecedor_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Transportadora
ALTER TABLE "transportadora"
ADD CONSTRAINT "transportadora_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_transportadora_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Veiculo
ALTER TABLE "veiculo"
ADD CONSTRAINT "veiculo_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_veiculo_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Condutor
ALTER TABLE "condutor"
ADD CONSTRAINT "condutor_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_condutor_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Produto
ALTER TABLE "produto"
ADD CONSTRAINT "produto_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "produto_empresa_codigo_unique" UNIQUE ("empresa_id", "codigo_interno"),
ADD CONSTRAINT "fk_produto_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT "fk_produto_unidade_comercial" FOREIGN KEY ("unidade_comercial_id") REFERENCES "unidade" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
ADD CONSTRAINT "fk_produto_unidade_tributavel" FOREIGN KEY ("unidade_tributavel_id") REFERENCES "unidade" ("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- Serviço (NFS-e)
ALTER TABLE "servico"
ADD CONSTRAINT "servico_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "servico_empresa_codigo_unique" UNIQUE ("empresa_id", "codigo_interno"),
ADD CONSTRAINT "fk_servico_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Documento Fiscal (NF-e / NFC-e)
ALTER TABLE "documento_fiscal"
ADD CONSTRAINT "documento_fiscal_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "documento_fiscal_chave_unique" UNIQUE ("chave_acesso"),
ADD CONSTRAINT "documento_fiscal_empresa_mod_serie_num_amb_unique" UNIQUE ("empresa_id", "modelo", "serie", "numero", "ambiente_sefaz"),
ADD CONSTRAINT "fk_doc_fiscal_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
ADD CONSTRAINT "fk_doc_fiscal_serie" FOREIGN KEY ("serie_fiscal_id") REFERENCES "serie_fiscal" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_doc_fiscal_cliente" FOREIGN KEY ("cliente_id") REFERENCES "cliente" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_doc_fiscal_transportadora" FOREIGN KEY ("transportadora_id") REFERENCES "transportadora" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- Documento Fiscal Item
ALTER TABLE "documento_fiscal_item"
ADD CONSTRAINT "doc_fiscal_item_num_unique" UNIQUE ("documento_fiscal_id", "numero_item"),
ADD CONSTRAINT "fk_doc_fiscal_item_doc" FOREIGN KEY ("documento_fiscal_id") REFERENCES "documento_fiscal" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT "fk_doc_fiscal_item_produto" FOREIGN KEY ("produto_id") REFERENCES "produto" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- Documento Fiscal Pagamento
ALTER TABLE "documento_fiscal_pagamento"
ADD CONSTRAINT "fk_doc_fiscal_pagamento_doc" FOREIGN KEY ("documento_fiscal_id") REFERENCES "documento_fiscal" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Documento Fiscal Duplicata
ALTER TABLE "documento_fiscal_duplicata"
ADD CONSTRAINT "fk_doc_fiscal_duplicata_doc" FOREIGN KEY ("documento_fiscal_id") REFERENCES "documento_fiscal" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Documento Fiscal Evento
ALTER TABLE "documento_fiscal_evento"
ADD CONSTRAINT "doc_fiscal_evento_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_doc_fiscal_evento_doc" FOREIGN KEY ("documento_fiscal_id") REFERENCES "documento_fiscal" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- NFS-e
ALTER TABLE "nfse"
ADD CONSTRAINT "nfse_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "nfse_empresa_serie_num_amb_unique" UNIQUE ("empresa_id", "serie_rps", "numero_rps", "ambiente_sefaz"),
ADD CONSTRAINT "fk_nfse_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
ADD CONSTRAINT "fk_nfse_serie" FOREIGN KEY ("serie_fiscal_id") REFERENCES "serie_fiscal" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_nfse_cliente" FOREIGN KEY ("cliente_id") REFERENCES "cliente" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_nfse_intermediario" FOREIGN KEY ("intermediario_id") REFERENCES "cliente" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- NFS-e Item
ALTER TABLE "nfse_item"
ADD CONSTRAINT "nfse_item_num_unique" UNIQUE ("nfse_id", "numero_item"),
ADD CONSTRAINT "fk_nfse_item_nfse" FOREIGN KEY ("nfse_id") REFERENCES "nfse" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT "fk_nfse_item_servico" FOREIGN KEY ("servico_id") REFERENCES "servico" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- NFS-e Evento
ALTER TABLE "nfse_evento"
ADD CONSTRAINT "nfse_evento_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_nfse_evento_nfse" FOREIGN KEY ("nfse_id") REFERENCES "nfse" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- CT-e
ALTER TABLE "cte"
ADD CONSTRAINT "cte_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "cte_chave_unique" UNIQUE ("chave_acesso"),
ADD CONSTRAINT "cte_empresa_serie_num_amb_unique" UNIQUE ("empresa_id", "serie", "numero", "ambiente_sefaz"),
ADD CONSTRAINT "fk_cte_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
ADD CONSTRAINT "fk_cte_serie" FOREIGN KEY ("serie_fiscal_id") REFERENCES "serie_fiscal" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_cte_remetente" FOREIGN KEY ("remetente_id") REFERENCES "cliente" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_cte_destinatario" FOREIGN KEY ("destinatario_id") REFERENCES "cliente" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_cte_expedidor" FOREIGN KEY ("expedidor_id") REFERENCES "cliente" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_cte_recebedor" FOREIGN KEY ("recebedor_id") REFERENCES "cliente" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_cte_tomador" FOREIGN KEY ("tomador_id") REFERENCES "cliente" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- CT-e Componentes
ALTER TABLE "cte_componente_valor"
ADD CONSTRAINT "fk_cte_componente_cte" FOREIGN KEY ("cte_id") REFERENCES "cte" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- CT-e Documentos Referenciados
ALTER TABLE "cte_documento_referenciado"
ADD CONSTRAINT "fk_cte_doc_ref_cte" FOREIGN KEY ("cte_id") REFERENCES "cte" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- CT-e Carga
ALTER TABLE "cte_carga"
ADD CONSTRAINT "fk_cte_carga_cte" FOREIGN KEY ("cte_id") REFERENCES "cte" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- CT-e Veículo Rodoviário
ALTER TABLE "cte_veiculo_rodoviario"
ADD CONSTRAINT "fk_cte_veiculo_cte" FOREIGN KEY ("cte_id") REFERENCES "cte" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT "fk_cte_veiculo_veiculo" FOREIGN KEY ("veiculo_id") REFERENCES "veiculo" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT "fk_cte_veiculo_condutor" FOREIGN KEY ("condutor_id") REFERENCES "condutor" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- CT-e Eventos
ALTER TABLE "cte_evento"
ADD CONSTRAINT "cte_evento_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_cte_evento_cte" FOREIGN KEY ("cte_id") REFERENCES "cte" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- MDF-e
ALTER TABLE "mdfe"
ADD CONSTRAINT "mdfe_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "mdfe_chave_unique" UNIQUE ("chave_acesso"),
ADD CONSTRAINT "mdfe_empresa_serie_num_amb_unique" UNIQUE ("empresa_id", "serie", "numero", "ambiente_sefaz"),
ADD CONSTRAINT "fk_mdfe_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
ADD CONSTRAINT "fk_mdfe_serie" FOREIGN KEY ("serie_fiscal_id") REFERENCES "serie_fiscal" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- MDF-e Municípios Carregamento
ALTER TABLE "mdfe_municipio_carregamento"
ADD CONSTRAINT "fk_mdfe_mun_carr_mdfe" FOREIGN KEY ("mdfe_id") REFERENCES "mdfe" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- MDF-e Municípios Descarregamento
ALTER TABLE "mdfe_municipio_descarregamento"
ADD CONSTRAINT "fk_mdfe_mun_desc_mdfe" FOREIGN KEY ("mdfe_id") REFERENCES "mdfe" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- MDF-e Percurso UFs
ALTER TABLE "mdfe_percurso_uf"
ADD CONSTRAINT "fk_mdfe_percurso_mdfe" FOREIGN KEY ("mdfe_id") REFERENCES "mdfe" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- MDF-e Veículo Tração
ALTER TABLE "mdfe_veiculo_tracao"
ADD CONSTRAINT "fk_mdfe_veic_tracao_mdfe" FOREIGN KEY ("mdfe_id") REFERENCES "mdfe" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT "fk_mdfe_veic_tracao_veiculo" FOREIGN KEY ("veiculo_id") REFERENCES "veiculo" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- MDF-e Reboques
ALTER TABLE "mdfe_veiculo_reboque"
ADD CONSTRAINT "fk_mdfe_veic_reboque_mdfe" FOREIGN KEY ("mdfe_id") REFERENCES "mdfe" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT "fk_mdfe_veic_reboque_veiculo" FOREIGN KEY ("veiculo_id") REFERENCES "veiculo" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- MDF-e Condutores
ALTER TABLE "mdfe_condutor"
ADD CONSTRAINT "fk_mdfe_condutor_mdfe" FOREIGN KEY ("mdfe_id") REFERENCES "mdfe" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT "fk_mdfe_condutor_condutor" FOREIGN KEY ("condutor_id") REFERENCES "condutor" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- MDF-e Documentos Referenciados
ALTER TABLE "mdfe_documento_referenciado"
ADD CONSTRAINT "fk_mdfe_doc_ref_mdfe" FOREIGN KEY ("mdfe_id") REFERENCES "mdfe" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- MDF-e Eventos
ALTER TABLE "mdfe_evento"
ADD CONSTRAINT "mdfe_evento_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_mdfe_evento_mdfe" FOREIGN KEY ("mdfe_id") REFERENCES "mdfe" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Pagamento Empresa
ALTER TABLE "pagamento_empresa"
ADD CONSTRAINT "pagamento_empresa_uuid_unique" UNIQUE ("uuid"),
ADD CONSTRAINT "fk_pagamento_empresa_empresa" FOREIGN KEY ("empresa_id") REFERENCES "empresa" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT "fk_pagamento_empresa_contador" FOREIGN KEY ("contador_id") REFERENCES "contador" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- ============================================================================
-- 12. ÍNDICES DE PERFORMANCE E BUSCA RÁPIDA
-- ============================================================================
CREATE INDEX IF NOT EXISTS "idx_empresa_matriz_id" ON "empresa" ("matriz_id");
CREATE INDEX IF NOT EXISTS "idx_empresa_cnpj" ON "empresa" ("cnpj");
CREATE INDEX IF NOT EXISTS "idx_empresa_config_fiscal_empresa" ON "empresa_configuracao_fiscal" ("empresa_id");
CREATE INDEX IF NOT EXISTS "idx_serie_fiscal_empresa_mod" ON "serie_fiscal" ("empresa_id", "modelo_documento");
CREATE INDEX IF NOT EXISTS "idx_cliente_empresa_id" ON "cliente" ("empresa_id");
CREATE INDEX IF NOT EXISTS "idx_cliente_cpf_cnpj" ON "cliente" ("cpf", "cnpj");
CREATE INDEX IF NOT EXISTS "idx_fornecedor_empresa_id" ON "fornecedor" ("empresa_id");
CREATE INDEX IF NOT EXISTS "idx_veiculo_empresa_placa" ON "veiculo" ("empresa_id", "placa");
CREATE INDEX IF NOT EXISTS "idx_condutor_empresa_cpf" ON "condutor" ("empresa_id", "cpf");
CREATE INDEX IF NOT EXISTS "idx_produto_empresa_id" ON "produto" ("empresa_id");
CREATE INDEX IF NOT EXISTS "idx_produto_codigo_interno" ON "produto" ("codigo_interno");
CREATE INDEX IF NOT EXISTS "idx_produto_ncm" ON "produto" ("ncm");
CREATE INDEX IF NOT EXISTS "idx_produto_c_classif_trib" ON "produto" ("c_classif_trib");
CREATE INDEX IF NOT EXISTS "idx_produto_ean" ON "produto" ("codigo_barras_ean");
CREATE INDEX IF NOT EXISTS "idx_servico_empresa_id" ON "servico" ("empresa_id");
CREATE INDEX IF NOT EXISTS "idx_servico_codigo_interno" ON "servico" ("codigo_interno");
CREATE INDEX IF NOT EXISTS "idx_servico_item_lc116" ON "servico" ("item_lista_servico");
CREATE INDEX IF NOT EXISTS "idx_doc_fiscal_empresa_id" ON "documento_fiscal" ("empresa_id");
CREATE INDEX IF NOT EXISTS "idx_doc_fiscal_status" ON "documento_fiscal" ("status");
CREATE INDEX IF NOT EXISTS "idx_doc_fiscal_data_emissao" ON "documento_fiscal" ("data_emissao");
CREATE INDEX IF NOT EXISTS "idx_doc_fiscal_chave_acesso" ON "documento_fiscal" ("chave_acesso");
CREATE INDEX IF NOT EXISTS "idx_doc_fiscal_item_doc_id" ON "documento_fiscal_item" ("documento_fiscal_id");
CREATE INDEX IF NOT EXISTS "idx_nfse_empresa_id" ON "nfse" ("empresa_id");
CREATE INDEX IF NOT EXISTS "idx_nfse_status" ON "nfse" ("status");
CREATE INDEX IF NOT EXISTS "idx_nfse_numero_nfse" ON "nfse" ("numero_nfse");
CREATE INDEX IF NOT EXISTS "idx_nfse_chave_acesso" ON "nfse" ("chave_acesso");
CREATE INDEX IF NOT EXISTS "idx_nfse_id_dps" ON "nfse" ("id_dps");
CREATE INDEX IF NOT EXISTS "idx_nfse_item_nfse_id" ON "nfse_item" ("nfse_id");
CREATE INDEX IF NOT EXISTS "idx_cte_empresa_id" ON "cte" ("empresa_id");
CREATE INDEX IF NOT EXISTS "idx_cte_status" ON "cte" ("status");
CREATE INDEX IF NOT EXISTS "idx_cte_chave_acesso" ON "cte" ("chave_acesso");
CREATE INDEX IF NOT EXISTS "idx_mdfe_empresa_id" ON "mdfe" ("empresa_id");
CREATE INDEX IF NOT EXISTS "idx_mdfe_status" ON "mdfe" ("status");
CREATE INDEX IF NOT EXISTS "idx_mdfe_chave_acesso" ON "mdfe" ("chave_acesso");
-- ============================================================================
-- 13. DADOS INICIAIS DE APOIO (SEEDS DE UNIDADES E CONFIGURAÇÃO)
-- ============================================================================
INSERT INTO "unidade" ("sigla", "descricao") VALUES
('UN', 'UNIDADE'),
('CX', 'CAIXA'),
('KG', 'QUILOGRAMA'),
('KIT', 'KIT'),
('PC', 'PEÇA'),
('PCT', 'PACOTE'),
('LT', 'LITRO'),
('M', 'METRO'),
('M2', 'METRO QUADRADO'),
('M3', 'METRO CÚBICO'),
('PAR', 'PAR'),
('DZ', 'DUZIA'),
('FD', 'FARDO'),
('TON', 'TONELADA'),
('G', 'GRAMA'),
('ML', 'MILILITRO'),
('SERV', 'SERVIÇO'),
('HORA', 'HORA')
ON CONFLICT ("sigla") DO NOTHING;
INSERT INTO "configuracao" ("id", "nome_app", "mensagem_suporte") VALUES
(1, 'Workbloom ERP', 'Suporte ao emissor fiscal disponível de segunda a sexta.')
ON CONFLICT ("id") DO NOTHING;