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
| Arquivo | Papel |
|---|---|
source/MEQ002/UMEQ002.pas | Form principal — manutenção de OS |
source/MEQ002/UdmMEQ002.pas | DataModule — queries e lógica |
source/TOF001/ | Telas de oficina (recepção) |
source/CEQ001/UCEQ001.pas | Cadastro de equipamentos |
Mobile Angular (WebApp):
| Arquivo | Papel |
|---|---|
source/Mobile/WebAPP/src/app/main/oficina/oficina-main.service.ts | Orquestrador 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)
| Campo | Tipo | Descrição |
|---|---|---|
| NR_ORDEMSERVICO | INTEGER | Número sequencial da OS (PK) |
| ST_ORDEMSERVICO | CHAR(1) | 'A'=Aberta, 'F'=Finalizada, 'B'=Bloqueada, 'C'=Cancelada |
| TP_ORDEMSERVICO | CHAR(1) | 'I'=Interna, 'E'=Externa |
| ST_ENTREGAOF | CHAR(1) | 'A'=Não entregue (inicial), 'E'=Entregue ao cliente |
| TP_PRIORIDADE | CHAR(1) | 'A'=Alta, 'B'=Baixa, 'C'=Normal |
| CD_PESSOA | INTEGER | Cliente (FK → PESSOA) |
| CD_ENDERECO | INTEGER | Endereço de entrega |
| CD_VENDEDOR | INTEGER | Vendedor / consultor |
| CD_MECANICA | INTEGER | Equipe de oficina responsável |
| CD_CONDPAGTO | INTEGER | Condição de pagamento |
| CD_FORMAPAGTO | VARCHAR(2) | Forma de pagamento |
| DT_EMISSAO | TIMESTAMP | Data/hora de abertura |
| DT_ENTREGA | TIMESTAMP | Data/hora prometida de entrega |
| DT_FECHAMENTO | TIMESTAMP | Data de fechamento |
| DT_CONFERENCIAOF | TIMESTAMP | Data de conferência na oficina |
| DT_RETORNO | DATE | Data de retorno do cliente |
| NR_SERIEMAQUINA | VARCHAR(30) | Número de série do equipamento |
| NR_PLACA | VARCHAR(7) | Placa do veículo |
| NR_KILOMETRAGEM | INTEGER | Quilometragem na entrada |
| NR_BOX | INTEGER | Box de atendimento |
| VL_ORDEMSERVICO | NUMERIC(15,2) | Valor total (soma dos itens) |
| VL_ENTRADA | NUMERIC(15,2) | Valor de entrada |
| DS_DEFEITO | VARCHAR(4000) | Defeito relatado pelo cliente |
| DS_TECNICA | VARCHAR(4000) | Laudo técnico do mecânico |
| DS_ACESSORIOS | VARCHAR(500) | Acessórios entregues junto com o veículo |
| DS_BLOQUEIO | VARCHAR(500) | Motivo do bloqueio |
| DS_OBSERVACAO | VARCHAR(4000) | Observações gerais |
| CD_USUARIO | VARCHAR(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)
| Campo | Tipo | Descrição |
|---|---|---|
| CD_SERVICO | INTEGER | Item/serviço (FK → ITEM) |
| NR_SERVICO | INTEGER | Sequencial do item na OS |
| TP_ITEM | CHAR(1) | 'P'=Peça/Produto, 'S'=Serviço, 'T'=Terceiro |
| QT_SERVICO | NUMERIC(15,3) | Quantidade |
| VL_UNITARIO | NUMERIC(15,4) | Preço unitário |
| VL_DESCONTO | NUMERIC(15,2) | Desconto |
| VL_TOTAL | NUMERIC(15,2) | Valor total do item |
| VL_DESPESA | NUMERIC(15,2) | Despesas adicionais |
| ST_SERVICO | CHAR(1) | 'A'=Aberto, 'F'=Finalizado |
| CD_MECANICO | INTEGER | Mecânico responsável (FK → PESSOA) |
| CD_EQUIPEOFICINA | INTEGER | Equipe de oficina |
| CD_MOVIMENTACAO | INTEGER | Tipo de movimentação de estoque |
| PC_COMISSAO | NUMERIC(3,2) | % comissão do vendedor |
| PC_COMISSAOMECANICA | NUMERIC(3,2) | % comissão do mecânico |
| ST_TERCEIRO | CHAR(1) | 'S'/'N' — serviço/peça terceirizado |
| DT_ABERTURA, HR_ABERTURA | DATE/TIME | Início do serviço |
| DT_FECHAMENTO, HR_FECHAMENTO | DATE/TIME | Fim do serviço |
EQUIPAMENTO — Cadastro de Equipamentos
DDL: docs/schema/tables/EQUIPAMENTO.sql
Chave primária: (CD_EMPRESA, NR_EQUIPAMENTO)
| Campo | Tipo | Descrição |
|---|---|---|
| NR_SERIE | VARCHAR(30) | Número de série |
| NR_INTERVENCOES | INTEGER | Total de manutenções realizadas |
| DS_MODELOEQUIPAMENTO | VARCHAR(100) | Modelo |
| CD_EMPRHISTFISCAL | INTEGER | Empresa do imobilizado |
| CD_HISTORICOFISCAL | INTEGER | Conta contábil de imobilizado |
MANUTENCAOEQUIPAMENTO — Plano de Manutenção
DDL: docs/schema/tables/MANUTENCAOEQUIPAMENTO.sql
| Campo | Tipo | Descrição |
|---|---|---|
| CD_EVENTO | INTEGER | Tipo de evento (troca de óleo, filtro...) |
| CD_EQUIPAMENTO | INTEGER | Equipamento |
| DT_PROXIMA | DATE | Próxima manutenção agendada |
| DT_EXECUCAO | DATE | Data de execução |
| TP_MANUTENCAO | CHAR(1) | 'P'=Preventiva, 'C'=Corretiva |
| ST_MANUTENCAO | CHAR(1) | 'P'=Pendente, 'E'=Executada, 'C'=Cancelada |
| QT_KMPROXIMA | INTEGER | Quilometragem para próxima manutenção |
| QT_KMEXEC | INTEGER | Quilometragem da execução |
| CD_EXECUTOR | INTEGER | Pessoa que executou |
| DS_MANUTENCAO | VARCHAR(500) | Descrição |
| DS_JUSTIFICATIVA | VARCHAR(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âmetro | Tipo | Efeito |
|---|---|---|
ST_IGNORACONFERENCIAPEDIDOOS | S/N | 'S' = não exige conferência de peças na OS |
CD_LAYCONFITEM | VARCHAR(6) | Layout para impressão da OS |
CD_OPERACAOENTRADACONF | INTEGER | Operação de estoque para entrada em conferência |
CD_OPERACAOSAIDACONF | INTEGER | Operaçã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:
- Mecânico abre checklist na entrada do veículo
- Preenche itens de inspeção (riscado, furos, nível de combustível...)
- Salva via API →
ChecklistController - Checklist fica vinculado à OS
- 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+ APIOrdemServicoController
→ APIs Java
OrdemServicoController— CRUD de OSRequisicaoOficinaController— gestão de requisiçõesChecklistController— checklists de inspeçãoVeiculoController— histórico por placa