
/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/



CREATE TABLE TBMAQUINA_MANUTENCAO (
    MM_CODIGO          INTEGER NOT NULL,
    MM_CODMAQUINA      INTEGER,
    MM_CODREVISAO      INTEGER,
    MM_CODRESPONSAVEL  INTEGER,
    MM_DATA            DATE,
    MM_OBS             VARCHAR(120) CHARACTER SET NONE,
    MM_INICIO          TIME,
    MM_TERMINO         TIME,
    MM_TEMPO           TIME,
    MM_ARQUIVO         BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    MM_DATACALIBRACAO  INTEGER,
    MM_OK              VARCHAR(3),
    MM_CERTIFICADO     VARCHAR(15)
);

CREATE TABLE TBMAQUINA_PLANOREVISAO (
    MPR_CODIGO         INTEGER NOT NULL,
    MPR_CODMAQUINA     INTEGER,
    MPR_CODSEQ         SMALLINT,
    MPR_TAREFA         VARCHAR(120),
    MPR_EXECUCAO       VARCHAR(240),
    MPR_PARAMETRO      VARCHAR(120),
    MPR_FERRAMENTAS    VARCHAR(120),
    MPR_METODO         VARCHAR(40),
    MPR_ACAO_ANOMALIA  VARCHAR(120),
    MPR_PRESERVACAO    VARCHAR(240),
    MPR_TEMPO          TIME,
    MPR_MAO_OBRA       VARCHAR(60),
    MPR_CODGRUPO       INTEGER,
    MPR_VALIDADE       SMALLINT,
    MPR_NOTIFICAR      SMALLINT,
    MPR_ULT_REVISAO    DATE,
    MPR_ULT_ENVIO      TIMESTAMP,
    MPR_DESCRICAO      VARCHAR(120),
    MPR_TAG            VARCHAR(15),
    MPR_LOCALIZACAO    VARCHAR(30)
);

CREATE TABLE TBORDEM_PRODUCAO (
    OP_CODIGO           BIGINT NOT NULL,
    OP_NUMERO           INTEGER,
    OP_DATA             DATE,
    OP_CODFUNCIONARIO   INTEGER,
    OP_CODUSUARIO       INTEGER,
    OP_ULT_ALTERACAO    TIMESTAMP,
    OP_STATUS           VARCHAR(10),
    OP_CODLOTE          BIGINT,
    OP_DATACONFIRMACAO  DATE,
    OP_OBS              VARCHAR(240),
    OP_CODCLIENTE       INTEGER,
    OP_REF              VARCHAR(20),
    OP_ORDEM_VENDA      VARCHAR(20),
    OP_LIBERACAO        DATE,
    OP_IMPRESSAO        DATE,
    OP_INICIO           DATE
);

CREATE TABLE TBORDEM_PRODUCAO_COMP (
    OPC_CODIGO      BIGINT NOT NULL,
    OPC_CODORDEM    BIGINT,
    OPC_CODSEQ      INTEGER,
    OPC_CODPRODUTO  INTEGER,
    OPC_QTDE        NUMERIC(15,4),
    OPC_LOTE        VARCHAR(20),
    OPC_SEQ_OP      INTEGER
);

CREATE TABLE TBORDEM_PRODUCAO_ESPEC (
    OPE_CODIGO         BIGINT NOT NULL,
    OPE_CODORDEM       BIGINT,
    OPE_CODSEQ         INTEGER,
    OPE_ESPECIFICACAO  VARCHAR(60),
    OPE_VALOR          VARCHAR(120)
);

CREATE TABLE TBORDEM_PRODUCAO_ITENS (
    OPI_CODIGO         BIGINT NOT NULL,
    OPI_CODORDEM       BIGINT,
    OPI_CODSEQ         INTEGER,
    OPI_CODPRODUTO     INTEGER,
    OPI_TIPOPRODUTO    VARCHAR(10),
    OPI_QTDE           NUMERIC(15,4),
    OPI_CODCOR         INTEGER,
    OPI_CODTEC         INTEGER,
    OPI_CODACABTO1     INTEGER,
    OPI_CODACABTO2     INTEGER,
    OPI_CODPEDIDO      BIGINT,
    OPI_STATUS         VARCHAR(30),
    OPI_CODLOTE        BIGINT,
    OPI_ULT_ALTERACAO  TIMESTAMP,
    OPI_CODUSUARIO     INTEGER
);

CREATE TABLE TBORDEM_PRODUCAO_MEDICAO (
    OPM_CODIGO               BIGINT NOT NULL,
    OPM_CODORDEM             BIGINT,
    OPM_NUMERO               INTEGER,
    OPM_TEMP_TR1             NUMERIC(15,4),
    OPM_TEMP_TR2             NUMERIC(15,4),
    OPM_TEMP_BARRA1          NUMERIC(15,4),
    OPM_TEMP_BARRA2          NUMERIC(15,4),
    OPM_TEMP_EPOXI           NUMERIC(15,4),
    OPM_TORQUE               NUMERIC(15,4),
    OPM_TEMPJIC              NUMERIC(15,4),
    OPM_RESISTENCIA_INICIAL  NUMERIC(15,4),
    OPM_RESISTENCIA_FINAL    NUMERIC(15,4),
    OPM_TORQUIMETRO          VARCHAR(10),
    OPM_PIROMETRO            VARCHAR(10),
    OPM_MEGHOMETRO           VARCHAR(10)
);

