LevelOS-Core/UI/ArquivosAuxiliares/BoletoTableNew.sql

189 lines
6.6 KiB
Transact-SQL

USE [Levelcode-LevelOS]
GO
-- ============================================================
-- MIGRAÇÃO DA TABELA [dbo].[Boletos]
-- Gerado em: 20/04/2026
-- Descrição: Melhoria de tipos, rastreabilidade,
-- suporte a arquivo (XML/PDF) e baixa bancária
-- ============================================================
-- ── PASSO 1: Corrigir tipos das colunas existentes ──────────
-- Datas
ALTER TABLE [dbo].[Boletos]
ALTER COLUMN [EMITIDO] DATE NULL;
GO
ALTER TABLE [dbo].[Boletos]
ALTER COLUMN [VENCE] DATE NULL;
GO
-- Valor
ALTER TABLE [dbo].[Boletos]
ALTER COLUMN [VALOR] DECIMAL(10,2) NULL;
GO
-- Flags booleanas (S/N → BIT)
-- Precisa converter os dados antes de mudar o tipo
UPDATE [dbo].[Boletos] SET [PG] = CASE WHEN [PG] = 'S' THEN '1' ELSE '0' END;
UPDATE [dbo].[Boletos] SET [ACEITE] = CASE WHEN [ACEITE] = 'S' THEN '1' ELSE '0' END;
UPDATE [dbo].[Boletos] SET [IMPRESSO] = CASE WHEN [IMPRESSO] = 'S' THEN '1' ELSE '0' END;
UPDATE [dbo].[Boletos] SET [IMPORTACAO]= CASE WHEN [IMPORTACAO]= 'S' THEN '1' ELSE '0' END;
GO
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [PG] BIT NOT NULL;
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [ACEITE] BIT NOT NULL;
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [IMPRESSO] BIT NOT NULL;
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [IMPORTACAO] BIT NOT NULL;
GO
-- Campos de texto: limitar tamanho adequado
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [CODIGO] VARCHAR(50) NULL;
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [NUMERO] VARCHAR(50) NULL;
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [NOSSO_NUMERO] VARCHAR(50) NULL;
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [SACADO] VARCHAR(200) NULL;
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [CONTA] VARCHAR(100) NULL;
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [COD_CONTA] VARCHAR(30) NULL;
ALTER TABLE [dbo].[Boletos] ALTER COLUMN [OBSERVACAO] VARCHAR(500) NULL;
GO
-- ── PASSO 2: Adicionar colunas novas ────────────────────────
-- Baixa bancária / integração
ALTER TABLE [dbo].[Boletos]
ADD [CHAVE_BOLETO] VARCHAR(100) NULL; -- Chave única para baixa/integração bancária
GO
ALTER TABLE [dbo].[Boletos]
ADD [LINHA_DIGITAVEL] VARCHAR(60) NULL; -- Código de barras / linha digitável
GO
-- Pagamento
ALTER TABLE [dbo].[Boletos]
ADD [DT_PAGAMENTO] DATE NULL; -- Data efetiva do pagamento
GO
ALTER TABLE [dbo].[Boletos]
ADD [VL_PAGO] DECIMAL(10,2) NULL; -- Valor pago (pode ter multa/desconto)
GO
ALTER TABLE [dbo].[Boletos]
ADD [VL_MULTA] DECIMAL(10,2) NULL; -- Multa por atraso
GO
ALTER TABLE [dbo].[Boletos]
ADD [VL_DESCONTO] DECIMAL(10,2) NULL; -- Desconto concedido
GO
-- Arquivo (XML ou PDF) — caminho em disco
ALTER TABLE [dbo].[Boletos]
ADD [ARQUIVO_NOME] VARCHAR(255) NULL; -- Nome original do arquivo
GO
ALTER TABLE [dbo].[Boletos]
ADD [ARQUIVO_TIPO] VARCHAR(10) NULL; -- 'XML' ou 'PDF'
GO
ALTER TABLE [dbo].[Boletos]
ADD [ARQUIVO_CAMINHO] VARCHAR(500) NULL; -- Caminho completo em disco
GO
-- Arquivo — binário no banco
ALTER TABLE [dbo].[Boletos]
ADD [ARQUIVO_DADOS] VARBINARY(MAX) NULL; -- Conteúdo binário do arquivo
GO
-- Rastreabilidade
ALTER TABLE [dbo].[Boletos]
ADD [DT_CADASTRO] DATETIME NOT NULL DEFAULT GETDATE(); -- Data de criação
GO
ALTER TABLE [dbo].[Boletos]
ADD [DT_ALTERACAO] DATETIME NULL; -- Última alteração
GO
ALTER TABLE [dbo].[Boletos]
ADD [ID_USUARIO] INT NULL; -- Usuário responsável
GO
ALTER TABLE [dbo].[Boletos]
ADD [STATUS] VARCHAR(20) NOT NULL DEFAULT 'ABERTO';
-- Valores possíveis: 'ABERTO', 'PAGO', 'VENCIDO', 'CANCELADO', 'BAIXADO'
GO
-- ── PASSO 3: Índices para performance ───────────────────────
-- Busca por número do boleto
CREATE NONCLUSTERED INDEX [IX_Boletos_Numero]
ON [dbo].[Boletos] ([NUMERO] ASC)
WHERE [NUMERO] IS NOT NULL;
GO
-- Busca por chave bancária
CREATE NONCLUSTERED INDEX [IX_Boletos_Chave]
ON [dbo].[Boletos] ([CHAVE_BOLETO] ASC)
WHERE [CHAVE_BOLETO] IS NOT NULL;
GO
-- Busca por vencimento (relatórios de inadimplência)
CREATE NONCLUSTERED INDEX [IX_Boletos_Vence]
ON [dbo].[Boletos] ([VENCE] ASC);
GO
-- Busca por status
CREATE NONCLUSTERED INDEX [IX_Boletos_Status]
ON [dbo].[Boletos] ([STATUS] ASC);
GO
-- ── PASSO 4: Constraint de validação de status ──────────────
ALTER TABLE [dbo].[Boletos]
ADD CONSTRAINT [CK_Boletos_Status]
CHECK ([STATUS] IN ('ABERTO', 'PAGO', 'VENCIDO', 'CANCELADO', 'BAIXADO'));
GO
ALTER TABLE [dbo].[Boletos]
ADD CONSTRAINT [CK_Boletos_ArquivoTipo]
CHECK ([ARQUIVO_TIPO] IN ('XML', 'PDF') OR [ARQUIVO_TIPO] IS NULL);
GO
-- ── PASSO 5: FK para usuário (se a tabela existir) ──────────
-- Descomente quando a tabela de usuários estiver criada:
-- ALTER TABLE [dbo].[Boletos]
-- ADD CONSTRAINT [FK_Boletos_Usuario]
-- FOREIGN KEY ([ID_USUARIO]) REFERENCES [dbo].[Usuarios]([ID_USUARIO]);
-- GO
-- ── RESULTADO FINAL ──────────────────────────────────────────
-- Tabela com a estrutura completa após migração:
--
-- ID_BOLETO INT IDENTITY PK
-- CODIGO VARCHAR(50)
-- NUMERO VARCHAR(50)
-- NOSSO_NUMERO VARCHAR(50)
-- CHAVE_BOLETO VARCHAR(100) ← novo
-- LINHA_DIGITAVEL VARCHAR(60) ← novo
-- EMITIDO DATE ← tipo corrigido
-- VENCE DATE ← tipo corrigido
-- DT_PAGAMENTO DATE ← novo
-- VALOR DECIMAL(10,2) ← tipo corrigido
-- VL_PAGO DECIMAL(10,2) ← novo
-- VL_MULTA DECIMAL(10,2) ← novo
-- VL_DESCONTO DECIMAL(10,2) ← novo
-- STATUS VARCHAR(20) ← novo
-- PG BIT ← tipo corrigido
-- SACADO VARCHAR(200) ← tipo corrigido
-- CONTA VARCHAR(100) ← tipo corrigido
-- COD_CONTA VARCHAR(30) ← tipo corrigido
-- ACEITE BIT ← tipo corrigido
-- IMPRESSO BIT ← tipo corrigido
-- IMPORTACAO BIT ← tipo corrigido
-- ARQUIVO_NOME VARCHAR(255) ← novo
-- ARQUIVO_TIPO VARCHAR(10) ← novo
-- ARQUIVO_CAMINHO VARCHAR(500) ← novo
-- ARQUIVO_DADOS VARBINARY(MAX) ← novo
-- OBSERVACAO VARCHAR(500) ← tipo corrigido
-- DT_CADASTRO DATETIME ← novo
-- DT_ALTERACAO DATETIME ← novo
-- ID_USUARIO INT ← novo