-- CreateEnum
CREATE TYPE "UrgenciaRequisicao" AS ENUM ('NORMAL', 'URGENTE', 'EMERGENCIAL');

-- CreateEnum
CREATE TYPE "StatusRequisicao" AS ENUM ('RASCUNHO', 'PENDENTE', 'APROVADA', 'RECUSADA', 'CANCELADA');

-- CreateEnum
CREATE TYPE "DecisaoAprovacao" AS ENUM ('PENDENTE', 'APROVADO', 'RECUSADO');

-- CreateEnum
CREATE TYPE "StatusVeiculo" AS ENUM ('OPERACIONAL', 'OFICINA', 'VENDIDO', 'INATIVO');

-- CreateEnum
CREATE TYPE "TipoAnexo" AS ENUM ('FOTO', 'ORCAMENTO', 'NOTA_TECNICA', 'GARANTIA', 'OUTRO');

-- CreateEnum
CREATE TYPE "TipoAprovador" AS ENUM ('PERFIL', 'USUARIO');

-- CreateEnum
CREATE TYPE "TipoOrcamento" AS ENUM ('MENSAL', 'ANUAL');

-- CreateEnum
CREATE TYPE "TipoMovimentoEstoque" AS ENUM ('ENTRADA', 'SAIDA');

-- CreateEnum
CREATE TYPE "TipoAtivoQr" AS ENUM ('CABINE', 'COMPONENTE');

-- CreateEnum
CREATE TYPE "TipoComponente" AS ENUM ('PIA', 'CAIXA_DEJETO', 'PAPEL_TOALHA', 'SABONETE');

-- CreateEnum
CREATE TYPE "SubtipoCaixaDejeto" AS ENUM ('VISUALIZA_DEJETO', 'COM_DESCARGA');

-- CreateEnum
CREATE TYPE "ModeloBanheiro" AS ENUM ('SIMPLES', 'LUXO', 'SUPER_LUXO', 'INDEFINIDO');

-- CreateEnum
CREATE TYPE "StatusUnidadeLocacao" AS ENUM ('DISPONIVEL', 'LOCADO', 'MANUTENCAO');

-- CreateEnum
CREATE TYPE "TipoEventoEntrega" AS ENUM ('ENTREGA', 'DEVOLUCAO');

-- CreateEnum
CREATE TYPE "StatusIntegracao" AS ENUM ('PENDENTE', 'ENVIADO', 'ERRO');

-- CreateTable
CREATE TABLE "empresa" (
    "id" SERIAL NOT NULL,
    "razao_social" TEXT NOT NULL,
    "nome_fantasia" TEXT,
    "cnpj" TEXT NOT NULL,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "empresa_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "filial" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER NOT NULL,
    "nome" TEXT NOT NULL,
    "cnpj" TEXT,
    "endereco" TEXT,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "filial_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "centro_custo" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER NOT NULL,
    "filial_id" INTEGER NOT NULL,
    "codigo" TEXT NOT NULL,
    "nome" TEXT NOT NULL,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "centro_custo_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "usuario" (
    "id" SERIAL NOT NULL,
    "nome" TEXT NOT NULL,
    "email" TEXT NOT NULL,
    "senha_hash" TEXT NOT NULL,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "trocar_senha" BOOLEAN NOT NULL DEFAULT true,
    "acesso_remoto" BOOLEAN NOT NULL DEFAULT false,
    "two_factor_secret" TEXT,
    "two_factor_ativo" BOOLEAN NOT NULL DEFAULT false,
    "ultimo_login" TIMESTAMP(3),
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "usuario_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "perfil" (
    "id" SERIAL NOT NULL,
    "nome" TEXT NOT NULL,
    "descricao" TEXT,
    "is_sistema" BOOLEAN NOT NULL DEFAULT false,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "perfil_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "permissao" (
    "id" SERIAL NOT NULL,
    "codigo" TEXT NOT NULL,
    "descricao" TEXT NOT NULL,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "permissao_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "perfil_permissao" (
    "perfil_id" INTEGER NOT NULL,
    "permissao_id" INTEGER NOT NULL,

    CONSTRAINT "perfil_permissao_pkey" PRIMARY KEY ("perfil_id","permissao_id")
);

