| |
| 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) |