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