-- CreateTable
CREATE TABLE "usuario_perfil" (
    "usuario_id" INTEGER NOT NULL,
    "perfil_id" INTEGER NOT NULL,

    CONSTRAINT "usuario_perfil_pkey" PRIMARY KEY ("usuario_id","perfil_id")
);

-- CreateTable
CREATE TABLE "usuario_permissao" (
    "usuario_id" INTEGER NOT NULL,
    "permissao_id" INTEGER NOT NULL,
    "concedida" BOOLEAN NOT NULL DEFAULT true,

    CONSTRAINT "usuario_permissao_pkey" PRIMARY KEY ("usuario_id","permissao_id")
);

-- CreateTable
CREATE TABLE "usuario_acesso_hierarquia" (
    "id" SERIAL NOT NULL,
    "usuario_id" INTEGER NOT NULL,
    "empresa_id" INTEGER NOT NULL,
    "filial_id" INTEGER,
    "centro_custo_id" INTEGER,

    CONSTRAINT "usuario_acesso_hierarquia_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "ip_permitido" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER,
    "filial_id" INTEGER,
    "cidr" TEXT NOT NULL,
    "descricao" TEXT,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "ip_permitido_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "alcada_regra" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER,
    "descricao" TEXT,
    "valor_min" DECIMAL(14,2) NOT NULL,
    "valor_max" DECIMAL(14,2),
    "requer_dupla_aprovacao" BOOLEAN NOT NULL DEFAULT false,
    "ordem" INTEGER NOT NULL DEFAULT 0,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "alcada_regra_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "alcada_aprovador" (
    "id" SERIAL NOT NULL,
    "regra_id" INTEGER NOT NULL,
    "tipo" "TipoAprovador" NOT NULL,
    "perfil_id" INTEGER,
    "usuario_id" INTEGER,
    "ordem" INTEGER NOT NULL DEFAULT 0,

    CONSTRAINT "alcada_aprovador_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "categoria" (
    "id" SERIAL NOT NULL,
    "nome" TEXT NOT NULL,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "categoria_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "requisicao" (
    "id" SERIAL NOT NULL,
    "numero" TEXT NOT NULL,
    "empresa_id" INTEGER NOT NULL,
    "filial_id" INTEGER,
    "centro_custo_id" INTEGER NOT NULL,
    "categoria_id" INTEGER NOT NULL,
    "solicitante_id" INTEGER NOT NULL,
    "comprador_id" INTEGER,
    "veiculo_id" INTEGER,
    "fornecedor_id" INTEGER,
    "descricao_peca" TEXT NOT NULL,
    "preco_solicitado" DECIMAL(14,2) NOT NULL,
    "motivo" TEXT NOT NULL,
    "urgencia" "UrgenciaRequisicao" NOT NULL DEFAULT 'NORMAL',
    "retirar_estoque" BOOLEAN NOT NULL DEFAULT false,
    "status" "StatusRequisicao" NOT NULL DEFAULT 'RASCUNHO',
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "requisicao_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "requisicao_anexo" (
    "id" SERIAL NOT NULL,
    "requisicao_id" INTEGER NOT NULL,
    "tipo" "TipoAnexo" NOT NULL DEFAULT 'OUTRO',
    "arquivo" TEXT NOT NULL,
    "descricao" TEXT,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "requisicao_anexo_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "requisicao_aprovacao" (
    "id" SERIAL NOT NULL,
    "requisicao_id" INTEGER NOT NULL,
    "aprovador_id" INTEGER,
    "ordem" INTEGER NOT NULL DEFAULT 0,
    "decisao" "DecisaoAprovacao" NOT NULL DEFAULT 'PENDENTE',
    "motivo_recusa_id" INTEGER,
    "motivo_texto" TEXT,
    "checklist" JSONB,
    "decidido_em" TIMESTAMP(3),
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "requisicao_aprovacao_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "motivo_recusa" (
    "id" SERIAL NOT NULL,
    "codigo" TEXT NOT NULL,
    "descricao" TEXT NOT NULL,
    "ativo" BOOLEAN NOT NULL DEFAULT true,

    CONSTRAINT "motivo_recusa_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "veiculo" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER NOT NULL,
    "centro_custo_id" INTEGER,
    "placa" TEXT NOT NULL,
    "modelo" TEXT NOT NULL,
    "ano" INTEGER,
    "km_atual" INTEGER,
    "status" "StatusVeiculo" NOT NULL DEFAULT 'OPERACIONAL',
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "veiculo_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "fornecedor" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER,
    "razao_social" TEXT NOT NULL,
    "cnpj" TEXT,
    "telefone" TEXT,
    "contato" TEXT,
    "categoria_id" INTEGER,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "fornecedor_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "orcamento" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER NOT NULL,
    "centro_custo_id" INTEGER,
    "ano" INTEGER NOT NULL,
    "mes" INTEGER,
    "tipo" "TipoOrcamento" NOT NULL DEFAULT 'MENSAL',
    "valor" DECIMAL(14,2) NOT NULL,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "orcamento_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "item_estoque" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER NOT NULL,
    "categoria_id" INTEGER,
    "descricao" TEXT NOT NULL,
    "unidade" TEXT NOT NULL DEFAULT 'UN',
    "saldo" DECIMAL(14,3) NOT NULL DEFAULT 0,
    "qr_code" TEXT,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "item_estoque_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "movimento_estoque" (
    "id" SERIAL NOT NULL,
    "item_id" INTEGER NOT NULL,
    "tipo" "TipoMovimentoEstoque" NOT NULL,
    "quantidade" DECIMAL(14,3) NOT NULL,
    "usuario_id" INTEGER,
    "observacao" TEXT,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "movimento_estoque_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "ativo_qr" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER NOT NULL,
    "qr_code" TEXT NOT NULL,
    "tipo" "TipoAtivoQr" NOT NULL,
    "numero" TEXT,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "ativo_qr_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "cabine" (
    "id" SERIAL NOT NULL,
    "ativo_qr_id" INTEGER NOT NULL,
    "modelo_calculado" "ModeloBanheiro" NOT NULL DEFAULT 'INDEFINIDO',
    "status_locacao" "StatusUnidadeLocacao" NOT NULL DEFAULT 'DISPONIVEL',
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "cabine_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "componente" (
    "id" SERIAL NOT NULL,
    "ativo_qr_id" INTEGER NOT NULL,
    "tipo" "TipoComponente" NOT NULL,
    "subtipo" "SubtipoCaixaDejeto",
    "numero_serie" TEXT,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "componente_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "composicao" (
    "id" SERIAL NOT NULL,
    "cabine_id" INTEGER NOT NULL,
    "componente_id" INTEGER NOT NULL,
    "instalado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "removido_em" TIMESTAMP(3),

    CONSTRAINT "composicao_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "ordem_locacao" (
    "id" SERIAL NOT NULL,
    "empresa_id" INTEGER NOT NULL,
    "numero" TEXT NOT NULL,
    "cliente" TEXT NOT NULL,
    "quantidade" INTEGER NOT NULL,
    "tipo_banheiro" "ModeloBanheiro" NOT NULL,
    "qr_payload" TEXT,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "atualizado_em" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "ordem_locacao_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "entrega" (
    "id" SERIAL NOT NULL,
    "ordem_id" INTEGER NOT NULL,
    "cabine_id" INTEGER NOT NULL,
    "motorista_id" INTEGER,
    "tipo" "TipoEventoEntrega" NOT NULL,
    "foto" TEXT,
    "gps_lat" DECIMAL(10,7),
    "gps_lng" DECIMAL(10,7),
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "entrega_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "integracao_outbox" (
    "id" SERIAL NOT NULL,
    "entidade" TEXT NOT NULL,
    "entidade_id" INTEGER NOT NULL,
    "payload" JSONB NOT NULL,
    "status" "StatusIntegracao" NOT NULL DEFAULT 'PENDENTE',
    "tentativas" INTEGER NOT NULL DEFAULT 0,
    "erro" TEXT,
    "enviado_em" TIMESTAMP(3),
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "integracao_outbox_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "audit_log" (
    "id" SERIAL NOT NULL,
    "usuario_id" INTEGER,
    "acao" TEXT NOT NULL,
    "entidade" TEXT NOT NULL,
    "entidade_id" TEXT,
    "dados_antes" JSONB,
    "dados_depois" JSONB,
    "ip" TEXT,
    "user_agent" TEXT,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "audit_log_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "status_historico" (
    "id" SERIAL NOT NULL,
    "entidade" TEXT NOT NULL,
    "entidade_id" TEXT NOT NULL,
    "status_anterior" TEXT,
    "status_novo" TEXT NOT NULL,
    "usuario_id" INTEGER,
    "motivo" TEXT,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "status_historico_pkey" PRIMARY KEY ("id")
);