CREATE TABLE TBORDEM_PRODUCAO_PROC (
    OPP_CODIGO       BIGINT NOT NULL,
    OPP_CODORDEM     BIGINT,
    OPP_CODSEQ       INTEGER,
    OPP_OPERACAO     VARCHAR(20),
    OPP_PLANTA       VARCHAR(20),
    OPP_CODPROCESSO  INTEGER,
    OPP_QTDE         INTEGER,
    OPP_CONFIRMACAO  VARCHAR(60)
);

CREATE TABLE TBORDEM_PRODUCAO_UNID (
    OPU_CODIGO         INTEGER NOT NULL,
    OPU_CODORDEM       BIGINT,
    OPU_CODPRODUTO_UP  INTEGER,
    OPU_CODPRODUTO     INTEGER,
    OPU_ITEM           INTEGER,
    OPU_NUMERO         VARCHAR(20),
    OPU_QTDE           NUMERIC(15,4),
    OPU_SEQ_OP         INTEGER
);

CREATE TABLE TBPROCESSO (
    PROC_CODIGO     INTEGER NOT NULL,
    PROC_NOME       VARCHAR(60),
    PROC_REF        VARCHAR(20),
    PROC_TIPO       VARCHAR(20),
    PROC_DESCRICAO  VARCHAR(240)
);

CREATE TABLE TBPROD_UP (
    PUP_CODIGO      INTEGER NOT NULL,
    PUP_ITEM        INTEGER,
    PUP_NUMERO      VARCHAR(20),
    PUP_DESCRICAO   VARCHAR(120),
    PUP_CODPRODUTO  INTEGER
);

CREATE TABLE TBPROD_UP_ESPECIFICACOES (
    UPE_CODIGO          INTEGER NOT NULL,
    UPE_CARACTERISTICA  VARCHAR(60),
    UPE_VALOR           VARCHAR(120),
    UPE_CODPROD_UP      INTEGER,
    UPE_CODPRODUTO      INTEGER
);

CREATE TABLE TBPROD_UP_PROCESSOS (
    UPP_CODIGO       INTEGER NOT NULL,
    UPP_CODPROCESSO  INTEGER,
    UPP_QTDE         NUMERIC(15,2),
    UPP_CONFIRMACAO  VARCHAR(20),
    UPP_CODPRODUTO   INTEGER,
    UPP_CODPROD_UP   INTEGER
);



/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE TBMAQUINA_MANUTENCAO ADD CONSTRAINT PK_TBMAQUINA_MANUTENCAO PRIMARY KEY (MM_CODIGO);
ALTER TABLE TBMAQUINA_PLANOREVISAO ADD CONSTRAINT PK_TBMAQUINA_PLANOREVISAO PRIMARY KEY (MPR_CODIGO);
ALTER TABLE TBORDEM_PRODUCAO ADD CONSTRAINT PK_TBORDEM_PRODUCAO PRIMARY KEY (OP_CODIGO);
ALTER TABLE TBORDEM_PRODUCAO_COMP ADD CONSTRAINT PK_TBORDEM_PRODUCAO_COMP PRIMARY KEY (OPC_CODIGO);
ALTER TABLE TBORDEM_PRODUCAO_ESPEC ADD CONSTRAINT PK_TBORDEM_PRODUCAO_ESPEC PRIMARY KEY (OPE_CODIGO);
ALTER TABLE TBORDEM_PRODUCAO_ITENS ADD CONSTRAINT PK_TBORDEM_PRODUCAO_ITENS PRIMARY KEY (OPI_CODIGO);
ALTER TABLE TBORDEM_PRODUCAO_MEDICAO ADD CONSTRAINT PK_TBORDEM_PRODUCAO_MEDICAO PRIMARY KEY (OPM_CODIGO);
ALTER TABLE TBORDEM_PRODUCAO_PROC ADD CONSTRAINT PK_TBORDEM_PRODUCAO_PROC PRIMARY KEY (OPP_CODIGO);
ALTER TABLE TBORDEM_PRODUCAO_UNID ADD CONSTRAINT PK_TBORDEM_PRODUCAO_UNID PRIMARY KEY (OPU_CODIGO);
ALTER TABLE TBPROCESSO ADD CONSTRAINT PK_TBPROCESSO PRIMARY KEY (PROC_CODIGO);
ALTER TABLE TBPROD_UP ADD CONSTRAINT PK_TBPROD_UP PRIMARY KEY (PUP_CODIGO);
ALTER TABLE TBPROD_UP_ESPECIFICACOES ADD CONSTRAINT PK_TBPROD_UP_ESPECIFICACOES PRIMARY KEY (UPE_CODIGO);
ALTER TABLE TBPROD_UP_PROCESSOS ADD CONSTRAINT PK_TBPROD_UP_PROCESSOS PRIMARY KEY (UPP_CODIGO);


