Pular para o conteúdo principal

Rotina: Ordem de Serviço (Oficina)

Ciclo completo de abertura de OS, execução de serviços, requisição de peças, conferência e faturamento.


Módulos Delphi​

ArquivoPapel
source/MEQ002/UMEQ002.pasForm principal — manutenção de OS
source/MEQ002/UdmMEQ002.pasDataModule — queries e lógica
source/TOF001/Telas de oficina (recepção)
source/CEQ001/UCEQ001.pasCadastro de equipamentos

Mobile Angular (WebApp):

ArquivoPapel
source/Mobile/WebAPP/src/app/main/oficina/oficina-main.service.tsOrquestrador central (79 KB) — estado global da OS
source/Mobile/WebAPP/src/app/main/oficina/ordem/Tela principal da OS
source/Mobile/WebAPP/src/app/main/oficina/requisicao/Requisição de peças
source/Mobile/WebAPP/src/app/main/oficina/orcamento/Orçamento
source/Mobile/WebAPP/src/app/main/oficina/checklist/Checklist de inspeção

Tabelas do Banco de Dados​

ORDEMSERVICO — Cabeçalho​

DDL: docs/schema/tables/ORDEMSERVICO.sql Chave primária: (CD_EMPRESA, NR_ORDEMSERVICO)

CampoTipoDescrição
NR_ORDEMSERVICOINTEGERNúmero sequencial da OS (PK)
ST_ORDEMSERVICOCHAR(1)'A'=Aberta, 'F'=Finalizada, 'B'=Bloqueada, 'C'=Cancelada
TP_ORDEMSERVICOCHAR(1)'I'=Interna, 'E'=Externa
ST_ENTREGAOFCHAR(1)'A'=Não entregue (inicial), 'E'=Entregue ao cliente
TP_PRIORIDADECHAR(1)'A'=Alta, 'B'=Baixa, 'C'=Normal
CD_PESSOAINTEGERCliente (FK → PESSOA)
CD_ENDERECOINTEGEREndereço de entrega
CD_VENDEDORINTEGERVendedor / consultor
CD_MECANICAINTEGEREquipe de oficina responsável
CD_CONDPAGTOINTEGERCondição de pagamento
CD_FORMAPAGTOVARCHAR(2)Forma de pagamento
DT_EMISSAOTIMESTAMPData/hora de abertura
DT_ENTREGATIMESTAMPData/hora prometida de entrega
DT_FECHAMENTOTIMESTAMPData de fechamento
DT_CONFERENCIAOFTIMESTAMPData de conferência na oficina
DT_RETORNODATEData de retorno do cliente
NR_SERIEMAQUINAVARCHAR(30)Número de série do equipamento
NR_PLACAVARCHAR(7)Placa do veículo
NR_KILOMETRAGEMINTEGERQuilometragem na entrada
NR_BOXINTEGERBox de atendimento
VL_ORDEMSERVICONUMERIC(15,2)Valor total (soma dos itens)
VL_ENTRADANUMERIC(15,2)Valor de entrada
DS_DEFEITOVARCHAR(4000)Defeito relatado pelo cliente
DS_TECNICAVARCHAR(4000)Laudo técnico do mecânico
DS_ACESSORIOSVARCHAR(500)Acessórios entregues junto com o veículo
DS_BLOQUEIOVARCHAR(500)Motivo do bloqueio
DS_OBSERVACAOVARCHAR(4000)Observações gerais
CD_USUARIOVARCHAR(5)Usuário que abriu a OS

ORDEMSERVITEM — Serviços e Peças​

DDL: docs/schema/tables/ORDEMSERVITEM.sql Chave primária: (CD_EMPRESA, NR_ORDEMSERVICO, CD_SERVICO, NR_SERVICO)

CampoTipoDescrição
CD_SERVICOINTEGERItem/serviço (FK → ITEM)
NR_SERVICOINTEGERSequencial do item na OS
TP_ITEMCHAR(1)'P'=Peça/Produto, 'S'=Serviço, 'T'=Terceiro
QT_SERVICONUMERIC(15,3)Quantidade
VL_UNITARIONUMERIC(15,4)Preço unitário
VL_DESCONTONUMERIC(15,2)Desconto
VL_TOTALNUMERIC(15,2)Valor total do item
VL_DESPESANUMERIC(15,2)Despesas adicionais
ST_SERVICOCHAR(1)'A'=Aberto, 'F'=Finalizado
CD_MECANICOINTEGERMecânico responsável (FK → PESSOA)
CD_EQUIPEOFICINAINTEGEREquipe de oficina
CD_MOVIMENTACAOINTEGERTipo de movimentação de estoque
PC_COMISSAONUMERIC(3,2)% comissão do vendedor
PC_COMISSAOMECANICANUMERIC(3,2)% comissão do mecânico
ST_TERCEIROCHAR(1)'S'/'N' — serviço/peça terceirizado
DT_ABERTURA, HR_ABERTURADATE/TIMEInício do serviço
DT_FECHAMENTO, HR_FECHAMENTODATE/TIMEFim do serviço

EQUIPAMENTO — Cadastro de Equipamentos​

DDL: docs/schema/tables/EQUIPAMENTO.sql Chave primária: (CD_EMPRESA, NR_EQUIPAMENTO)

CampoTipoDescrição
NR_SERIEVARCHAR(30)Número de série
NR_INTERVENCOESINTEGERTotal de manutenções realizadas
DS_MODELOEQUIPAMENTOVARCHAR(100)Modelo
CD_EMPRHISTFISCALINTEGEREmpresa do imobilizado
CD_HISTORICOFISCALINTEGERConta contábil de imobilizado

