-- Devoluções parciais vinculadas aos documentos e itens originais.
SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS estoque_devolucoes (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_conta INT NOT NULL,
    id_empresa INT NOT NULL,
    tipo_documento VARCHAR(10) NOT NULL,
    id_documento BIGINT UNSIGNED NOT NULL,
    id_operacao INT NOT NULL,
    motivo VARCHAR(500) NOT NULL,
    id_usuario INT NULL,
    dthr_registro DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    PRIMARY KEY (id),
    KEY idx_devolucoes_documento (id_conta, tipo_documento, id_documento),
    KEY idx_devolucoes_empresa_data (id_empresa, dthr_registro),
    CONSTRAINT fk_devolucoes_conta FOREIGN KEY (id_conta) REFERENCES contas_usuarios (id),
    CONSTRAINT fk_devolucoes_empresa FOREIGN KEY (id_empresa) REFERENCES empresas (id),
    CONSTRAINT fk_devolucoes_operacao FOREIGN KEY (id_operacao) REFERENCES operacoes (id),
    CONSTRAINT fk_devolucoes_usuario FOREIGN KEY (id_usuario) REFERENCES usuarios (id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS estoque_devolucao_itens (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_devolucao BIGINT UNSIGNED NOT NULL,
    id_item_origem BIGINT UNSIGNED NOT NULL,
    id_produto INT NOT NULL,
    quantidade DECIMAL(18,4) NOT NULL,
    custo_unitario DECIMAL(18,6) NOT NULL,
    valor_total DECIMAL(18,2) NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uq_devolucao_item_origem (id_devolucao, id_item_origem),
    KEY idx_devolucao_itens_produto (id_produto),
    KEY idx_devolucao_itens_origem (id_item_origem),
    CONSTRAINT fk_devolucao_itens_devolucao FOREIGN KEY (id_devolucao) REFERENCES estoque_devolucoes (id) ON DELETE RESTRICT,
    CONSTRAINT fk_devolucao_itens_produto FOREIGN KEY (id_produto) REFERENCES produtos (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