-- CreateIndex
CREATE UNIQUE INDEX "empresa_cnpj_key" ON "empresa"("cnpj");

-- CreateIndex
CREATE INDEX "filial_empresa_id_idx" ON "filial"("empresa_id");

-- CreateIndex
CREATE INDEX "centro_custo_empresa_id_idx" ON "centro_custo"("empresa_id");

-- CreateIndex
CREATE UNIQUE INDEX "centro_custo_filial_id_codigo_key" ON "centro_custo"("filial_id", "codigo");

-- CreateIndex
CREATE UNIQUE INDEX "usuario_email_key" ON "usuario"("email");

-- CreateIndex
CREATE UNIQUE INDEX "perfil_nome_key" ON "perfil"("nome");

-- CreateIndex
CREATE UNIQUE INDEX "permissao_codigo_key" ON "permissao"("codigo");

-- CreateIndex
CREATE INDEX "usuario_acesso_hierarquia_usuario_id_idx" ON "usuario_acesso_hierarquia"("usuario_id");

-- CreateIndex
CREATE INDEX "alcada_aprovador_regra_id_idx" ON "alcada_aprovador"("regra_id");

-- CreateIndex
CREATE UNIQUE INDEX "categoria_nome_key" ON "categoria"("nome");

-- CreateIndex
CREATE UNIQUE INDEX "requisicao_numero_key" ON "requisicao"("numero");