MANUTENCAOEQUIPAMENTO — Plano de Manutenção​

DDL: docs/schema/tables/MANUTENCAOEQUIPAMENTO.sql

CampoTipoDescrição
CD_EVENTOINTEGERTipo de evento (troca de óleo, filtro...)
CD_EQUIPAMENTOINTEGEREquipamento
DT_PROXIMADATEPróxima manutenção agendada
DT_EXECUCAODATEData de execução
TP_MANUTENCAOCHAR(1)'P'=Preventiva, 'C'=Corretiva
ST_MANUTENCAOCHAR(1)'P'=Pendente, 'E'=Executada, 'C'=Cancelada
QT_KMPROXIMAINTEGERQuilometragem para próxima manutenção
QT_KMEXECINTEGERQuilometragem da execução
CD_EXECUTORINTEGERPessoa que executou
DS_MANUTENCAOVARCHAR(500)Descrição
DS_JUSTIFICATIVAVARCHAR(500)Justificativa de não realização

Mobile Angular — Service Principal​

Arquivo: source/Mobile/WebAPP/src/app/main/oficina/oficina-main.service.ts (79 KB)

Estado reativo (BehaviorSubjects):

_ordemServico$ // OS atual em edição
listPecaOS$ // peças adicionadas
listServicosOS$ // serviços adicionados
selectedItemPecaOS$ // peça selecionada no grid
selectedItemServicoOS$ // serviço selecionado

Eventos (EventEmitters):

onChangeVeiculoOrdem$ // troca de veículo
onChangePessoaOrdem$ // troca de cliente
onPecaSelectedChange$ // seleciona peça
onServicoSelectedChange$ // seleciona serviço

Métodos principais:

loadOrdemServico() // carrega OS do servidor
saveOrdemServico() // POST/PUT via API
addPecaToOrdem() // adiciona peça à OS
addServicoToOrdem() // adiciona serviço
removeItem() // remove item
finalizaOrdem() // fecha OS
cancelaOrdem() // cancela OS

Parâmetros (PARMFATUR)​

ParâmetroTipoEfeito
ST_IGNORACONFERENCIAPEDIDOOSS/N'S' = não exige conferência de peças na OS
CD_LAYCONFITEMVARCHAR(6)Layout para impressão da OS
CD_OPERACAOENTRADACONFINTEGEROperação de estoque para entrada em conferência
CD_OPERACAOSAIDACONFINTEGEROperação de estoque para saída em conferência

Estados e Fluxo da OS​

Abertura (Mobile ou Desktop)
│
▼
'A' Aberta
NR_ORDEMSERVICO gerado
DS_DEFEITO informado
│
├─ Adição de peças/serviços
│ INSERT ORDEMSERVITEM
│ ST_SERVICO = 'A'
│ Reserva/baixa de ESTOQUE
│
├─ Bloqueio (cliente não aprovou, peça faltando)
│ ST_ORDEMSERVICO = 'B'
│ DS_BLOQUEIO preenchido
│
│ Mecânico executa
│ DT_ABERTURA, HR_ABERTURA
│ DT_FECHAMENTO, HR_FECHAMENTO
│ ST_SERVICO = 'F'
│
▼
Conferência
DT_CONFERENCIAOF preenchida
ST_ENTREGAOF = 'E'
│
▼
'F' Finalizada
DT_FECHAMENTO preenchido
VL_ORDEMSERVICO calculado
│
├─ Gera CONTAS (título a receber)
├─ Opcional: emite NF de serviço
└─ Comissão calculada (PC_COMISSAOMECANICA)

'C' Cancelada → estorna estoque e financeiro

Fluxo de Requisição de Peças (Mobile)​

Mecânico abre requisição (Mobile WebApp)
│
▼
requisicao-main.service.ts
│ POST /requisicoes
▼
RequisicaoOficinaController (JunsoftWebAPI)
│
▼
INSERT ORDEMSERVITEM (TP_ITEM='P')
│
▼
INSERT MOVESTOQUE (saída) — via CALCULA_MOVESTOQUE
│
▼
UPDATE ESTOQUE.QT_ESTOQUE (-= QT_SERVICO)

Cancelamento da requisição:

DELETE ORDEMSERVITEM
INSERT MOVESTOQUE (entrada) — reverte
UPDATE ESTOQUE.QT_ESTOQUE (+= QT_SERVICO)

Checklist de Inspeção​

Componente: checklist/checklist.component.ts

Fluxo:

  1. Mecânico abre checklist na entrada do veículo
  2. Preenche itens de inspeção (riscado, furos, nível de combustível...)
  3. Salva via API → ChecklistController
  4. Checklist fica vinculado à OS
  5. Comparação na saída: checklist entrada × saída

Influências em Outros Módulos​

→ Estoque e Movimentação​

  • Cada peça adicionada a ORDEMSERVITEM gera saída em MOVESTOQUE
  • Cancelamento de OS reverte o estoque

→ Contas a Receber​

  • Fechamento da OS gera GRAVA_CONTAS(TP_CONTAS='S') — título a receber

→ Emissão NF-e​

  • OS pode gerar NF de serviço (NFS-e via JunsoftNFSe2) ou NF-e produto

→ Pedido de Venda​

  • OS de terceiros pode originar pedido de compra de peças

→ Mobile​

  • App Mobile WebApp oficina/ é a principal interface de execução
  • Toda a lógica roda via oficina-main.service.ts + API OrdemServicoController

→ APIs Java​

  • OrdemServicoController — CRUD de OS
  • RequisicaoOficinaController — gestão de requisições
  • ChecklistController — checklists de inspeção
  • VeiculoController — histórico por placa