API de Apontamentos¶
Disponibilizar API que automatize o apontamento de produção, com a menor interferência possível do Operador da máquina neste processo, integrando assim, o FoccoERP com ferramentas de gerenciamento fabril.
Escopo da Integração¶
-
Permite realizar o apontamento das ordens de fabricação com outros softwares e integrar os dados retornados com o FoccoERP.
-
Permite que o analista de PCP acompanhe os apontamentos das ordens de fabricação.
-
Permite filtrar os apontamentos por ordem de fabricação, centro de trabalho, recurso, operador, data, item.
-
Permite realiza serviço de apontamento das ordens de fabricação através de ferramentas de apontamento, retornando para o FoccoERP:
-
Data de importação da Ordem;
-
Número da Ordem;
-
Código do Item da Ordem;
-
Descrição da Operação;
-
Quantidade na operação da Ordem;
-
Quantidade apontada na operação da Ordem;
-
Quantidade Pendente na Operação da Ordem – Quantidade Apontada;
-
Quantidade de Refugo apontada na operação da Ordem;
-
Motivo do Refugo no retorno.
-
Situações não tratadas¶
As situações não tratadas pelo produto estão listadas abaixo:
-
Operações de retrabalho;
-
Destinar refugos
Chamadas WebService¶
Autenticação¶
Autenticação
POST
~/Authentication/RequestAccess?User=API&Password={senha usuário API}&AllowNewSession=true
Retorno
{
"Token": {token},
"ErrorReason": 0,
"CustomErrorMessage": null,
"IsSuccessful": true
}
Logout¶
Logout
POST
~/Authentication/Logout
Header
Authorization
Bearer { token}
Buscar Centros de Trabalho¶
Buscar Centros de Trabalho
POST
~/api/Commands/Manufatura.Engenharia.GetCentrosTrabalhoCommand
Header
Authorization
Bearer { token}
Content-Type
application/json
X-EMPR-ID
{ID da Empresa}
Body (JSON)
skip
Quantidade de registros para “saltar”
take
Quantidade de registros que serão retornados
Retorno
{
"$values": [
{
"Codigo": "10",
"Descricao": "FURAÇÃO",
"Empresa": {
"Codigo": 10,
"NomeFantasia": "BRASILEIRA S/A (TESDES)",
"RazaoSocial": "FOCCOERP_ORIG_3_17",
"ID": 10
},
"ID": 39
}
]
}
Buscar Recursos (Máquinas)¶
Buscar Recursos (Máquinas)
POST
~/api/Commands/Manufatura.Producao. GetRecursosIndustriaisByTipoCommand
Header
Authorization
Bearer { token}
Content-Type
application/json
X-EMPR-ID
{ID da Empresa}
Body (JSON)
skip
Quantidade de registros para “saltar”
take
Quantidade de registros que serão retornados
tipoRecursoIndustrial
“ID”: “M”
Retorno
{
"$values": [
{
"$id": "45107",
"Codigo": "100",
"Descricao": "APARELHO DE SOLDA 250A TCM 325",
"Tipo": {
"ID": "M"
},
"ID": 58,
}
]
}
Buscar Ordens de Produção Abertas¶
Buscar Ordens de Produção Abertas
POST
~/api/Commands/Manufatura.Producao.GetOrdensAbertasCommand
Header
Authorization
Bearer { token}
Content-Type
application/json
X-EMPR-ID
{ID da Empresa}
Body (JSON)
getOrdensRequest
{
"getOrdensRequest":
{
"Take":1,
"Skip":0,
"DtEmissGreaterThanOrEqual": "2015-06-28T00:00:00",
"DtEmissLesserThanOrEqual": "",
"CodigoItens": ["CANETA"],
"MascaraIDs": [],
"CodigoMaquinas": [],
"CodigoCentrosTrabalho": [],
"CodigoOperacoes": [],
"OrdemIDs": [],
"NumeroOrdens": [27],
"DtCriacaoGreaterThanOrEqual": "2024-01-07T00:00:00-03:00",
"DtCriacaoLesserThanOrEqual": "",
"DtAlteracaoGreaterThanOrEqual": "",
"DtAlteracaoLesserThanOrEqual": ""
}
}
Retorno
Para buscar as ordens de produção abertas, no body deve conter o filtro abaixo.
Observação
Os campos podem ser adicionados conforme necessidade de filtro.
Atenção para o formato de data.
{
"getOrdensRequest":
{
"Take":1,
"Skip":0,
"DtEmissGreaterThanOrEqual": "2015-06-28T00:00:00",
"DtEmissLesserThanOrEqual": "",
"CodigoItens": ["CANETA"],
"MascaraIDs": [],
"CodigoMaquinas": [],
"CodigoCentrosTrabalho": [],
"CodigoOperacoes": [],
"OrdemIDs": [],
"NumeroOrdens": [27],
"DtCriacaoGreaterThanOrEqual": "2024-01-07T00:00:00-03:00",
"DtCriacaoLesserThanOrEqual": "",
"DtAlteracaoGreaterThanOrEqual": "",
"DtAlteracaoLesserThanOrEqual": ""
}
}
Abaixo, um exemplo do retorno:
{"$values": [{
"Item": {
"ItemMascara": {
"$id": "50981",
"Mascara": "AZUL#CILÍNDRICO",
"Ativo": true,
"Engenharia": {
"$id": "50982"
"ItemEngenharia": {
"PesoLiquido": 0,
"PesoBruto": 0,
"Cubagem": 0,
"ID": 31733},
"PesoLiquido": 0,
"PesoBruto": 0,
"Cubagem": 0,
"ID": 204212},
"ItemEmpresa": {
"CadastroItem": {
"Codigo": "CANETA",
"DescTecnica": "ITEM INDUSTRIAL C/ ESTR",
"Ativo": true,
"ID": 31520},
"Empresa": {
"Codigo": 10,
"NomeFantasia": "BRASILEIRA S/A (TESDES)",
"RazaoSocial": "FOCCOERP_ORIG_3_17",
"ID": 10 },
"ItemPDM": {},
"Engenharia": {},
"Planejamento": {
},
"ID": 31467}, "ID": 32449
}, "ID": 30861
},
"Mascara": "AZUL#CILÍNDRICO",
"MascaraID": 30861,
"Engenharia": {},
"IsItemConfigurado": true,
"ItemEmpresa": {},
"Codigo": "CANETA",
"DescTecnica": "ITEM INDUSTRIAL C/ ESTR"
},
"Numero": 1006,
"Quantidade": 2,
"DtEmissao": "2016-12-12T00:00:00-02:00",
"Observacao": null,
"TipoOrdem": {
"$id": "50989",
"ID": "OFM",
"Type":
},
"Finalizada": false,
"RoteirosProducao": {
"$id": "50990"},
"ID": 400505
}
]
}
Buscar Ordem pelo ID¶
Buscar Ordem pelo ID
GET
~/api/Entities/Manufatura.Producao.OrdemProducao/{ID}
Header
Authorization
Bearer { token}
Content-Type
application/json
Retorno
{
"Item": {
"$type": ,
"ItemMascara": {
"Mascara": "AZUL#CILÍNDRICO",
"Ativo": true,
"Engenharia": {
"ItemConfigurado": null,
"ItemEngenharia": {
"ItemEmpresa": null,
"PesoLiquido": 0,
"PesoBruto": 0,
"Cubagem": 0,
"ID": 31733},
"PesoLiquido": 0,
"PesoBruto": 0,
"Cubagem": 0,
"ID": 204212},
"ItemEmpresa": {
"CadastroItem": {
"Codigo": "CANETA",
"DescTecnica": "ITEM INDUSTRIAL C/ ESTR",
"Ativo": true,
"ID": 31520},
"Empresa": {
"Codigo": 10,
"NomeFantasia": "BRASILEIRA S/A (TESDES)",
"RazaoSocial": "FOCCOERP_ORIG_3_17",
"ID": 10},
"ItemPDM": {},
"Engenharia": {},
"Planejamento": {
"ItemEmpresa": {},
"ID": 31467},
"ID": 32449},
"ID": 30861},
"Mascara": "AZUL#CILÍNDRICO",
"MascaraID": 30861,
"Engenharia": {},
"ItemEmpresa": {},
"Codigo": "CANETA",
"DescTecnica": "ITEM INDUSTRIAL C/ ESTR"
},
"Numero": 1006,
"Quantidade": 2,
"DtEmissao": "2016-12-12T00:00:00-02:00",
"Observacao": null,
"TipoOrdem": {
"ID": "OFM",
"Type":
},
"Finalizada": false,
"RoteirosProducao": {},
"ID": 400505
}
Buscar Recurso pelo ID¶
Buscar Recurso pelo ID
GET
~/api/Entities/Manufatura.Producao.RecursoIndustrial/{ID}
Header
Authorization
Bearer { token}
Content-Type
application/json
Retorno
{
"Codigo": "100",
"Descricao": "APARELHO DE SOLDA 250A TCM 325",
"Tipo": {
"ID": "M"
},
"ID": 58
}
Buscar Centro de Trabalho pelo ID¶
Buscar Centro de Trabalho pelo ID
GET
~/api/Entities/Manufatura.Engenharia.CentroTrabalho/{ID}
Header
Authorization
Bearer { token}
Content-Type
application/json
Retorno
{
"Codigo": "10",
"Descricao": "FURAÇÃO",
"Empresa": {
"Codigo": 10,
"NomeFantasia": "BRASILEIRA S/A (TESDES)",
"RazaoSocial": "FOCCOERP_ORIG_3_17",
"ID": 10
},
"ID": 39
}
Causa de Refugo¶
Causa de Refugo
POST
~/api/Commands/Manufatura.Producao.Apontamento.GetCausasRefugoCommand
Header
Authorization
Bearer { token}
Content-Type
application/json
X-EMPR-ID
{ID da Empresa}
Body (JSON)
skip
Quantidade de registros para “saltar”
take
Quantidade de registros que serão retornados
Retorno
{
"$values":[
{
"Codigo": 1,
"Descricao": "MATÉRIA PRIMA COM PROBLEMA",
"Empresa": null,
"ID": 1
}
]
}
Motivos de Refugo¶
Motivos de Refugo
POST
~/api/Commands/Manufatura.Producao.Apontamento.GetMotivosRefugoCommand
Header
Authorization
Bearer { token}
Content-Type
application/json
X-EMPR-ID
{ID da Empresa}
Body (JSON)
skip
Quantidade de registros para “saltar”
take
Quantidade de registros que serão retornados
Retorno
{
"$values": [
{
"Codigo": 1,
"Descricao": "FURAÇÃO ERRADA",
"GrupoMotivoRefugo": null,
"Ativo": true,
"ID": 6
},
{
"Codigo": 2,
"Descricao": "DIMENSÃO ERRADA",
"GrupoMotivoRefugo": null,
"Ativo": true,
"ID": 7
},
{
"Codigo": 3,
"Descricao": "FALHA MATÉRIA PRIMA",
"GrupoMotivoRefugo": null,
"Ativo": true,
"ID": 8
}
]
Funcionários¶
Funcionários
POST
~/api/Commands/Utilitarios.Funcionario.GetFuncionariosCommand
Header
Authorization
Bearer { token}
Content-Type
application/json
X-EMPR-ID
{ID da Empresa}
Body (JSON)
skip
Quantidade de registros para “saltar”
take
Quantidade de registros que serão retornados
funcoes
Lista de códigos de funções para filtrar os funcionários
ativo
Determina se retornará somente os funcionários com cadastro ativo
{
"skip": 0,
"take": 50,
"funcoes": ["FUNC", "CMPR"],
"ativo": 1
}
Retorno
{“$values”: [{
"Codigo": ”1”,
"Nome": "FOCCO3I",
"Ativo": true,
"Usuario": {
"Login": "FOCCO3I",
"LoginLDAP": null,
"Nome": "FOCCO3I",
"Email": "teste@focco.com.br",
"Ativo": true,
"DtInicio": "1980-01-01T00:00:00-02:00",
"DtFim": "2020-12-01T00:00:00-02:00",
"ID": 1},
"Funcoes": [{
"ID": "CMPR",
"Description": "Comprador"},
{
"ID": "FUNC",
"Description": "Funcionário"},],
"ID": 1369
}]}
Apontamentos por Operação da Ordem¶
Apontamentos por Operação da Ordem
POST
~/api/Commands/Manufatura.Producao.Apontamento.GetApontamentosByOrdemRoteiroCommand
Header
Authorization
Bearer { token}
Content-Type
application/json
X-EMPR-ID
{ID da Empresa}
Body (JSON)
skip
Quantidade de registros para “saltar”
take
Quantidade de registros que serão retornados
ordemRoteiroID
ID do roteiro da Ordem
Retorno
{
"$values": [
{
"Quantidade": 1,
"DataApontamento": "2018-07-06T00:00:00-03:00",
"TipoApontamento": {
"ID": "TP",
"Description": "Tempo Padrão"
},
"DataHoraInicio": null,
"DataHoraFim": null,
"Tempo": null,
"Intervalo": 0,
"Funcionario": {
"Codigo": "1",
"Nome": "FOCCO3I",
"ID": 1369
},
"Final": true,
"Usuario": "JOAO (MAQUINA-043) / joao.silva / DOMINIO\\MAQUINA-043",
"QuantidadeRefugos": 2,
"Refugos": {
"$values": [
{
"Quantidade": 2,
"Motivo": {
"Codigo": 3,
"Descricao": "FALHA MATÉRIA PRIMA",
"Ativo": true,
"ID": 8
},
"Causa": {
"Codigo": 1,
"Descricao": "MATÉRIA PRIMA COM PROBLEMA",
"ID": 1
},
"ID": 97
}
]
},
"OrigemApontamento": "API",
"ApontamentoMaquina": {
"Maquina": {
"$id": "33",
"Codigo": "110",
"Descricao": "FURADEIRA",
"Ativo": true,
"Tipo": {
"ID": "M",
"Description": "Máquina"
},
"ID": 68,
},
"ID": 329625
},
"ID": 266503
}
]
Incluir Apontamento¶
Incluir Apontamento
POST
~/api/Entities/Manufatura.Producao.Apontamento.ApontamentoProducao
Header
Authorization
Bearer { token}
Content-Type
application/json
Body (JSON)
Enviar Json do apontamento conforme exemplos abaixo
Retorno
{
"ConcurrencyErrorOccurred": false,
"Succeeded": false,
"AnySucceeded": false,
"Failed": true,
"AllFailed": true,
"BaseErrorMessage": null,
"ErrorMessage": {mensagem do erro},
"Exception": null
}
JSON Incluir Apontamento Tempo Padrão¶
JSON Incluir Apontamento Tempo Padrão
{
"OrdemRoteiro": {
"ID":332945
},
"Quantidade": 1,
"DataApontamento": "2018-07-06T11:01:14-03:00",
"TipoApontamento": {
"ID": "TP"
},
"DataHoraInicio": null,
"DataHoraFim": null,
"Tempo": null,
"QtdeHomens": null,
"Intervalo": 0,
"Funcionario": {
"ID": 1369
},
"Final": false,
"Usuario": "Apontamento API",
"Refugos": {
"$values": []
},
"OrigemApontamento": "API",
"ApontamentoMaquina": {
"Maquina": {
"ID": 68
}
}
}
JSON Incluir Apontamento Intervalo de Hora¶
JSON Incluir Apontamento Intervalo de Hora
{
"OrdemRoteiro": {
"ID":333479
},
"Quantidade": 1,
"DataApontamento": null,
"TipoApontamento": {
"ID": "IH"
},
"DataHoraInicio": "2018-07-06T08:00:00-03:00",
"DataHoraFim": "2018-07-06T09:00:00-03:00",
"Tempo": null,
"QtdeHomens": null,
"Intervalo": 0,
"Funcionario": {
"ID": 1369
},
"Final": false,
"Usuario": "Apontamento API",
"Refugos": {
"$values": []
},
"OrigemApontamento": "API",
"ApontamentoMaquina": {
"Maquina": {
"ID": 68
}
}
JSON Incluir Apontamento Tempo Total¶
JSON Incluir Apontamento Tempo Total
{
"OrdemRoteiro": {
"ID":333479
},
"Quantidade": 1,
"DataApontamento": null,
"TipoApontamento": {
"ID": "TT"
},
"DataHoraInicio": null,
"DataHoraFim": null,
"Tempo": 1,
"QtdeHomens": null,
"Intervalo": 0,
"Funcionario": {
"ID": 1369
},
"Final": false,
"Usuario": "Apontamento API",
"Refugos": {
"$values": []
},
"OrigemApontamento": "API",
"ApontamentoMaquina": {
"Maquina": {
"ID": 68
}
}
JSON Incluir Apontamento com Refugo¶
JSON Incluir Apontamento com Refugo
{
"OrdemRoteiro": {
"ID":333479
},
"Quantidade": 0,
"DataApontamento": null,
"TipoApontamento": {
"ID": "TT"
},
"DataHoraInicio": null,
"DataHoraFim": null,
"Tempo": 1,
"QtdeHomens": null,
"Intervalo": 0,
"Funcionario": {
"ID": 1369
},
"Final": false,
"Usuario": "Apontamento API",
"Refugos": {
"$values": [
{
"Quantidade": 2,
"Motivo": {
"ID": 8
},
"Causa": {
"ID": 1
}
}
]
},
"OrigemApontamento": "API",
"ApontamentoMaquina": {
"Maquina": {
"ID": 68
}
}
JSON Incluir Apontamento com Ferramenta¶
JSON Incluir Apontamento com Ferramenta
{
"OrdemRoteiro": {
"ID":332945
},
"Quantidade": 1,
"DataApontamento": "2018-07-06T11:01:14-03:00",
"TipoApontamento": {
"ID": "TP"
},
"DataHoraInicio": null,
"DataHoraFim": null,
"Tempo": null,
"QtdeHomens": null,
"Intervalo": 0,
"Funcionario": {
"ID": 1369
},
"Final": false,
"Usuario": "Apontamento API",
"Refugos": {
"$values": []
},
"OrigemApontamento": "API",
"ApontamentoMaquina": {
"Maquina": {
"ID": 68
},
"ApontamentoFerramentas": {
"$values": [
{
"Ferramenta":{
"ID": 70
}
}
]
}
}
}
Excluir Apontamento¶
Excluir Apontamento
DELETE
~/api/Entities/Manufatura.Producao.Apontamento.ApontamentoProducao/{ID}
Header
Authorization
Bearer { token}
Content-Type
application/json
Retorno
{
"ConcurrencyErrorOccurred": false,
"Succeeded": false,
"AnySucceeded": false,
"Failed": true,
"AllFailed": true,
"BaseErrorMessage": null,
"ErrorMessage": {mensagem do erro},
"Exception": null
}
Retornar Lista de Motivos de Paradas de Máquina¶
Retornar Lista de Motivos de Paradas de Máquina
POST
~/api/Commands/Manufatura.Producao.CadastrosAuxiliares.GetMotivosApontParadaMaquina
Header
Authorization
Bearer { token}
Content-Type
application/json
X-EMPR-ID
{ID da Empresa}
Body (JSON)
skip
Quantidade de registros para “saltar”
take
Quantidade de registros que serão retornados
codigoMotivo
Código do motivo de parada para filtrar (ao informar o código do motivo, o ID da empresa também deverá ser informado)
empresaId
ID da empresa para filtrar os motivos de parada
{
"skip": 0,
"take": 50,
"codigoMotivo": 100,
"empresaId": 1
}
Retorno
{
"$values": [
{
"Codigo": 100,
"Descricao": "ABASTECIMENTO",
"ID": 184
}
]
}
Retornar Lista das Paradas de Máquina¶
Retornar Lista das Paradas de Máquina
POST
~/api/Commands/Manufatura.Producao.GetApontamentosParadaByMaquinaCommand
Header
Authorization
Bearer { token}
Content-Type
application/json
X-EMPR-ID
{ID da Empresa}
Body (JSON)
getOrdensRequest
"maquinaID": 100,
"skip": 0,
"take": 0,
Retorno
{
"$values": [
{
"DataHoraInicio": "2018-07-17T08:00:00-03:00",
"DataHoraFim": "2018-07-17T09:00:00-03:00",
"Maquina": {
"Codigo": "100",
"Descricao": "APARELHO DE SOLDA 250A TCM 325",
"Ativo": true,
"Tipo": {
"ID": "M",
"Description": "Máquina"
},
"ID": 58
},
"Funcionario": {
"Codigo": "1",
"Nome": "FOCCO3I",
"Ativo": true,
"Funcoes": [
{
"ID": "CMPR",
"Description": "Comprador"
},
{
"ID": "DIRE",
"Description": "Diretor"
}
],
"ID": 1369
},
"OrdemProducao": null,
"OrdemRoteiro": null,
"MotivoApontParadaMaquina": {
"Codigo": 100,
"Descricao": "ABASTECIMENTO",
"ID": 184
},
"Tempo": 1,
"ID": 164
},
]
}
Inclusão de Parada de Máquina¶
Inclusão de Parada de Máquina
POST
~/api/Entities/Manufatura.Producao. ApontamentoParadaMaquina
Header
Authorization
Bearer { token}
Content-Type
application/json
Body
{
"Empresa": {
"ID":10
},
"DataHoraInicio": "2018-07-17T08:00:00-03:00",
"DataHoraFim": "2018-07-17T09:00:00-03:00",
"Maquina": {
"ID": 58
},
"Funcionario": {
"ID": 1369
},
"OrdemProducao": {
"ID": 15442
},
"OrdemRoteiro": {
"ID": 30587
},
"MotivoApontParadaMaquina": {
"ID": 184
}
}
Retorno
{
"ConcurrencyErrorOccurred": false,
"Succeeded": false,
"AnySucceeded": false,
"Failed": true,
"AllFailed": true,
"BaseErrorMessage": null,
"ErrorMessage": {mensagem do erro},
"Exception": null
}
Exclusão de Parada de Máquina¶
Exclusão de Parada de Máquina
DELETE
~/api/Entities/Manufatura.Producao. ApontamentoParadaMaquina/{ID}
Header
Authorization
Bearer { token}
Content-Type
application/json
Retorno
{
"ConcurrencyErrorOccurred": false,
"Succeeded": false,
"AnySucceeded": false,
"Failed": true,
"AllFailed": true,
"BaseErrorMessage": null,
"ErrorMessage": {mensagem do erro},
"Exception": null
}