-- CreateIndex
CREATE INDEX "requisicao_empresa_id_idx" ON "requisicao"("empresa_id");

-- CreateIndex
CREATE INDEX "requisicao_centro_custo_id_idx" ON "requisicao"("centro_custo_id");

-- CreateIndex
CREATE INDEX "requisicao_status_idx" ON "requisicao"("status");

-- CreateIndex
CREATE INDEX "requisicao_criado_em_idx" ON "requisicao"("criado_em");

-- CreateIndex
CREATE INDEX "requisicao_anexo_requisicao_id_idx" ON "requisicao_anexo"("requisicao_id");

-- CreateIndex
CREATE INDEX "requisicao_aprovacao_requisicao_id_idx" ON "requisicao_aprovacao"("requisicao_id");

-- CreateIndex
CREATE INDEX "requisicao_aprovacao_aprovador_id_idx" ON "requisicao_aprovacao"("aprovador_id");

-- CreateIndex
CREATE INDEX "requisicao_aprovacao_decisao_idx" ON "requisicao_aprovacao"("decisao");

-- CreateIndex
CREATE UNIQUE INDEX "motivo_recusa_codigo_key" ON "motivo_recusa"("codigo");

-- CreateIndex
CREATE UNIQUE INDEX "veiculo_placa_key" ON "veiculo"("placa");

-- CreateIndex
CREATE INDEX "veiculo_empresa_id_idx" ON "veiculo"("empresa_id");

-- CreateIndex
CREATE INDEX "fornecedor_empresa_id_idx" ON "fornecedor"("empresa_id");

-- CreateIndex
CREATE INDEX "orcamento_empresa_id_idx" ON "orcamento"("empresa_id");

-- CreateIndex
CREATE UNIQUE INDEX "item_estoque_qr_code_key" ON "item_estoque"("qr_code");

-- CreateIndex
CREATE INDEX "item_estoque_empresa_id_idx" ON "item_estoque"("empresa_id");

-- CreateIndex
CREATE INDEX "movimento_estoque_item_id_idx" ON "movimento_estoque"("item_id");

-- CreateIndex
CREATE UNIQUE INDEX "ativo_qr_qr_code_key" ON "ativo_qr"("qr_code");

-- CreateIndex
CREATE INDEX "ativo_qr_empresa_id_idx" ON "ativo_qr"("empresa_id");

-- CreateIndex
CREATE UNIQUE INDEX "cabine_ativo_qr_id_key" ON "cabine"("ativo_qr_id");

-- CreateIndex
CREATE UNIQUE INDEX "componente_ativo_qr_id_key" ON "componente"("ativo_qr_id");

-- CreateIndex
CREATE INDEX "composicao_cabine_id_idx" ON "composicao"("cabine_id");

-- CreateIndex
CREATE INDEX "composicao_componente_id_idx" ON "composicao"("componente_id");

