| | |
| | from sqlalchemy import ( |
| | Column, |
| | Integer, |
| | String, |
| | Date, |
| | DateTime, |
| | Boolean, |
| | ForeignKey, |
| | Text |
| | ) |
| | from sqlalchemy.orm import relationship |
| | |
| | |
| | |
| | from datetime import datetime |
| | from banco import Base |
| | from sqlalchemy.sql import func |
| |
|
| | |
| | |
| | |
| | class Equipamento(Base): |
| | __tablename__ = "equipamentos" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| |
|
| | |
| | fpso1 = Column(String, index=True, nullable=False) |
| | fpso = Column(String, index=True, nullable=False) |
| | data_coleta = Column(String, index=True, nullable=False) |
| |
|
| | |
| | especialista = Column(String, nullable=False) |
| | conferente = Column(String, nullable=False) |
| | osm = Column(String, nullable=False) |
| |
|
| | |
| | modal = Column(String, index=True, nullable=False) |
| | quant_equip = Column(Integer, default=0) |
| | mrob = Column(String, nullable=False) |
| |
|
| | |
| | linhas_osm = Column(Integer, default=0) |
| | linhas_mrob = Column(Integer, default=0) |
| | linhas_erros = Column(Integer, default=0) |
| |
|
| | |
| | erro_storekeeper = Column(String) |
| | erro_operacao = Column(String) |
| | erro_especialista = Column(String) |
| | erro_outros = Column(String) |
| |
|
| | |
| | inclusao_exclusao = Column(String) |
| | po = Column(String) |
| | part_number = Column(String) |
| | material = Column(String) |
| |
|
| | solicitante = Column(String, nullable=False) |
| | motivo = Column(String) |
| | requisitante = Column(String, nullable=False) |
| | nota_fiscal = Column(String, nullable=False) |
| | impacto = Column(String, nullable=False) |
| | dimensao = Column(String, nullable=False) |
| |
|
| | observacoes = Column(String) |
| |
|
| | |
| | dia_inclusao = Column(String, nullable=True, index=True) |
| |
|
| | |
| | data_hora_input = Column(DateTime, default=datetime.utcnow, index=True) |
| |
|
| |
|
| | |
| | |
| | |
| | class FPSO(Base): |
| | __tablename__ = "fpsos" |
| |
|
| | id = Column(Integer, primary_key=True) |
| | nome = Column(String, unique=True, nullable=False, index=True) |
| | ativo = Column(Boolean, default=True) |
| | data_cadastro = Column(DateTime, default=datetime.utcnow) |
| |
|
| |
|
| | |
| | |
| | |
| | class LogAcesso(Base): |
| | __tablename__ = "log_acesso" |
| |
|
| | id = Column(Integer, primary_key=True) |
| |
|
| | usuario = Column(String, nullable=False, index=True) |
| | acao = Column(String, nullable=False) |
| | tabela = Column(String, nullable=True) |
| | registro_id = Column(Integer, nullable=True) |
| |
|
| | data_hora = Column(DateTime, default=datetime.utcnow, index=True) |
| |
|
| |
|
| | |
| | |
| | |
| | class Usuario(Base): |
| | __tablename__ = "usuarios" |
| |
|
| | id = Column(Integer, primary_key=True) |
| |
|
| | |
| | usuario = Column(String, unique=True, nullable=False, index=True) |
| | senha = Column(String, nullable=False) |
| |
|
| | |
| | perfil = Column(String, nullable=False) |
| | ativo = Column(Boolean, default=True) |
| |
|
| | |
| | data_criacao = Column(DateTime, default=datetime.utcnow) |
| |
|
| | |
| | nome = Column(String, nullable=True, index=True) |
| | email = Column(String, unique=True, index=True, nullable=True) |
| |
|
| | |
| | data_aniversario = Column(Date, nullable=True) |
| |
|
| | |
| | @property |
| | def senha_hash(self) -> str | None: |
| | """ |
| | Alias compatível para códigos que esperam 'senha_hash'. |
| | Retorna o valor da coluna 'senha' (que deve conter o HASH bcrypt). |
| | Não altera o schema e não exige migration. |
| | """ |
| | return self.senha |
| |
|
| | def __repr__(self) -> str: |
| | return f"<Usuario id={self.id} usuario={self.usuario!r} perfil={self.perfil!r} ativo={self.ativo}>" |
| |
|
| |
|
| | |
| | |
| | |
| | class QuizPergunta(Base): |
| | __tablename__ = "quiz_perguntas" |
| |
|
| | id = Column(Integer, primary_key=True) |
| | pergunta = Column(String, nullable=False) |
| | ativo = Column(Boolean, default=True) |
| | data_criacao = Column(DateTime, default=datetime.utcnow) |
| |
|
| | respostas = relationship( |
| | "QuizResposta", |
| | back_populates="pergunta", |
| | cascade="all, delete-orphan" |
| | ) |
| |
|
| |
|
| | |
| | |
| | |
| | class QuizResposta(Base): |
| | __tablename__ = "quiz_respostas" |
| |
|
| | id = Column(Integer, primary_key=True) |
| | pergunta_id = Column(Integer, ForeignKey("quiz_perguntas.id"), nullable=False) |
| | texto = Column(String, nullable=False) |
| | correta = Column(Boolean, default=False) |
| |
|
| | pergunta = relationship("QuizPergunta", back_populates="respostas") |
| |
|
| |
|
| | |
| | |
| | |
| | class QuizPontuacao(Base): |
| | __tablename__ = "quiz_pontuacoes" |
| |
|
| | id = Column(Integer, primary_key=True) |
| | usuario = Column(String, nullable=False, index=True) |
| | pontos = Column(Integer, nullable=False, default=0) |
| | data = Column(DateTime, default=datetime.utcnow, index=True) |
| |
|
| |
|
| | |
| | |
| | |
| | class VideoCategoria(Base): |
| | __tablename__ = "video_categorias" |
| |
|
| | id = Column(Integer, primary_key=True) |
| | nome = Column(String, nullable=False, unique=True) |
| | ativo = Column(Boolean, default=True) |
| | data_criacao = Column(DateTime, default=datetime.utcnow) |
| |
|
| |
|
| | |
| | |
| | |
| | class Video(Base): |
| | __tablename__ = "videos" |
| |
|
| | id = Column(Integer, primary_key=True) |
| | titulo = Column(String, nullable=False) |
| | descricao = Column(String) |
| | url = Column(String, nullable=False) |
| |
|
| | categoria_id = Column(Integer, ForeignKey("video_categorias.id")) |
| | categoria = relationship("VideoCategoria") |
| |
|
| | ativo = Column(Boolean, default=True) |
| | data_criacao = Column(DateTime, default=datetime.utcnow) |
| |
|
| |
|
| | |
| | |
| | |
| | class EventoCalendario(Base): |
| | __tablename__ = "eventos_calendario" |
| |
|
| | id = Column(Integer, primary_key=True) |
| | titulo = Column(String, nullable=False) |
| | descricao = Column(String) |
| | data_evento = Column(Date, nullable=False) |
| | data_lembrete = Column(Date) |
| | ativo = Column(Boolean, default=True) |
| | usuario_criacao = Column(String, nullable=False) |
| | data_criacao = Column(DateTime, default=datetime.utcnow) |
| |
|
| |
|
| | |
| | |
| | |
| | class IOIRunSugestao(Base): |
| | __tablename__ = "ioirun_sugestao" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| |
|
| | |
| | usuario = Column(String, nullable=False, index=True) |
| |
|
| | |
| | area = Column(String, nullable=True, index=True) |
| | mensagem = Column(Text, nullable=False) |
| |
|
| | |
| | resposta = Column(Text, nullable=True) |
| | status = Column(String, default="pendente", nullable=False, index=True) |
| | responsavel = Column(String, nullable=True) |
| |
|
| | |
| | data_envio = Column(DateTime, default=datetime.utcnow, nullable=False, index=True) |
| | data_resposta = Column(DateTime, nullable=True) |
| |
|
| |
|
| | |
| | |
| | |
| | class RNC(Base): |
| | __tablename__ = "rnc" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| |
|
| | |
| | codigo = Column(String(20), unique=True, index=True) |
| | titulo = Column(String(200), nullable=False) |
| | descricao = Column(Text, nullable=False) |
| |
|
| | |
| | data_form = Column(Date, nullable=True, index=True) |
| | emitente = Column(String(120), nullable=True, index=True) |
| | rnc_cliente_numero = Column(String(50), nullable=True) |
| | cliente_emitente = Column(String(120), nullable=True) |
| | area_solicitante = Column(String(120), nullable=True, index=True) |
| | area_notificada = Column(String(120), nullable=True, index=True) |
| | origem = Column(String(50), nullable=True, index=True) |
| |
|
| | |
| | envolvido1_nome = Column(String(120), nullable=True) |
| | envolvido1_matricula = Column(String(50), nullable=True) |
| | envolvido1_funcao = Column(String(120), nullable=True) |
| | envolvido2_nome = Column(String(120), nullable=True) |
| | envolvido2_matricula = Column(String(50), nullable=True) |
| | envolvido2_funcao = Column(String(120), nullable=True) |
| |
|
| | |
| | tipo = Column(String(50), nullable=True) |
| | severidade = Column(String(20), nullable=True) |
| | prioridade = Column(String(20), nullable=True) |
| |
|
| | |
| | status = Column(String(30), default="Aberta", nullable=False, index=True) |
| | data_abertura = Column(DateTime, default=datetime.utcnow, index=True) |
| | prazo = Column(DateTime, nullable=True, index=True) |
| | encerrada_em = Column(DateTime, nullable=True, index=True) |
| |
|
| | |
| | responsavel = Column(String(120), nullable=True, index=True) |
| | criado_por = Column(String(120), nullable=False, index=True) |
| |
|
| | |
| | cliente = Column(String(120), nullable=True) |
| | local = Column(String(120), nullable=True) |
| |
|
| | |
| | metodologia = Column(String(120), nullable=True) |
| | causa_raiz = Column(Text, nullable=True) |
| | ishikawa_json = Column(Text, nullable=True) |
| |
|
| | |
| | data_hora_input = Column(DateTime, default=datetime.utcnow, index=True) |
| |
|
| | |
| | comentarios = relationship("RNCComentario", back_populates="rnc", cascade="all, delete-orphan") |
| | acoes = relationship("RNCAcaoCorretiva", back_populates="rnc", cascade="all, delete-orphan") |
| | anexos = relationship("RNCAnexo", back_populates="rnc", cascade="all, delete-orphan") |
| |
|
| |
|
| | |
| | |
| | |
| | class RNCComentario(Base): |
| | __tablename__ = "rnc_comentario" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| | rnc_id = Column(Integer, ForeignKey("rnc.id"), nullable=False, index=True) |
| |
|
| | data = Column(DateTime, default=datetime.utcnow, index=True) |
| | autor = Column(String(120), nullable=False, index=True) |
| | mensagem = Column(Text, nullable=False) |
| |
|
| | status_novo = Column(String(30), nullable=True, index=True) |
| | prazo_novo = Column(DateTime, nullable=True, index=True) |
| | responsavel_novo = Column(String(120), nullable=True, index=True) |
| |
|
| | rnc = relationship("RNC", back_populates="comentarios") |
| |
|
| |
|
| | |
| | |
| | |
| | class RNCAcaoCorretiva(Base): |
| | __tablename__ = "rnc_acao" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| | rnc_id = Column(Integer, ForeignKey("rnc.id"), nullable=False, index=True) |
| |
|
| | descricao = Column(Text, nullable=False) |
| | responsavel = Column(String(120), nullable=True, index=True) |
| | prazo = Column(DateTime, nullable=True, index=True) |
| |
|
| | status = Column(String(30), default="Planejada", nullable=False, index=True) |
| | eficacia = Column(String(30), nullable=True, index=True) |
| | conclusao_em = Column(DateTime, nullable=True, index=True) |
| |
|
| | rnc = relationship("RNC", back_populates="acoes") |
| |
|
| |
|
| | |
| | |
| | |
| | class RNCAnexo(Base): |
| | __tablename__ = "rnc_anexo" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| | rnc_id = Column(Integer, ForeignKey("rnc.id"), nullable=False, index=True) |
| |
|
| | nome_arquivo = Column(String(255), nullable=False) |
| | caminho = Column(String(500), nullable=False) |
| | conteudo_tipo = Column(String(120), nullable=True) |
| |
|
| | enviado_por = Column(String(120), nullable=True, index=True) |
| | enviado_em = Column(DateTime, default=datetime.utcnow, index=True) |
| |
|
| | rnc = relationship("RNC", back_populates="anexos") |
| |
|
| |
|
| | |
| | |
| | |
| | class AvisoGlobal(Base): |
| | __tablename__ = "aviso_global" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| | mensagem = Column(Text, nullable=False) |
| |
|
| | |
| | bg_color = Column(String(32), default="#FFF3CD") |
| | text_color = Column(String(32), default="#664D03") |
| | largura = Column(String(16), default="100%") |
| | efeito = Column(String(16), default="marquee") |
| | velocidade = Column(Integer, default=20) |
| | font_size = Column(Integer, default=14) |
| |
|
| | |
| | ativo = Column(Boolean, default=True, index=True) |
| |
|
| | |
| | created_at = Column(DateTime(timezone=True), server_default=func.now()) |
| | updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | class RecebimentoRegistro(Base): |
| | __tablename__ = "recebimento_registros" |
| |
|
| | |
| | id = Column(Integer, primary_key=True, autoincrement=True, index=True) |
| | id_planilha = Column(Integer, nullable=True, index=True, unique=True) |
| |
|
| | |
| | data = Column(Date, nullable=True) |
| | data_emissao = Column(Date, nullable=True) |
| |
|
| | |
| | hora_chegada_portaria = Column(String(8), nullable=True) |
| | hora_chegada_ifs = Column(String(8), nullable=True) |
| | hora_saida_ifs_wms = Column(String(8), nullable=True) |
| | hora_liberacao_operacao = Column(String(8), nullable=True) |
| | hora_chegada_operacao = Column(String(8), nullable=True) |
| | hora_saida_operacao = Column(String(8), nullable=True) |
| | hora_retorno_operacao = Column(String(8), nullable=True) |
| | hora_liberacao_motorista = Column(String(8), nullable=True) |
| |
|
| | |
| | placa_veiculo = Column(String(50), nullable=True) |
| | transportadora = Column(String(255), nullable=True) |
| | po = Column(String(60), nullable=True) |
| | incoterms = Column(String(30), nullable=True) |
| | qtd_sku = Column(Integer, nullable=True) |
| | nota_fiscal = Column(String(80), nullable=True) |
| | fornecedor = Column(String(255), nullable=True) |
| |
|
| | |
| | quimicos = Column(Boolean, nullable=True) |
| | fds = Column(Boolean, nullable=True) |
| | repetro = Column(Boolean, nullable=True) |
| | aprovado = Column(Boolean, nullable=True) |
| |
|
| | |
| | natureza_operacao = Column(String(120), nullable=True) |
| | tipo_operacao = Column(String(120), nullable=True) |
| | barco = Column(String(80), nullable=True) |
| |
|
| | |
| | divergencia = Column(String(200), nullable=True) |
| |
|
| | ifs = Column(String(120), nullable=True) |
| | wms = Column(String(120), nullable=True) |
| | fotografia = Column(String(255), nullable=True) |
| | entrega = Column(String(120), nullable=True) |
| | projeto = Column(String(120), nullable=True) |
| | good_receipt = Column(String(120), nullable=True) |
| | divergencia_recebimento = Column(String(255), nullable=True) |
| | qualidade = Column(String(120), nullable=True) |
| | divergencia_qualidade = Column(String(255), nullable=True) |
| | observacao = Column(Text, nullable=True) |
| | agendamento = Column(String(120), nullable=True) |
| | responsavel = Column(String(120), nullable=True) |
| |
|
| | |
| | po_alt = Column(String(60), nullable=True) |
| | pn = Column(String(120), nullable=True) |
| | lot_batch = Column(String(120), nullable=True) |
| |
|
| | |
| | created_by = Column(String(150), nullable=True) |
| | updated_by = Column(String(150), nullable=True) |
| | created_at = Column(DateTime, default=datetime.utcnow) |
| | updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) |