/******************************************************************************/
/****                             Foreign keys                             ****/
/******************************************************************************/

ALTER TABLE TBMAQUINA_MANUTENCAO ADD CONSTRAINT FK_TBMAQUINA_MANUTENCAO_1 FOREIGN KEY (MM_CODMAQUINA) REFERENCES TBMAQUINA (MAQ_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE TBMAQUINA_PLANOREVISAO ADD CONSTRAINT FK_TBMAQUINA_PLANOREVISAO_1 FOREIGN KEY (MPR_CODMAQUINA) REFERENCES TBMAQUINA (MAQ_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE TBORDEM_PRODUCAO_ITENS ADD CONSTRAINT FK_TBORDEM_PRODUCAO_ITENS_1 FOREIGN KEY (OPI_CODORDEM) REFERENCES TBORDEM_PRODUCAO (OP_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE TBORDEM_PRODUCAO_ITENS ADD CONSTRAINT FK_TBORDEM_PRODUCAO_ITENS_2 FOREIGN KEY (OPI_CODPRODUTO) REFERENCES TBPRODUTO (PROD_CODIGO);
ALTER TABLE TBORDEM_PRODUCAO_UNID ADD CONSTRAINT FK_TBORDEM_PRODUCAO_UNID_2 FOREIGN KEY (OPU_CODPRODUTO_UP) REFERENCES TBPROD_UP (PUP_CODIGO);
ALTER TABLE TBPROD_UP ADD CONSTRAINT FK_TBPROD_UP_1 FOREIGN KEY (PUP_CODPRODUTO) REFERENCES TBPRODUTO (PROD_CODIGO);
ALTER TABLE TBPROD_UP_PROCESSOS ADD CONSTRAINT FK_TBPROD_UP_PROCESSOS_1 FOREIGN KEY (UPP_CODPRODUTO) REFERENCES TBPRODUTO (PROD_CODIGO);
ALTER TABLE TBPROD_UP_PROCESSOS ADD CONSTRAINT FK_TBPROD_UP_PROCESSOS_2 FOREIGN KEY (UPP_CODPROD_UP) REFERENCES TBPROD_UP (PUP_CODIGO);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX TBMAQUINA_PLANOREVISAO_IDX1 ON TBMAQUINA_PLANOREVISAO (MPR_TAREFA);
CREATE INDEX TBPROCESSO_IDX1 ON TBPROCESSO (PROC_NOME);
CREATE INDEX TBPROD_UP_ESPECIFICACOES_IDX1 ON TBPROD_UP_ESPECIFICACOES (UPE_CARACTERISTICA);


/******************************************************************************/
/****                             Descriptions                             ****/
/******************************************************************************/

COMMENT ON TABLE TBPROD_UP IS 
'Unidades de Produção: Cadastrar produtos direcionados a ordens de produção,
que possui ou nao vinculo com cadastro de produtos.';

COMMENT ON TABLE TBPROD_UP_ESPECIFICACOES IS 
'Especificações da Unidades de Produção';

COMMENT ON TABLE TBPROD_UP_PROCESSOS IS 
'Processos ou operações a serem realizados na Unidade de Produção';



/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN TBORDEM_PRODUCAO_MEDICAO.OPM_NUMERO IS 
'Número da Junta Isolada Colada';

COMMENT ON COLUMN TBORDEM_PRODUCAO_MEDICAO.OPM_TEMP_TR2 IS 
'Temperatura do trilho 2';

COMMENT ON COLUMN TBORDEM_PRODUCAO_MEDICAO.OPM_TEMP_BARRA1 IS 
'Temperatura da barra 1';

COMMENT ON COLUMN TBORDEM_PRODUCAO_MEDICAO.OPM_TEMP_BARRA2 IS 
'Temperatura da barra 2';

COMMENT ON COLUMN TBORDEM_PRODUCAO_MEDICAO.OPM_TEMP_EPOXI IS 
'    Temperatura do epóxi';

COMMENT ON COLUMN TBORDEM_PRODUCAO_MEDICAO.OPM_TORQUE IS 
'Torque dos parafusos';

COMMENT ON COLUMN TBORDEM_PRODUCAO_MEDICAO.OPM_TEMPJIC IS 
'  Temperatura da Junta Isolada Colada';

COMMENT ON COLUMN TBORDEM_PRODUCAO_MEDICAO.OPM_RESISTENCIA_INICIAL IS 
'Resistência Ôhmica Inicial';

COMMENT ON COLUMN TBORDEM_PRODUCAO_MEDICAO.OPM_RESISTENCIA_FINAL IS 
'Resistência Ôhmica Final';