-- CreateIndex
CREATE UNIQUE INDEX "ordem_locacao_numero_key" ON "ordem_locacao"("numero");

-- CreateIndex
CREATE INDEX "ordem_locacao_empresa_id_idx" ON "ordem_locacao"("empresa_id");

-- CreateIndex
CREATE INDEX "entrega_ordem_id_idx" ON "entrega"("ordem_id");

-- CreateIndex
CREATE INDEX "integracao_outbox_status_idx" ON "integracao_outbox"("status");

-- CreateIndex
CREATE INDEX "audit_log_entidade_entidade_id_idx" ON "audit_log"("entidade", "entidade_id");

-- CreateIndex
CREATE INDEX "audit_log_usuario_id_idx" ON "audit_log"("usuario_id");

-- CreateIndex
CREATE INDEX "audit_log_criado_em_idx" ON "audit_log"("criado_em");

-- CreateIndex
CREATE INDEX "status_historico_entidade_entidade_id_idx" ON "status_historico"("entidade", "entidade_id");

-- AddForeignKey
ALTER TABLE "filial" ADD CONSTRAINT "filial_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "centro_custo" ADD CONSTRAINT "centro_custo_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "centro_custo" ADD CONSTRAINT "centro_custo_filial_id_fkey" FOREIGN KEY ("filial_id") REFERENCES "filial"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "perfil_permissao" ADD CONSTRAINT "perfil_permissao_perfil_id_fkey" FOREIGN KEY ("perfil_id") REFERENCES "perfil"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "perfil_permissao" ADD CONSTRAINT "perfil_permissao_permissao_id_fkey" FOREIGN KEY ("permissao_id") REFERENCES "permissao"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "usuario_perfil" ADD CONSTRAINT "usuario_perfil_usuario_id_fkey" FOREIGN KEY ("usuario_id") REFERENCES "usuario"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "usuario_perfil" ADD CONSTRAINT "usuario_perfil_perfil_id_fkey" FOREIGN KEY ("perfil_id") REFERENCES "perfil"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "usuario_permissao" ADD CONSTRAINT "usuario_permissao_usuario_id_fkey" FOREIGN KEY ("usuario_id") REFERENCES "usuario"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "usuario_permissao" ADD CONSTRAINT "usuario_permissao_permissao_id_fkey" FOREIGN KEY ("permissao_id") REFERENCES "permissao"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "usuario_acesso_hierarquia" ADD CONSTRAINT "usuario_acesso_hierarquia_usuario_id_fkey" FOREIGN KEY ("usuario_id") REFERENCES "usuario"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "usuario_acesso_hierarquia" ADD CONSTRAINT "usuario_acesso_hierarquia_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "usuario_acesso_hierarquia" ADD CONSTRAINT "usuario_acesso_hierarquia_filial_id_fkey" FOREIGN KEY ("filial_id") REFERENCES "filial"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "usuario_acesso_hierarquia" ADD CONSTRAINT "usuario_acesso_hierarquia_centro_custo_id_fkey" FOREIGN KEY ("centro_custo_id") REFERENCES "centro_custo"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "ip_permitido" ADD CONSTRAINT "ip_permitido_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "ip_permitido" ADD CONSTRAINT "ip_permitido_filial_id_fkey" FOREIGN KEY ("filial_id") REFERENCES "filial"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "alcada_regra" ADD CONSTRAINT "alcada_regra_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "alcada_aprovador" ADD CONSTRAINT "alcada_aprovador_regra_id_fkey" FOREIGN KEY ("regra_id") REFERENCES "alcada_regra"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "alcada_aprovador" ADD CONSTRAINT "alcada_aprovador_perfil_id_fkey" FOREIGN KEY ("perfil_id") REFERENCES "perfil"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "alcada_aprovador" ADD CONSTRAINT "alcada_aprovador_usuario_id_fkey" FOREIGN KEY ("usuario_id") REFERENCES "usuario"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao" ADD CONSTRAINT "requisicao_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao" ADD CONSTRAINT "requisicao_filial_id_fkey" FOREIGN KEY ("filial_id") REFERENCES "filial"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao" ADD CONSTRAINT "requisicao_centro_custo_id_fkey" FOREIGN KEY ("centro_custo_id") REFERENCES "centro_custo"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao" ADD CONSTRAINT "requisicao_categoria_id_fkey" FOREIGN KEY ("categoria_id") REFERENCES "categoria"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao" ADD CONSTRAINT "requisicao_solicitante_id_fkey" FOREIGN KEY ("solicitante_id") REFERENCES "usuario"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao" ADD CONSTRAINT "requisicao_comprador_id_fkey" FOREIGN KEY ("comprador_id") REFERENCES "usuario"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao" ADD CONSTRAINT "requisicao_veiculo_id_fkey" FOREIGN KEY ("veiculo_id") REFERENCES "veiculo"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao" ADD CONSTRAINT "requisicao_fornecedor_id_fkey" FOREIGN KEY ("fornecedor_id") REFERENCES "fornecedor"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao_anexo" ADD CONSTRAINT "requisicao_anexo_requisicao_id_fkey" FOREIGN KEY ("requisicao_id") REFERENCES "requisicao"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao_aprovacao" ADD CONSTRAINT "requisicao_aprovacao_requisicao_id_fkey" FOREIGN KEY ("requisicao_id") REFERENCES "requisicao"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao_aprovacao" ADD CONSTRAINT "requisicao_aprovacao_aprovador_id_fkey" FOREIGN KEY ("aprovador_id") REFERENCES "usuario"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "requisicao_aprovacao" ADD CONSTRAINT "requisicao_aprovacao_motivo_recusa_id_fkey" FOREIGN KEY ("motivo_recusa_id") REFERENCES "motivo_recusa"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "veiculo" ADD CONSTRAINT "veiculo_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "veiculo" ADD CONSTRAINT "veiculo_centro_custo_id_fkey" FOREIGN KEY ("centro_custo_id") REFERENCES "centro_custo"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "fornecedor" ADD CONSTRAINT "fornecedor_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "fornecedor" ADD CONSTRAINT "fornecedor_categoria_id_fkey" FOREIGN KEY ("categoria_id") REFERENCES "categoria"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "orcamento" ADD CONSTRAINT "orcamento_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "orcamento" ADD CONSTRAINT "orcamento_centro_custo_id_fkey" FOREIGN KEY ("centro_custo_id") REFERENCES "centro_custo"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "item_estoque" ADD CONSTRAINT "item_estoque_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "item_estoque" ADD CONSTRAINT "item_estoque_categoria_id_fkey" FOREIGN KEY ("categoria_id") REFERENCES "categoria"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "movimento_estoque" ADD CONSTRAINT "movimento_estoque_item_id_fkey" FOREIGN KEY ("item_id") REFERENCES "item_estoque"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "movimento_estoque" ADD CONSTRAINT "movimento_estoque_usuario_id_fkey" FOREIGN KEY ("usuario_id") REFERENCES "usuario"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "ativo_qr" ADD CONSTRAINT "ativo_qr_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "cabine" ADD CONSTRAINT "cabine_ativo_qr_id_fkey" FOREIGN KEY ("ativo_qr_id") REFERENCES "ativo_qr"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "componente" ADD CONSTRAINT "componente_ativo_qr_id_fkey" FOREIGN KEY ("ativo_qr_id") REFERENCES "ativo_qr"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "composicao" ADD CONSTRAINT "composicao_cabine_id_fkey" FOREIGN KEY ("cabine_id") REFERENCES "cabine"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "composicao" ADD CONSTRAINT "composicao_componente_id_fkey" FOREIGN KEY ("componente_id") REFERENCES "componente"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "ordem_locacao" ADD CONSTRAINT "ordem_locacao_empresa_id_fkey" FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "entrega" ADD CONSTRAINT "entrega_ordem_id_fkey" FOREIGN KEY ("ordem_id") REFERENCES "ordem_locacao"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "entrega" ADD CONSTRAINT "entrega_cabine_id_fkey" FOREIGN KEY ("cabine_id") REFERENCES "cabine"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "entrega" ADD CONSTRAINT "entrega_motorista_id_fkey" FOREIGN KEY ("motorista_id") REFERENCES "usuario"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "audit_log" ADD CONSTRAINT "audit_log_usuario_id_fkey" FOREIGN KEY ("usuario_id") REFERENCES "usuario"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "status_historico" ADD CONSTRAINT "status_historico_usuario_id_fkey" FOREIGN KEY ("usuario_id") REFERENCES "usuario"("id") ON DELETE SET NULL ON UPDATE CASCADE;
