# Liberar Pontuação
:::info Descrição
Permite ao usuário aprovar liberações de contratos que tiveram pontuação abaixo do mínimo durante simulação. O processo de liberação é iniciado no sistema web e finalizado via APP.
:::
## Fluxo no APP
1. O usuário acessa o menu `Liberar Pontuação`.
2. É exibida a lista de contratos pendentes de aprovação.
3. Ao selecionar um contrato, os dados são carregados para análise.
4. O usuário pode então aprovar a liberação clicando no botão `Liberar`.
## Como Simular/Testar no Sistema Web
1. Acesse: `http://modelo.efinance.com.br`
2. Login:
- **Empresa:** 116
- **Usuário:** Santarosa
3. Após login, entre com as credenciais da Persys.
4. Vá até: `Comercial > Clientes / Simulação e Contrato`
5. Selecione um cliente com 1+ projetos (coluna `Proj.`).
6. Clique em `Simulação e Contrato`.
7. Altere o campo `Pontuação` para 1.5 ou menos e clique em `Simulação`.
8. Quando alertado que a pontuação está abaixo do mínimo, clique em `Solicitar lib. Pontuação`.
9. Marque o usuário `Silvio Santarosa` e clique em `Enviar Solicitação`.
:::success Resultado
Após estes passos, a solicitação aparecerá no APP.
:::
## Endpoints Utilizados
### Listar Contratos Pendentes
**Método:** POST
**URL:** `/api/Contrato/GetContrato`
**Descrição:** Retorna os contratos pendentes de liberação.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Loja` <int32> - Código da loja
- `Usuario` <int32> - Código do usuário que vai aprovar
**Exemplo Request:**
```json
{
"Emp": 116,
"Loja": 2009,
"Usuario": 1
}
```
**Response (Sucesso):**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"CLI_Codigo": 12345,
"CLI_Loja": 2009,
"Cliente": "Nome do Cliente",
"Indicador": 1.5,
"TipoVenda": "Tipo de Venda",
"Financeira": "Nome da Financeira",
"Fornecedor": 123,
"Contrato": "200901234",
"CondicaoPagamento": "Condição de Pagamento",
"Pontuacao": 1.5,
"JurosMedio": 2.5,
"USU_Nome": "Nome do Usuário"
}
]
```
**Response (Erro):**
```json
[
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Não há contratos para liberar",
"CLI_Codigo": 0,
"CLI_Loja": 0,
"Cliente": null,
"Indicador": 0,
"TipoVenda": null,
"Financeira": null,
"Fornecedor": 0,
"Contrato": null,
"CondicaoPagamento": null,
"Pontuacao": 0,
"JurosMedio": 0,
"USU_Nome": null
}
]
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso)
- `ERR_Mensagem` <string> - Mensagem de erro (vazio = sucesso)
- `CLI_Codigo` <int> - Código do cliente
- `CLI_Loja` <int> - Código da loja do cliente
- `Cliente` <string> - Nome do cliente
- `Indicador` <decimal> - Valor do indicador de pontuação
- `TipoVenda` <string> - Tipo de venda (à vista, financiada, etc.)
- `Financeira` <string> - Nome da instituição financeira (se aplicável)
- `Fornecedor` <int> - Código do fornecedor
- `Contrato` <string> - Número do contrato
- `CondicaoPagamento` <string> - Condição de pagamento negociada
- `Pontuacao` <decimal> - Pontuação atual do contrato
- `JurosMedio` <decimal> - Taxa média de juros aplicada
- `USU_Nome` <string> - Nome do usuário responsável
### Detalhes do Contrato
**Método:** POST
**URL:** `/api/Projeto`
**Descrição:** Retorna os dados detalhados do contrato selecionado para análise.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Loja` <int32> - Código da loja
- `Usuario` <int32> - Código do usuário
- `Cliente` <int32> - Código do cliente
- `Contrato` <string> - Número do contrato
**Exemplo Request:**
```json
{
"Emp": 116,
"Loja": 2009,
"Usuario": 1,
"Cliente": 12345,
"Contrato": "200901234"
}
```
**Response:**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"PRO_Loja": 2009,
"PRO_Cliente": 12345,
"PRO_Opcao": "AA",
"PRO_Ambiente": "SALA",
"PRO_Fornecedor": "123",
"PRO_Linha": "456",
"Fornecedor": "Nome do Fornecedor",
"Linha": "Nome da Linha",
"PRO_TotalPrazo": 10000.00,
"PontuacaoLiberada": 1.5,
"PontuacaoStartSimulacao": 2.0,
"PercentualDesconto": 25.0,
"JurosMedio": 2.5
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"PRO_Loja": 2009,
"PRO_Cliente": 12345,
"PRO_Opcao": "AB",
"PRO_Ambiente": "QUARTO",
"PRO_Fornecedor": "123",
"PRO_Linha": "456",
"Fornecedor": "Nome do Fornecedor",
"Linha": "Nome da Linha",
"PRO_TotalPrazo": 5000.00,
"PontuacaoLiberada": 1.5,
"PontuacaoStartSimulacao": 2.0,
"PercentualDesconto": 25.0,
"JurosMedio": 2.5
}
]
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso)
- `ERR_Mensagem` <string> - Mensagem de erro (vazio = sucesso)
- `PRO_Loja` <int> - Código da loja onde o projeto foi criado
- `PRO_Cliente` <int> - Código do cliente
- `PRO_Opcao` <string> - Código do ambiente/opção (AA, AB, etc.)
- `PRO_Ambiente` <string> - Descrição do ambiente (Sala, Quarto, etc.)
- `PRO_Fornecedor` <string> - Código do fornecedor
- `PRO_Linha` <string> - Código da linha de produtos
- `Fornecedor` <string> - Nome do fornecedor
- `Linha` <string> - Nome da linha de produtos
- `PRO_TotalPrazo` <decimal> - Valor total a prazo
- `PontuacaoLiberada` <decimal> - Pontuação que será liberada
- `PontuacaoStartSimulacao` <decimal> - Pontuação inicial da simulação
- `PercentualDesconto` <decimal> - Percentual de desconto aplicado
- `JurosMedio` <decimal> - Taxa média de juros aplicada
### Liberar Pontuação
**Método:** POST
**URL:** `/api/Projeto/Liberar`
**Descrição:** Realiza a liberação da pontuação do contrato selecionado.
**Parâmetros:**
- `Emp` <string> - Código da empresa
- `Loja` <string> - Código da loja do usuário
- `Login` <string> - Login do usuário
- `Senha` <string> - Senha do usuário
- `CLI_Loja` <array[string]> - Código da loja do cliente
- `CLI_Codigo` <array[string]> - Código do cliente
- `Opcao` <array[string]> - Código do projeto
- `Linha` <array[string]> - Código da linha
- `Fornecedor` <array[string]> - Código do fornecedor
- `Pontuacao` <array[string]> - Pontuação do projeto
**Exemplo Request:**
```json
{
"Emp": "116",
"Loja": "2009",
"Login": "usuario",
"Senha": "senha123",
"CLI_Loja": ["2009"],
"CLI_Codigo": ["12345"],
"Opcao": ["AA", "AB"],
"Linha": ["115"],
"Fornecedor": ["6"],
"Pontuacao": ["1,2"]
}
```
**Response:**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Response (em caso de sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Response (em caso de erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Usuário sem permissão para liberar pontuações"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, outros valores = erro)
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso
:::warning Observações
- O contrato só aparece no APP após o processo de solicitação de liberação ser feito no sistema web.
- O ambiente de testes é: `http://suporte.efinance.com.br/13647`.
- O usuário `Silvio Santarosa` (Usuário ID: 1) é utilizado nos testes.
- Todos os endpoints sempre retornam HTTP Status Code 200.
- Para verificar se houve erro na operação, verifique se `ERR_Codigo` é diferente de 0 e a mensagem em `ERR_Mensagem`.
:::
# Autorização Deb/Cred
:::info Descrição
Permite ao usuário autorizar, retornar, aprovar ou reprovar solicitações de débito ou crédito cadastradas previamente no sistema web. O APP apresenta os registros pendentes e possibilita o gerenciamento individual de cada solicitação.
:::
## Fluxo no APP
1. O usuário acessa o menu `Autorização Deb/Cred`.
2. A tela lista todas as solicitações pendentes.
3. Ao selecionar uma solicitação, o app exibe os detalhes da CI.
4. As ações disponíveis são:
- Alterar grupo de contas e tipo de movimento
- Retornar ao solicitante
- Aprovar
- Reprovar
- Fechar sem ação (desbloqueia automaticamente)
## Como Simular/Testar no Sistema Web
1. Acesse: `http://modelo.efinance.com.br`
2. Login:
- **Empresa:** 116
- **Loja:** 2009
- **Usuário:** dani
- **Senha:** eFiPersys
3. Vá até: `Financeiro > Solicitação de Autorização (Deb/Cre)`
4. Clique em `Nova`
5. Selecione o destinatário `SILVIO SANTAROSA`
6. Preencha todos os campos da CI, incluindo parcelamento
7. Clique em `Enviar`
:::success Resultado
Após estes passos, a solicitação será exibida no APP.
:::
## Endpoints Utilizados
### Listar Autorizações Pendentes
**Método:** POST
**URL:** `/api/SolicitacaoAutorizacao/GetSolicitacaoAutorizacao`
**Descrição:** Retorna a lista de autorizações pendentes.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Loja` <int32> - Código da loja
- `Usuario` <int32> - Código do usuário
**Exemplo Request:**
```json
{
"Emp": 116,
"Loja": 2009,
"Usuario": 1
}
```
**Response:**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"CodCIA": 3497170,
"Loja": 2009,
"Data": "28/01/2025 10:51:26",
"Vencimento": "28/01/2025",
"Remetente": "Ana Lima",
"Destinatario": "Silvio Santarosa ",
"GrupoContas": "CREDITOS",
"ContaMovto": "CRÉDITOS-DIVERSOS",
"TotalCI": 2460,
"Status": "<font color=green><b>Retornado</b></font>",
"Tipo": "C"
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"CodCIA": 3518832,
"Loja": 2009,
"Data": "27/02/2025 10:21:44",
"Vencimento": "12/02/2025",
"Remetente": "Silvio Santarosa ",
"Destinatario": "Ana Lima",
"GrupoContas": "OBRIGAÇÕES TRABALHISTAS",
"ContaMovto": "INSS",
"TotalCI": 500,
"Status": "<font color=green><b>Aguarda</b></font>",
"Tipo": "D"
}
]
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso)
- `ERR_Mensagem` <string> - Mensagem de erro (vazio = sucesso)
- `CodCIA` <int> - Código único da CI (vem de `CIA_CodCIA`)
- `Loja` <int> - Código da loja da CI (vem de `CIA_Loja`)
- `Data` <string> - Data e hora de criação da solicitação (formato "dd/MM/yyyy HH:mm:ss", vem de `CIA_Data` e `CIA_Hora`)
- `Vencimento` <string> - Data do primeiro vencimento (formato "dd/MM/yyyy", vem de `Primeiro_Vecto`)
- `Remetente` <string> - Nome do usuário remetente (vem de `DeNome`)
- `Destinatario` <string> - Nome do usuário destinatário (vem de `ParaNome`)
- `GrupoContas` <string> - Descrição do grupo de contas (vem de `TMS_Descricao`)
- `ContaMovto` <string> - Descrição da conta de movimento/tipo de despesa (vem de `TMP_Descricao`)
- `TotalCI` <decimal> - Valor total da solicitação (vem de `TotalCIA`)
- `Status` <string> - Descrição do status da CI (pode conter HTML, vem de `NomeStatus`)
- `Tipo` <string> - Tipo da operação ("D" para Débito, "C" para Crédito, vem de `TMP_DebCre`)
### Detalhes da CI
**Método:** POST
**URL:** `/api/SolicitacaoAutorizacaoItem`
**Descrição:** Retorna os detalhes da CI selecionada.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `CodCIA` <int32> - Código da CI
- `Usuario` <int32> - Código do usuário
**Exemplo Request:**
```json
{
"Emp": 116,
"CodCIA": 3475277,
"Usuario": 1
}
```
**Response:**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"UserDe": "DANIELLE SILVA",
"UserPara": "SILVIO SANTAROSA",
"Loja": "Loja Exemplo",
"TipoMovto": "<font color=red> Débito</font>",
"Documento": "Nota Fiscal",
"GrupoContas": "PGTO FORNECEDOR",
"ContasMovto": "PAGAMENTO A FORNECEDORES",
"Fornecedor": "FORNECEDOR XYZ LTDA",
"Assunto": "PAGAMENTO FORNECEDOR",
"Historico": "Pagamento referente à nota fiscal 9876, entrega realizada em 20/11/2024",
"Observacao": "<br /><br /><div class=dvCIA>DANIELLE SILVA - 25/11/2024 14:35 hs </div>Favor verificar e aprovar com urgência",
"CodCIA": 3475277,
"CIA_Status": 0,
"CIA_TipoMovimento": 5213,
"CIA_Equipe": 0,
"CIA_PeriodoMes": 11,
"CIA_PeriodoAno": 2024,
"CIA_Origem": 0,
"CIA_Fornecedor": 3075,
"TMP_DebCre": "D",
"CIA_CodUserDe": 287,
"CIA_CodUserPara": 1,
"CIA_Loja": 2009,
"CIA_Documento": 1234,
"CIA_Data_Retornado": null,
"Documentos": [
{ "NomCampo": "Número NF", "Conteudo": "9876" },
{ "NomCampo": "Data Emissão NF", "Conteudo": "20/11/2024" }
],
"Parcelas": [
{ "Parcela": "1", "Vencto": "30/11/2024", "Valor": 2500.00 },
{ "Parcela": "2", "Vencto": "30/12/2024", "Valor": 2500.00 }
],
"Bloqueado": "N"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso)
- `ERR_Mensagem` <string> - Mensagem de erro (vazio = sucesso)
- `UserDe` <string> - Nome do usuário DE (remetente da CIA, da Model: `NomUserDE`)
- `UserPara` <string> - Nome do usuário PARA (destinatário da CIA, da Model: `NomUserPara`)
- `Loja` <string> - Nome da Loja (da Model: `NomLoja`)
- `TipoMovto` <string> - Tipo de movimento formatado (ex: D/C com HTML, da Model: `TMP_DebCre` formatado)
- `Documento` <string> - Nome do tipo de documento (da Model: `TDO_Nome`)
- `GrupoContas` <string> - Descrição do "Grupo de Contas" (mapeado de `TMP_Descricao` - Nome do Tipo de Movimento/Despesa)
- `ContasMovto` <string> - Descrição da "Conta de Movimento" (mapeado de `TMS_Descricao` - Nome do SubGrupo de Contas)
- `Fornecedor` <string> - Nome do Fornecedor (da Model: `NomFornecedor`)
- `Assunto` <string> - Assunto da CI (da Model: `CIA_Assunto`)
- `Historico` <string> - Histórico da CI (da Model: `CIA_Historico`)
- `Observacao` <string> - Observações do sistema/fluxo em uma string única (da Model: `CIA_Observacao`)
- `CodCIA` <int> - Código da CI
- `CIA_Status` <int> - Status numérico da CI (0=Pendente, 1=Aprovada, 2=Reprovada, 3=Retornada)
- `CIA_TipoMovimento` <int> - Código do Tipo de Movimento
- `CIA_Equipe` <int> - Código da Equipe (se houver)
- `CIA_PeriodoMes` <int> - Mês de referência do período (se houver)
- `CIA_PeriodoAno` <int> - Ano de referência do período (se houver)
- `CIA_Origem` <int> - Código da origem da CI (se houver)
- `CIA_Fornecedor` <int> - Código do fornecedor (se aplicável)
- `TMP_DebCre` <string> - Tipo da operação ("D" para Débito, "C" para Crédito)
- `CIA_CodUserDe` <int> - Código do usuário solicitante/DE
- `CIA_CodUserPara` <int> - Código do usuário destinatário/PARA
- `CIA_Loja` <int> - Código da loja da CI
- `CIA_Documento` <int> - Código do Tipo de Documento
- `CIA_Data_Retornado` <string> - Data em que a CI foi retornada (se aplicável, formato ISO ou dd/MM/yyyy)
- `Documentos` <array[object]> - Lista de documentos associados à CI
- `NomCampo` <string> - Nome do campo do documento
- `Conteudo` <string> - Conteúdo do campo do documento
- `Parcelas` <array[object]> - Lista de parcelas da CI
- `Parcela` <string> - Identificador da parcela (ex: "1", "2")
- `Vencto` <string> - Data de vencimento da parcela (formato dd/MM/yyyy)
- `Valor` <decimal> - Valor da parcela
- `Bloqueado` <string> - Indica o status de bloqueio do registro (ex: "S" para Sim, "N" para Não, ou mensagem)
### Carregar Grupos de Contas
**Método:** POST
**URL:** `/api/SolicitacaoAutorizacaoItem/GrupoConta`
**Descrição:** Carrega as opções de grupo de contas.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `DebCre` <string> - Tipo do movimento ("D" para Débito ou "C" para Crédito)
**Exemplo Request:**
```json
{
"Emp": 116,
"DebCre": "D"
}
```
**Response:**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"Codigo": 52,
"Descricao": "CONTAS A PAGAR",
"SubGrupos": [
{
"Codigo": 5213,
"Descricao": "PAGAMENTO A FORNECEDORES"
},
{
"Codigo": 5214,
"Descricao": "PAGAMENTO DE SERVIÇOS"
},
{
"Codigo": 5215,
"Descricao": "DESPESAS DIVERSAS"
}
]
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"Codigo": 53,
"Descricao": "DESPESAS ADMINISTRATIVAS",
"SubGrupos": [
{
"Codigo": 5301,
"Descricao": "MATERIAL DE ESCRITÓRIO"
},
{
"Codigo": 5302,
"Descricao": "DESPESAS COM PESSOAL"
}
]
}
]
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso)
- `ERR_Mensagem` <string> - Mensagem de erro (vazio = sucesso)
- `Codigo` <int> - Código do grupo de contas
- `Descricao` <string> - Nome do grupo de contas
- `SubGrupos` <array[object]> - Lista de subgrupos pertencentes ao grupo
- `Codigo` <int> - Código do subgrupo
- `Descricao` <string> - Nome do subgrupo
### Carregar Tipos de Movimento
**Método:** POST
**URL:** `/api/SolicitacaoAutorizacaoItem/TipoMovimento`
**Descrição:** Retorna os tipos de movimento conforme o subgrupo selecionado.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `SubGrupo` <int32> - Código do subgrupo de contas
**Exemplo Request:**
```json
{
"Emp": 116,
"SubGrupo": 5213
}
```
**Response:**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"TMO_Codigo": 52131,
"TMO_Nome": "PGTO FORNECEDOR MATERIAL"
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"TMO_Codigo": 52132,
"TMO_Nome": "PGTO FORNECEDOR SERVIÇO"
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"TMO_Codigo": 52133,
"TMO_Nome": "PGTO FORNECEDOR FRETE"
}
]
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso)
- `ERR_Mensagem` <string> - Mensagem de erro (vazio = sucesso)
- `TMO_Codigo` <int> - Código do tipo de movimento
- `TMO_Nome` <string> - Nome do tipo de movimento
### Desbloquear CI
**Método:** POST
**URL:** `/api/SolicitacaoAutorizacaoItem/Desbloqueia`
**Descrição:** Desbloqueia a CI caso o usuário apenas feche a tela sem tomar ação.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `CodCIA` <int32> - Código da CI
- `Usuario` <int32> - Código do usuário
**Exemplo Request:**
```json
{
"Emp": 116,
"CodCIA": 3497170,
"Usuario": 1
}
```
**Response:**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso)
- `ERR_Mensagem` <string> - Mensagem de erro (vazio = sucesso)
### Retornar CI
**Método:** POST
**URL:** `/api/SolicitacaoAutorizacao/Retornar`
**Descrição:** Retorna a CI ao solicitante com observação obrigatória.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `CodCIA` <int32> - Código da CI
- `Observacao` <string> - Motivo do retorno
- `Usuario` <int32> - Código do usuário
- `CIA_CodUserDe` <int32> - Código do usuário que está retornando
- `CIA_CodUserPara` <int32> - Código do usuário destinatário
- `CIA_Loja` <int32> - Código da loja
- `CIA_TipoMovimento` <int32> - Código do tipo de movimento
- `CIA_Documento` <int32> - Número do documento
- `CIA_Assunto` <string> - Assunto da CI
- `CIA_Historico` <string> - Histórico da CI
- `CIA_Fornecedor` <int32> - Código do fornecedor
**Exemplo Request:**
```json
{
"Emp": 116,
"CodCIA": 3475277,
"Observacao": "Falta nota fiscal do fornecedor",
"Usuario": 1,
"CIA_CodUserDe": 1,
"CIA_CodUserPara": 287,
"CIA_Loja": 2009,
"CIA_TipoMovimento": 5213,
"CIA_Documento": 1,
"CIA_Assunto": "PAGAMENTO FORNECEDOR",
"CIA_Historico": "Pagamento referente à nota fiscal 9876",
"CIA_Fornecedor": 3075
}
```
**Response:**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Response (em caso de erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "É necessário incluir uma observação para retornar a CI"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, outros valores = erro)
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso
### Aprovar/Reprovar CI
**Método:** POST
**URL:** `/api/SolicitacaoAutorizacao/Aprovar`
**Descrição:** Usado tanto para aprovar quanto para reprovar a solicitação.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Loja` <int32> - Código da loja
- `Usuario` <int32> - Código do usuário
- `CodCIA` <int32> - Código da CI
- `Aprova` <int32> - 0 para Reprovar, 1 para Aprovar
- `CIA_CodUserDe` <int32> - Código do usuário que está aprovando
- `CIA_CodUserPara` <int32> - Código do usuário destinatário
- `CIA_Loja` <int32> - Código da loja
- `CIA_Status` <int32> - Status da CI
- `CIA_TipoMovimento` <int32> - Código do tipo de movimento
- `CIA_Documento` <int32> - Número do documento
- `CIA_Assunto` <string> - Assunto da CI
- `CIA_Equipe` <int32> - Código da equipe
- `CIA_PeriodoMes` <int32> - Mês do período
- `CIA_PeriodoAno` <int32> - Ano do período
- `CIA_Origem` <int32> - Código da origem
- `CIA_Historico` <string> - Histórico da CI
- `CIA_Fornecedor` <int32> - Código do fornecedor
- `TMP_DebCre` <string> - Tipo do movimento (D/C)
- `Observacao` <string> - Observação da aprovação/reprovação
- `Vencimentos` <string> - Datas de vencimento das parcelas
- `ValoresParcelas` <string> - Valores das parcelas
**Exemplo Request (Aprovação):**
```json
{
"Emp": 116,
"Loja": 2009,
"Usuario": 1,
"CodCIA": 3475277,
"Aprova": 1,
"CIA_CodUserDe": 1,
"CIA_CodUserPara": 287,
"CIA_Loja": 2009,
"CIA_Status": 0,
"CIA_TipoMovimento": 5213,
"CIA_Documento": 1,
"CIA_Assunto": "PAGAMENTO FORNECEDOR",
"CIA_Equipe": 0,
"CIA_PeriodoMes": 0,
"CIA_PeriodoAno": 0,
"CIA_Origem": 0,
"CIA_Historico": "Pagamento referente à nota fiscal 9876",
"CIA_Fornecedor": 3075,
"TMP_DebCre": "D",
"Observacao": "Aprovado - Pagamento autorizado",
"Vencimentos": "18/12/2024",
"ValoresParcelas": "5000.00"
}
```
**Exemplo Request (Reprovação):**
```json
{
"Emp": 116,
"Loja": 2009,
"Usuario": 1,
"CodCIA": 3475277,
"Aprova": 0,
"CIA_CodUserDe": 1,
"CIA_CodUserPara": 287,
"CIA_Loja": 2009,
"CIA_Status": 0,
"CIA_TipoMovimento": 5213,
"CIA_Documento": 1,
"CIA_Assunto": "PAGAMENTO FORNECEDOR",
"CIA_Equipe": 0,
"CIA_PeriodoMes": 0,
"CIA_PeriodoAno": 0,
"CIA_Origem": 0,
"CIA_Historico": "Pagamento referente à nota fiscal 9876",
"CIA_Fornecedor": 3075,
"TMP_DebCre": "D",
"Observacao": "Reprovado - Falta documentação completa",
"Vencimentos": "18/12/2024",
"ValoresParcelas": "5000.00"
}
```
**Response:**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Response (em caso de erro na reprovação):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "É necessário incluir uma observação para reprovar a CI"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, outros valores = erro)
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso
:::warning Observações
- CI só pode ser reprovada se tiver uma observação.
- CI é desbloqueada automaticamente se o usuário fechar a tela sem ação.
- A mesma CI pode ser retornada para outro usuário, dependendo do fluxo interno.
- O sistema permite alterar o grupo de contas e tipo de movimento mesmo após o cadastro inicial.
- O sistema mantém um histórico completo de todas as observações e ações realizadas.
- Os valores das parcelas são exibidos com 2 casas decimais.
- Quando uma CI é retornada ou já foi processada, os botões de aprovar e reprovar são automaticamente desabilitados.
:::
# Gerenciamento de Montagem/AT
:::info Descrição
Sistema integrado para gerenciamento completo de serviços pós-venda, abrangendo três módulos principais que trabalham de forma integrada:
### 1. Gerenciamento de Montagem
- Acompanhamento de montagens por ambiente
- Registro de ocorrências durante a montagem
- Controle de prazos e responsáveis
- Geração de ficha de montagem
### 2. AT de Serviço
- Gestão de assistência técnica para serviços
- Registro de ocorrências de assistência
- Controle de tipos de serviço e valores
- Atribuição de responsáveis
### 3. AT de Produto
- Gestão de assistência técnica para produtos
- Integração com fornecedores
- Controle de custos e dimensões
- Geração automática de pedidos
:::
## Fluxo no APP
1. Acessar o menu `Gerenciamento de Montagem/AT`.
### Gerenciamento de Montagem (`TipoCliente = 0`)
1. Visualizar lista de clientes com montagem
2. Selecionar ambiente do cliente
3. Registrar ocorrências de montagem:
- Visualizar ocorrências
- Criar nova ocorrência (serviço ou produto)
- Inserir observações
- Finalizar ocorrência (com ou sem pendência)
- Gerar ficha
- Acessar arquivos do ambiente
### AT de Serviço
1. Alternar para modo AT (`TipoCliente = 1`)
2. Selecionar cliente/ambiente
3. Criar nova ocorrência tipo "Serviço":
- Selecionar tipo de serviço
- Registrar observações
4. Acompanhar e finalizar serviço
### AT de Produto
1. Alternar para modo AT (`TipoCliente = 1`)
2. Selecionar cliente/ambiente
3. Criar nova ocorrência tipo "Produto":
- Escolher fornecedor e linha
- Buscar produto
- Informar quantidades
- Selecionar tipo de AT:
- AT sem Custo (código 4)
- AT com Custo (código 5)
- AT venda Cliente (código 15)
4. Definir responsável e observações
## Endpoints Utilizados
### Listar Clientes
**Método:** POST
**URL:** `/api/GerenciamentoMontagem`
**Descrição:** Lista clientes, com ou sem montagem, para o gerenciamento do Pós-Venda.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `EmpPadrao` <int32> - Código da empresa padrão
- `Usuario` <int32> - Código do usuário
- `Loja` <int32> - Código da loja
- `MesMinimo` <int32> - Período em meses para retornar os dados
- `TipoStatus` <int32> - Tipo do status (-1=Todos, 0=Com montagem, 1=Sem montagem)
- `TipoCliente` <int32> - Tipo do cliente (-1=Todos, 0=Montagem, 1=AT)
- `Status` <int32> - Status (-1=Todos, 0=Em aberto, 1=Terminadas)
- `Campo` <string, ==opcional==> - Campo para busca
- `Busca` <string, ==opcional==> - Conteúdo da busca
- `VersaoMobile` <string> - Versão do aplicativo
**Exemplo:**
```json
{
"Emp": 116,
"EmpPadrao": 116,
"Usuario": 1,
"Loja": 2009,
"MesMinimo": 3,
"TipoStatus": -1,
"TipoCliente": 0,
"Status": 0,
"Campo": "",
"Busca": "",
"VersaoMobile": "1.4.1"
}
```
**Response (Exemplo):**
```json
[
{
"TM1_Ambientes": "5",
"TM1_AtrasoOcorrenciaPedido": "5",
"TM1_BaixaMontagem": "08/12/2016 00:00",
"TM1_CodCliente": "2101",
"TM1_CodGrupo": "2",
"TM1_Contrato": "200901996",
"TM1_DataCadOcorrencia": "21/08/2017 13:25",
"TM1_DiasAtrasos": "547",
"TM1_Emp": "116",
"TM1_Loja": "2009",
"TM1_NomeCliente": "PAULO DA SILVA COSTA",
"TM1_OcorrenciaStatus": "0",
"TM1_QtdeDiasUltimoPedido": "291",
"TM1_TipoIcone": "1",
"TM1_TipoStatusCliente": null,
"TM1_QtdeOcorrenciaAtrasadoPedido": "1",
"TM1_ParametroDiasAtraso": "30",
"TM1_HabilitaPesquisa": "S",
"TM1_MAX_AtFinalizadaData": "15/08/2017 00:00",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `TM1_Ambientes` <string> - Número de ambientes.
- `TM1_AtrasoOcorrenciaPedido` <string> - Dias de atraso da ocorrência do pedido.
- `TM1_BaixaMontagem` <string> - Data da baixa da montagem (formato dd/MM/yyyy HH:mm).
- `TM1_CodCliente` <string> - Código do cliente.
- `TM1_CodGrupo` <string> - Código do grupo.
- `TM1_Contrato` <string> - Número do contrato.
- `TM1_DataCadOcorrencia` <string> - Data de cadastro da ocorrência (formato dd/MM/yyyy HH:mm).
- `TM1_DiasAtrasos` <string> - Total de dias em atraso.
- `TM1_Emp` <string> - Código da empresa.
- `TM1_Loja` <string> - Código da loja.
- `TM1_NomeCliente` <string> - Nome do cliente.
- `TM1_OcorrenciaStatus` <string> - Status da ocorrência.
- `TM1_QtdeDiasUltimoPedido` <string> - Quantidade de dias desde o último pedido.
- `TM1_TipoIcone` <string> - Tipo de ícone para exibição.
- `TM1_TipoStatusCliente` <object> - Tipo de status do cliente (o tipo exato pode variar, string ou numérico).
- `TM1_QtdeOcorrenciaAtrasadoPedido` <string> - Quantidade de ocorrências de pedido atrasado.
- `TM1_ParametroDiasAtraso` <string> - Parâmetro de dias para considerar atraso.
- `TM1_HabilitaPesquisa` <string> - Indica se a pesquisa está habilitada ("S" ou "N").
- `TM1_MAX_AtFinalizadaData` <string> - Data máxima de finalização de AT (formato dd/MM/yyyy HH:mm).
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Listar Ambientes
**Método:** POST
**URL:** `/api/GerenciamentoMontagemAmbiente`
**Descrição:** Retorna os ambientes e ocorrências do cliente selecionado.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Usuario` <int32> - Código do usuário
- `Loja` <int32> - Código da loja
- `Cliente` <int32> - Código do cliente
- `Contrato` <int32> - Número do contrato
- `Ambientes` <string> - Códigos dos ambientes
**Exemplo:**
```json
{
"Emp": 116,
"Usuario": 1,
"Loja": 2009,
"Cliente": 12345,
"Contrato": 67890,
"Ambientes": "AA,AB"
}
```
**Response (Exemplo de um item da lista):**
```json
[
{
"TM2_Ordem": "1",
"TM2_Emp": "116",
"TM2_Loja": "2009",
"TM2_Cliente": "1977",
"TM2_Contrato": "200901857",
"TM2_OpcaoLetra": "AE",
"TM2_Opcao": "AE - COZINHA",
"TM2_DataFinalizado": "",
"TM2_ValorAvista": "15000.00",
"TM2_TipoMontagem": "1",
"TM2_DataInicioMontagem": "12/04/2018 08:00",
"TM2_DataTerminoMontagem": "12/04/2018 10:00",
"TM2_DataPrevistaMontagem": "12/04/2018 10:00",
"TM2_ID": "336765",
"TM2_NumOcorrencia": "1",
"TM2_UserCadastro": "1",
"TM2_DataCadastro": "19/03/2018 12:16",
"TM2_Servico": "-1",
"TM2_Observacao": "Não houve observação.",
"TM2_Status": "0",
"TM2_TipoResponsavel": "1",
"TM2_CodUserResponsavelAt": "10",
"TM2_TipoCliente": "0",
"TM2_NomeCliente": "RENATINHO",
"TM2_CliEntFone1": "999732545",
"TM2_CliEndereco": "RUA TITANIA",
"TM2_DescricaoProduto": "Base superior de armário",
"TM2_NomeCadastro": "Silvio Santarosa",
"TM2_UserResponsavelAt": "VAPT E VUPT",
"TM2_Fornecedor": "HERVAL COLCHÕES",
"TM2_Linha": "CABEÇEIRA",
"TM2_NumPedido": "0",
"TM2_QtdeProduto": "1.00",
"TM2_AmbienteReferencia": "AI",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `TM2_Ordem` <string> - Ordem de exibição.
- `TM2_Emp` <string> - Código da empresa.
- `TM2_Loja` <string> - Código da loja.
- `TM2_Cliente` <string> - Código do cliente.
- `TM2_Contrato` <string> - Número do contrato.
- `TM2_OpcaoLetra` <string> - Letra da opção/ambiente (ex: "AA").
- `TM2_Opcao` <string> - Código e descrição do ambiente (ex: "AA - SALA").
- `TM2_DataFinalizado` <string> - Data de finalização do ambiente/ocorrência.
- `TM2_ValorAvista` <string> - Valor à vista do projeto/ambiente.
- `TM2_DataTerminoEmpresa` <string> - Data de término pela empresa.
- `TM2_TipoAt` <string> - Tipo de AT.
- `TM2_FinalizadoPor` <string> - Código do usuário que finalizou.
- `TM2_UserTerminoEmpresa` <string> - Código do usuário que deu término pela empresa.
- `TM2_FinalizadoPorNome` <string> - Nome do usuário que finalizou.
- `TM2_UserTerminoEmpresaNome` <string> - Nome do usuário que deu término pela empresa.
- `TM2_TipoMontagem` <string> - Código do tipo de montagem.
- `TM2_DataInicioMontagem` <string> - Data de início da montagem.
- `TM2_DataTerminoMontagem` <string> - Data de término da montagem.
- `TM2_DataBaixaMontagem` <string> - Data da baixa da montagem.
- `TM2_DataPrevistaMontagem` <string> - Data prevista para montagem.
- `TM2_MontagemTSistema` <string> - Data de montagem (sistema).
- `TM2_ID` <string> - ID da ocorrência/ambiente.
- `TM2_NumOcorrencia` <string> - Número da ocorrência.
- `TM2_UserCadastro` <string> - Código do usuário que cadastrou.
- `TM2_DataCadastro` <string> - Data de cadastro.
- `TM2_Servico` <string> - Código do serviço.
- `TM2_ServicoValor` <string> - Valor do serviço.
- `TM2_Observacao` <string> - Observações gerais.
- `TM2_Status` <string> - Status da ocorrência/ambiente.
- `TM2_EnviaCI` <string> - Indica se envia CI.
- `TM2_ObservacaoHTML` <string> - Observações em HTML.
- `TM2_TipoResponsavel` <string> - Código do tipo de responsável.
- `TM2_CodUserResponsavelAt` <string> - Código do usuário responsável pela AT.
- `TM2_TipoCliente` <string> - Tipo de cliente (0=Montagem, 1=AT).
- `TM2_DesativadoData` <string> - Data de desativação.
- `TM2_DesativadoPor` <string> - Código do usuário que desativou.
- `TM2_DesativadoMotivo` <string> - Motivo da desativação.
- `TM2_TipoFinalizacao` <string> - Tipo de finalização.
- `TM2_NomeCliente` <string> - Nome do cliente.
- `TM2_CliCgcCpf` <string> - CPF/CNPJ do cliente.
- `TM2_CliInscRG` <string> - RG/IE do cliente.
- `TM2_CliEntFone1` <string> - Telefone 1 do cliente.
- `TM2_CliEntFone2` <string> - Telefone 2 do cliente.
- `TM2_CliEmail` <string> - Email do cliente.
- `TM2_CliEndereco` <string> - Endereço do cliente.
- `TM2_CliBairro` <string> - Bairro do cliente.
- `TM2_CliCidade` <string> - Cidade do cliente.
- `TM2_CliEstado` <string> - Estado do cliente.
- `TM2_CliCep` <string> - CEP do cliente.
- `TM2_CliDataCadastro` <string> - Data de cadastro do cliente.
- `TM2_ClienteAT` <string> - Indica se é cliente de AT.
- `TM2_DescricaoServico` <string> - Descrição do serviço.
- `TM2_DescricaoProduto` <string> - Descrição do produto.
- `TM2_NomeCadastro` <string> - Nome do usuário de cadastro.
- `TM2_DesativadoPorNome` <string> - Nome de quem desativou.
- `TM2_UserResponsavelAt` <string> - Nome do usuário responsável pela AT.
- `TM2_TooltipComissionados` <string> - Tooltip dos comissionados.
- `TM2_Fornecedor` <string> - Nome do fornecedor.
- `TM2_Linha` <string> - Nome da linha.
- `TM2_NumPedido` <string> - Número do pedido.
- `TM2_QtdeOcorrencia` <string> - Quantidade de ocorrências.
- `TM2_QtdeProduto` <string> - Quantidade de produto.
- `TM2_CodFornecedor` <string> - Código do fornecedor.
- `TM2_CodLinha` <string> - Código da linha.
- `TM2_QtdeOcorrenciaFinalizada` <string> - Quantidade de ocorrências finalizadas.
- `TM2_AmbienteReferencia` <string> - Código do ambiente de referência.
- `T_PTI_DataInicio` <string> - Data de início (programação técnica).
- `T_PMO_ProgramacaoAT` <string> - Código da programação de AT.
- `T_PTI_Tecnico` <string> - Código do técnico.
- `TM2_PRO_DataRomaneio` <string> - Data do romaneio.
- `TM2_AtrasoOcorrenciaPedido` <string> - Atraso da ocorrência do pedido.
- `TM2_CancelarAmbienteReferencia` <string> - Flag para cancelar ambiente de referência.
- `TM2_AmbienteReferenciaDescricao` <string> - Descrição do ambiente de referência.
- `TM2_AmbienteReferencia_PRO_EnviadoFabrica` <string> - Data de envio à fábrica do ambiente de referência.
- `TM2_AmbienteReferencia_PRO_DataStartLiberacao` <string> - Data de início da liberação do ambiente de referência.
- `TM2_AmbienteReferencia_PRO_DataFimLiberacao` <string> - Data de fim da liberação do ambiente de referência.
- `TM2_AmbienteReferencia_PRO_Pontuacao` <string> - Pontuação do ambiente de referência.
- `TM2_AmbienteReferencia_PRO_T012_Tabela_Preco` <string> - Tabela de preço do ambiente de referência.
- `TM2_AmbienteReferencia_PRO_DataFIN` <string> - Data FIN do ambiente de referência.
- `TM2_AmbienteReferencia_PRO_Fornecedor` <string> - Código do fornecedor do ambiente de referência.
- `TM2_AmbienteReferencia_PRO_Linha` <string> - Código da linha do ambiente de referência.
- `TM2_Tabela_Preco` <string> - Tabela de preço.
- `TM2_FornecedorFabricante_eFinance` <string> - Indicador de fornecedor fabricante eFinance.
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Listar Tipos de Serviço
**Método:** POST
**URL:** `/api/GerenciamentoMontagem/TipoServico`
**Descrição:** Lista os tipos de serviço disponíveis.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Usuario` <int32> - Código do usuário
- `Loja` <int32> - Código da loja
**Exemplo:**
```json
{
"Emp": 116,
"Usuario": 1,
"Loja": 2009
}
```
**Response (Exemplo):**
```json
[
{
"TPS_Codigo": "101",
"TPS_Descricao": "AJUSTE DE PORTA",
"TPS_ValorMinimo": "50.00",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"TPS_Codigo": "102",
"TPS_Descricao": "TROCA DE PUXADOR",
"TPS_ValorMinimo": "30.00",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `TPS_Codigo` <string> - Código do tipo de serviço.
- `TPS_Descricao` <string> - Descrição do tipo de serviço.
- `TPS_ValorMinimo` <string> - Valor mínimo associado ao serviço (pode ser string representando decimal).
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Listar Fornecedores
**Método:** POST
**URL:** `/api/GerenciamentoMontagem/Fornecedor`
**Descrição:** Lista fornecedores para AT.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Usuario` <int32> - Código do usuário
- `Loja` <int32> - Código da loja
- `TipoAT` <int32> - Tipo de AT (4=Sem Custo, 5=Com Custo, 15=Venda Cliente)
**Exemplo:**
```json
{
"Emp": 116,
"Usuario": 1,
"Loja": 2009,
"TipoAT": 4
}
```
**Response (Exemplo):**
```json
[
{
"FOR_Codigo": "123",
"FOR_Nome": "DELLAVITA COZINHAS E PLANEJADOS",
"FOR_TMS_Codigo": null,
"FOR_TMP_Codigo": null,
"FOR_Fabricante": "1",
"HabilitaCadastro": "1",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"FOR_Codigo": "456",
"FOR_Nome": "ITALINEA MOVEIS",
"FOR_TMS_Codigo": "10",
"FOR_TMP_Codigo": "101",
"FOR_Fabricante": "2",
"HabilitaCadastro": "0",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `FOR_Codigo` <string> - Código do fornecedor.
- `FOR_Nome` <string> - Nome/razão social do fornecedor.
- `FOR_TMS_Codigo` <string> - Código do subgrupo de contas (pode ser nulo).
- `FOR_TMP_Codigo` <string> - Código do tipo de movimento/despesa (pode ser nulo).
- `FOR_Fabricante` <string> - Código do fabricante associado.
- `HabilitaCadastro` <string> - Indica se o cadastro de linhas para este fornecedor está habilitado/restrito ("1" para habilitado/sem restrição, "0" para restrito).
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Listar Linhas
**Método:** POST
**URL:** `/api/GerenciamentoMontagem/Linha`
**Descrição:** Lista linhas do fornecedor selecionado.
**Parâmetros:**
- `Emp` <string> - Código da empresa
- `Loja` <string> - Código da loja
- `Fornecedor` <string> - Código do fornecedor
- `TipoAT` <string> - Tipo de AT
**Exemplo:**
```json
{
"Emp": "116",
"Loja": "2009",
"Fornecedor": "123",
"TipoAT": "4"
}
```
**Response (Exemplo):**
```json
[
{
"Codigo": "4561",
"Descricao": "LINHA PREMIUM COZINHAS",
"LSI_Fornecedor": "123",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"Codigo": "4562",
"Descricao": "LINHA STANDARD SALAS",
"LSI_Fornecedor": "123",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `Codigo` <string> - Código da linha.
- `Descricao` <string> - Descrição da linha (pode incluir nome do fornecedor dependendo da lógica interna da API).
- `LSI_Fornecedor` <string> - Código do fornecedor ao qual a linha pertence.
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Buscar Produtos
**Método:** POST
**URL:** `/api/GerenciamentoMontagem/Produto`
**Descrição:** Busca produtos do fornecedor/linha selecionados.
**Parâmetros:**
- `Emp` <string> - Código da empresa
- `Loja` <string> - Código da loja
- `Linha` <string> - Código da linha
- `Fornecedor` <string> - Código do fornecedor
- `Busca` <string, ==opcional==> - Termo para busca
- `TipoAT` <string> - Tipo de AT
**Exemplo:**
```json
{
"Emp": "116",
"Loja": "2009",
"Linha": "456",
"Fornecedor": "123",
"Busca": "mesa",
"TipoAT": "4"
}
```
**Response (Exemplo):**
```json
[
{
"Codigo": "PROD001",
"Descricao": "MESA DE JANTAR 4 LUGARES",
"FOR_Nome": "DELLAVITA COZINHAS E PLANEJADOS",
"LSI_Descricao": "LINHA PREMIUM COZINHAS",
"PRC_Descricao": "MESA DE JANTAR 4 LUGARES",
"PRC_Fornecedor": "123",
"PRC_Linha": "4561",
"PRC_CodComercial": "PROD001COM",
"PRC_CodFabricante": "FAB001XYZ",
"Unidade": "UN",
"ValorUnitario": "799.90",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"Codigo": "PROD002",
"Descricao": "CADEIRA ESTOFADA",
"FOR_Nome": "DELLAVITA COZINHAS E PLANEJADOS",
"LSI_Descricao": "LINHA PREMIUM COZINHAS",
"PRC_Descricao": "CADEIRA ESTOFADA COM BRAÇO",
"PRC_Fornecedor": "123",
"PRC_Linha": "4561",
"PRC_CodComercial": "PROD002COM",
"PRC_CodFabricante": "FAB002ABC",
"Unidade": "PC",
"ValorUnitario": "250.00",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `Codigo` <string> - Código principal do produto/item.
- `Descricao` <string> - Descrição geral do produto/item.
- `FOR_Nome` <string> - Nome do fornecedor associado.
- `LSI_Descricao` <string> - Descrição da linha do produto.
- `PRC_Descricao` <string> - Descrição específica do produto (pode ser igual a `Descricao`).
- `PRC_Fornecedor` <string> - Código do fornecedor do produto.
- `PRC_Linha` <string> - Código da linha do produto.
- `PRC_CodComercial` <string> - Código comercial do produto.
- `PRC_CodFabricante` <string> - Código do produto no fabricante.
- `Unidade` <string> - Unidade de medida do produto (ex: "UN", "PC", "M2").
- `ValorUnitario` <string> - Valor unitário do produto (string representando decimal).
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Listar Tipos de AT
**Método:** POST
**URL:** `/api/GerenciamentoMontagem/TipoAT`
**Descrição:** Retorna tipos de AT disponíveis.
**Parâmetros:**
- `Emp` <string> - Código da empresa
- `Loja` <string> - Código da loja
**Exemplo:**
```json
{
"Emp": "116",
"Loja": "2009"
}
```
**Response (Exemplo):**
```json
[
{
"Codigo": "4",
"Descricao": "AT SEM CUSTO",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"Codigo": "5",
"Descricao": "AT COM CUSTO",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"Codigo": "15",
"Descricao": "AT VENDA CLIENTE",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `Codigo` <string> - Código do Tipo de AT.
- `Descricao` <string> - Descrição do Tipo de AT.
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Listar Usuários Responsáveis
**Método:** POST
**URL:** `/api/GerenciamentoMontagem/UsuarioResponsavel`
**Descrição:** Lista responsáveis disponíveis.
**Parâmetros:**
- `Emp` <string> - Código da empresa
- `Loja` <string> - Código da loja
- `TipoResponsavel` <string> - Tipo do responsável
**Exemplo:**
```json
{
"Emp": "116",
"Loja": "2009",
"TipoResponsavel": "1"
}
```
**Response (Exemplo):**
```json
[
{
"TM1_CodIdentity": "USER_1",
"TM1_NomeCompleto": "Silvio Santarosa",
"TM1_Codigo": "1",
"TM1_Emp": "116",
"TM1_Cargo": "10",
"TM1_Equipe": "1",
"TM1_Desativado": "0",
"TM1_DescricaoCargo": "VENDEDOR",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"TM1_CodIdentity": "CARGO_5",
"TM1_NomeCompleto": "MONTADOR",
"TM1_Codigo": "5",
"TM1_Emp": "116",
"TM1_Cargo": "5",
"TM1_Equipe": "0",
"TM1_Desativado": "0",
"TM1_DescricaoCargo": "MONTADOR",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"TM1_CodIdentity": "EQUIPE_3",
"TM1_NomeCompleto": "EQUIPE AZUL",
"TM1_Codigo": "3",
"TM1_Emp": "116",
"TM1_Cargo": "0",
"TM1_Equipe": "3",
"TM1_Desativado": "0",
"TM1_DescricaoCargo": "EQUIPE DE MONTAGEM",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `TM1_CodIdentity` <string> - Identificador único do responsável na lista (pode ser uma combinação de tipo e código).
- `TM1_NomeCompleto` <string> - Nome completo do usuário, cargo ou equipe (pode conter formatação HTML se vier da SP com status).
- `TM1_Codigo` <string> - Código do usuário, cargo ou equipe.
- `TM1_Emp` <string> - Código da empresa.
- `TM1_Cargo` <string> - Código do cargo (se aplicável).
- `TM1_Equipe` <string> - Código da equipe (se aplicável).
- `TM1_Desativado` <string> - Indica se o responsável está desativado ("1" para desativado, "0" para ativo).
- `TM1_DescricaoCargo` <string> - Descrição do cargo (pode ser o nome da equipe ou "Empresa", "Transporte" etc., dependendo do tipo de responsável).
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Salvar Nova Ocorrência
**Método:** POST
**URL:** `/api/GerenciamentoMontagem/SalvaNovaOcorrencia`
**Descrição:** Registra uma nova ocorrência de montagem ou AT.
**Parâmetros:**
- `Emp` <string> - Código da empresa
- `Loja` <string> - Código da loja
- `Cliente` <string> - Código do cliente
- `Contrato` <string> - Número do contrato
- `Ambiente` <string> - Código do ambiente
- `TipoOcorrencia` <int32> - Tipo da ocorrência (1=Serviço, 2=Produto)
- `Fornecedor` <string, ==opcional==> - Código do fornecedor
- `Linha` <string, ==opcional==> - Código da linha
- `Produto` <string, ==opcional==> - Código do produto
- `ProdutoDescricao` <string, ==opcional==> - Descrição do produto
- `Quantidade` <int32> - Quantidade
- `TipoAT` <int32, ==opcional==> - Tipo de AT
- `Altura` <decimal, ==opcional==> - Altura do produto
- `Largura` <decimal, ==opcional==> - Largura do produto
- `Profundidade` <decimal, ==opcional==> - Profundidade do produto
- `ValorUnitario` <decimal, ==opcional==> - Valor unitário
- `Observacao` <string, ==opcional==> - Observações
- `UsuarioResponsavel` <int32> - Código do usuário responsável
**Exemplo:**
```json
{
"Emp": "116",
"Loja": "2009",
"Cliente": "12345",
"Contrato": "67890",
"Ambiente": "AA",
"TipoOcorrencia": 1,
"Observacao": "Instalação de móveis",
"UsuarioResponsavel": 1
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao salvar ocorrência: [descrição do erro]"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, outros valores = erro).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
### Salvar Observação
**Método:** POST
**URL:** `/api/GerenciamentoMontagem/SalvaObservacao`
**Descrição:** Adiciona uma observação a uma ocorrência.
**Parâmetros:**
- `Emp` <string> - Código da empresa
- `Usuario` <string> - Código do usuário
- `Loja` <string> - Código da loja
- `Cliente` <string> - Código do cliente
- `Contrato` <string> - Número do contrato
- `Ambiente` <string> - Código do ambiente
- `IdOcorrencia` <string> - ID da ocorrência
- `Observacao` <string> - Texto da observação
**Exemplo:**
```json
{
"Emp": "116",
"Usuario": "1",
"Loja": "2009",
"Cliente": "12345",
"Contrato": "67890",
"Ambiente": "AA",
"IdOcorrencia": "123",
"Observacao": "Serviço concluído com sucesso"
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao salvar observação: [descrição do erro]"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, outros valores = erro).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
### Finalizar Ocorrência
**Método:** POST
**URL:** `/api/GerenciamentoMontagem/FinalizaOcorrencia`
**Descrição:** Finaliza uma ocorrência de montagem ou AT.
**Parâmetros:**
- `Emp` <string> - Código da empresa
- `Loja` <string> - Código da loja
- `Usuario` <string> - Código do usuário
- `Cliente` <string> - Código do cliente
- `Contrato` <string> - Número do contrato
- `Ambiente` <string> - Código do ambiente
- `codOcorrencia` <string> - ID da ocorrência
- `ComPendencia` <boolean> - Se finaliza com pendência
- `Observacao` <string> - Observação de finalização
**Exemplo:**
```json
{
"Emp": "116",
"Loja": "2009",
"Usuario": "1",
"Cliente": "12345",
"Contrato": "67890",
"Ambiente": "AA",
"codOcorrencia": "123",
"ComPendencia": false,
"Observacao": "Montagem finalizada"
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao finalizar ocorrência: [descrição do erro]"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, outros valores = erro).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
:::warning Observações
### Gerenciamento de Montagem
- Agrupamento de ocorrências é feito por ambiente
- Possibilidade de anexar fotos durante o processo
- Geração de ficha com histórico completo
### AT de Serviço
- Valores de serviço podem ser fixos ou variáveis
- Responsável pode ser usuário, cargo ou equipe
- Permite finalização parcial com pendências
### AT de Produto
- Para fabricantes integrados, pedido é gerado automaticamente
- AT com custo permite compra parcial de itens
- AT sem custo tem custos atribuídos ao fabricante
- AT com custo (prioritária) permite compra de itens completos com acréscimo de 50%
- Dimensões e valores são obrigatórios para alguns tipos de AT
:::
# Arquivos de Projetos
:::info Descrição
Sistema integrado para gerenciamento de arquivos relacionados aos projetos dos clientes, com armazenamento em nuvem (Azure Storage). Permite visualizar, fazer upload e gerenciar arquivos por cliente, contrato e ambiente.
:::
## Fluxo no APP
1. Acessar menu de `Arquivos de Projetos`
2. Visualizar lista de clientes com projetos
- Filtros disponíveis por período e busca por nome
- Indicadores visuais de arquivos por pasta
3. Ao selecionar um cliente:
- Ver ambientes do projeto
- Acessar arquivos por ambiente
- Upload de novos arquivos
- Visualização de miniaturas para imagens
- Download de arquivos
## Endpoints Utilizados
### Listar Clientes com Projetos
**Método:** POST
**URL:** `/api/ArquivosClienteProjeto`
**Descrição:** Lista os clientes com projetos e arquivos.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `EmpPadrao` <int32> - Código da empresa padrão
- `Usuario` <int32> - Código do usuário
- `Loja` <int32> - Código da loja
- `Busca` <string, ==opcional==> - Termo para filtrar resultados
- `Campo` <string, ==opcional==> - Campo para filtrar a busca
**Exemplo:**
```json
{
"Emp": 116,
"EmpPadrao": 116,
"Usuario": 1,
"Loja": 2009,
"Busca": "Cliente A",
"Campo": "CLI_Nome"
}
```
**Response (Exemplo):**
```json
[
{
"CLI_Codigo": 12345,
"CLI_Nome": "Cliente A Soluções Digitais",
"CLI_Loja": 2009,
"UltimoContrato": "200912345",
"QtdProjetosComArquivos": 3,
"TotalProjetosCliente": 5,
"DataUltimaModificacaoArquivo": "2024-07-29T10:30:00",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"CLI_Codigo": 67890,
"CLI_Nome": "Cliente A B C Comércio",
"CLI_Loja": 2009,
"UltimoContrato": "200967890",
"QtdProjetosComArquivos": 0,
"TotalProjetosCliente": 1,
"DataUltimaModificacaoArquivo": null,
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `CLI_Codigo` <int> - Código do cliente.
- `CLI_Nome` <string> - Nome/razão social do cliente.
- `CLI_Loja` <int> - Código da loja do cliente.
- `UltimoContrato` <string> - Número do último contrato ou de um contrato de referência do cliente.
- `QtdProjetosComArquivos` <int> - Quantidade de projetos/ambientes do cliente que possuem arquivos associados.
- `TotalProjetosCliente` <int> - Quantidade total de projetos/ambientes do cliente.
- `DataUltimaModificacaoArquivo` <string> - Data e hora da última modificação em qualquer arquivo do cliente (formato ISO 8601, opcional).
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Listar Ambientes com Arquivos
**Método:** POST
**URL:** `/api/GerenciamentoMontagemArquivosAmbientes`
**Descrição:** Retorna os ambientes do projeto que contêm arquivos.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Usuario` <int32> - Código do usuário
- `Loja` <int32> - Código da loja
- `Cliente` <string> - Código do cliente
- `Contrato` <string> - Número do contrato
**Exemplo:**
```json
{
"Emp": 116,
"Usuario": 1,
"Loja": 2009,
"Cliente": "12345",
"Contrato": "67890"
}
```
**Response (Exemplo):**
```json
[
{
"PRO_Opcao": "AA",
"PRO_Ambiente": "COZINHA PLANEJADA",
"PRO_Contrato": "67890",
"QtdArquivosNaPasta": 5,
"CaminhoPasta": "Projetos/Cozinha",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"PRO_Opcao": "AB",
"PRO_Ambiente": "SALA DE TV",
"PRO_Contrato": "67890",
"QtdArquivosNaPasta": 0,
"CaminhoPasta": "Projetos/SalaDeTV",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"PRO_Opcao": "AC",
"PRO_Ambiente": "QUARTO CASAL",
"PRO_Contrato": "67890",
"QtdArquivosNaPasta": 12,
"CaminhoPasta": "Projetos/QuartoCasal",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `PRO_Opcao` <string> - Código do ambiente/opção do projeto (ex: "AA", "AB").
- `PRO_Ambiente` <string> - Descrição do ambiente (ex: "COZINHA", "SALA").
- `PRO_Contrato` <string> - Número do contrato ao qual o ambiente pertence.
- `QtdArquivosNaPasta` <int> - Quantidade de arquivos encontrados neste ambiente para a `Pasta` (módulo) especificada na requisição.
- `CaminhoPasta` <string> - Descrição ou caminho da pasta/módulo onde os arquivos foram contados (informativo, pode ser derivado do parâmetro `Pasta` da requisição).
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Listar Arquivos do Ambiente
**Método:** POST
**URL:** `/api/GerenciamentoMontagemArquivos`
**Descrição:** Retorna a lista de arquivos do ambiente.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Usuario` <int32> - Código do usuário
- `Loja` <int32> - Código da loja
- `Cliente` <string> - Código do cliente
- `Ambientes` <string> - Códigos dos ambientes
**Exemplo:**
```json
{
"Emp": 116,
"Usuario": 1,
"Loja": 2009,
"Cliente": "12345",
"Ambientes": "AA"
}
```
**Response (Exemplo):**
```json
[
{
"ARQ_GUID": "guid-arquivo-1",
"ARQ_Arquivo_Nome": "Planta Baixa Cozinha",
"ARQ_Arquivo_Extencao": ".pdf",
"ARQ_DataCadastro": "2024-07-28T14:00:00",
"ARQ_Arquivo_DataModificado": "2024-07-29T09:15:00",
"USU_Nome": "Silvio Santarosa",
"ARQ_Modulo": "6",
"ARQ_Categoria": "1",
"ARQ_URL": "https://url.do.azure.storage/container/guid-arquivo-1.pdf?token=xyz",
"MiniaturaURL": "https://url.do.azure.storage/container/thumbnails/guid-arquivo-1.jpg?token=abc",
"TamanhoBytes": 1024576,
"ERR_Codigo": 0,
"ERR_Mensagem": ""
},
{
"ARQ_GUID": "guid-arquivo-2",
"ARQ_Arquivo_Nome": "Render Final Sala",
"ARQ_Arquivo_Extencao": ".jpg",
"ARQ_DataCadastro": "2024-07-27T10:00:00",
"ARQ_Arquivo_DataModificado": "2024-07-27T10:05:00",
"USU_Nome": "Ana Lima",
"ARQ_Modulo": "6",
"ARQ_Categoria": "2",
"ARQ_URL": "https://url.do.azure.storage/container/guid-arquivo-2.jpg?token=123",
"MiniaturaURL": "https://url.do.azure.storage/container/thumbnails/guid-arquivo-2.jpg?token=456",
"TamanhoBytes": 204800,
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
]
```
**Propriedades da Resposta (por item da lista):**
- `ARQ_GUID` <string> - Identificador único global do arquivo.
- `ARQ_Arquivo_Nome` <string> - Nome do arquivo (sem extensão).
- `ARQ_Arquivo_Extencao` <string> - Extensão do arquivo (ex: ".pdf", ".jpg").
- `ARQ_DataCadastro` <string> - Data e hora do cadastro do arquivo (formato ISO 8601).
- `ARQ_Arquivo_DataModificado` <string> - Data e hora da última modificação do arquivo (formato ISO 8601).
- `USU_Nome` <string> - Nome do usuário que cadastrou/modificou o arquivo.
- `ARQ_Modulo` <string> - Código do módulo/pasta onde o arquivo está (relacionado ao parâmetro `Pasta` da requisição).
- `ARQ_Categoria` <string> - Código da categoria do arquivo.
- `ARQ_URL` <string> - URL para download/visualização do arquivo no Azure Storage (gerada pela API com token de acesso temporário).
- `MiniaturaURL` <string> - URL para a miniatura da imagem, se aplicável (gerada pela API com token, opcional).
- `TamanhoBytes` <int> - Tamanho do arquivo em bytes (obtido da tabela `Advanced_Arquivos` ou do Azure).
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Obter Token Azure
**Método:** POST
**URL:** `/api/GerenciamentoMontagemGetTokenAzure`
**Descrição:** Obtém token para operações no Azure Storage.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Usuario` <int32> - Código do usuário
- `Loja` <int32> - Código da loja
**Exemplo:**
```json
{
"Emp": 116,
"Usuario": 1,
"Loja": 2009
}
```
**Response (Exemplo):**
```json
{
"AzureStorageToken": "sv=2021-06-08&ss=b&srt=sco&sp=rwdlacup&se=2024-07-30T12:00:00Z&st=2024-07-30T10:00:00Z&spr=https&sig=aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890AbCdEfG%3D",
"AzureStorageBaseUrl": "https://seustorageaccount.blob.core.windows.net/seucontainer/",
"TokenExpiry": "2024-07-30T12:00:00Z",
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Propriedades da Resposta:**
- `AzureStorageToken` <string> - O token SAS (Shared Access Signature) para acesso ao Azure Storage.
- `AzureStorageBaseUrl` <string> - A URL base do contêiner no Azure Storage onde os arquivos estão localizados.
- `TokenExpiry` <string> - Data e hora de expiração do token (formato ISO 8601 UTC).
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
### Salvar Arquivo
**Método:** POST
**URL:** `/api/GerenciamentoMontagemSaveArquivoAzure`
**Descrição:** Salva novo arquivo no Azure Storage.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Loja` <int32> - Código da loja
- `Usuario` <int32> - Código do usuário
- `Guid` <string> - Identificador único do arquivo
- `Modulo` <string> - Código do módulo
- `Ref1` <string> - Referência 1 (geralmente código do cliente)
- `Ref2` <string> - Referência 2 (geralmente código do ambiente)
- `Tamanho` <int32> - Tamanho do arquivo em bytes
- `Extencao` <string> - Extensão do arquivo
- `Descricao` <string, ==opcional==> - Descrição do arquivo
- `Categoria` <string, ==opcional==> - Categoria do arquivo
- `Origem` <string, ==opcional==> - Origem do arquivo
- `NomeArquivo` <string, ==opcional==> - Nome original do arquivo
**Exemplo:**
```json
{
"Emp": 116,
"Loja": 2009,
"Usuario": 1,
"Guid": "novo-guid",
"Modulo": "6",
"Ref1": "12345",
"Ref2": "AA",
"Tamanho": 1024,
"Extencao": ".jpg",
"Descricao": "Foto do ambiente",
"NomeArquivo": "foto_ambiente.jpg"
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "Arquivo salvo com sucesso.",
"ARQ_GUID": "novo-guid"
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao salvar arquivo: [descrição do erro]",
"ARQ_GUID": null
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, outros valores = erro).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
- `ARQ_GUID` <string> - O GUID do arquivo que foi salvo (em caso de sucesso, nulo em caso de erro).
### Excluir Arquivo
**Método:** POST
**URL:** `/api/GerenciamentoMontagemDeleteArquivoAzure`
**Descrição:** Remove arquivo do Azure Storage.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Loja` <int32> - Código da loja
- `Usuario` <int32> - Código do usuário
- `Guid` <string> - Identificador único do arquivo
**Exemplo:**
```json
{
"Emp": 116,
"Loja": 2009,
"Usuario": 1,
"Guid": "arquivo-guid"
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "Arquivo excluído com sucesso."
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao excluir arquivo: [descrição do erro]"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, outros valores = erro).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
:::warning Observações
- Arquivos são armazenados no Azure Storage em containers específicos por empresa/loja
- Sistema gera automaticamente miniaturas para arquivos de imagem
- Suporte para diversos tipos de arquivo:
- Imagens: JPG, PNG, JPEG
- Documentos: PDF, DOC, DOCX, XLS, XLSX
- Projetos: PROMOB, KIT
- Compactados: ZIP, RAR, 7Z
- URLs dos arquivos são geradas com token de acesso temporário
- Organização hierárquica: Empresa > Loja > Cliente > Ambiente
- Integração com módulo de Gerenciamento de Montagem/AT para anexar fotos às ocorrências
:::
# Gerenciar Usuários
:::info Descrição
Sistema para gerenciamento de usuários do aplicativo, permitindo visualizar, bloquear/desbloquear usuários e resetar senhas. O controle é feito por loja e inclui informações como cargo, status e permissões.
:::
## Fluxo no APP
1. Acessar o menu `Gerenciar Usuários`
2. Selecionar a loja desejada
3. Filtrar usuários por:
- Campo de busca (personalizado)
- Texto da busca
4. Ao selecionar um usuário, é possível:
- Visualizar detalhes (nome, cargo, loja)
- Bloquear/Desbloquear acesso
- Resetar senha
---
## Endpoints Utilizados
### Listar Usuários
**Método:** POST
**URL:** `/api/Users`
**Descrição:** Lista os usuários cadastrados.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Loja` <int32> - Código da loja
- `Usuario` <int32> - Código do usuário
- `Status` <int32> - Status (-1=Todos, 0=Ativos, 1=Inativos)
- `Campo` <string, ==opcional==> - Campo para filtrar a busca
- `Busca` <string, ==opcional==> - Texto para busca
**Exemplo:**
```json
{
"Emp": 116,
"Loja": 2009,
"Usuario": 1,
"Status": -1,
"Campo": "",
"Busca": ""
}
```
**Response (Exemplo):**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"Codigo": 1,
"Nome": "Silvio Santarosa",
"Login": "santarosa",
"Cargo": "GERENTE COMERCIAL",
"Loja": "Matriz SP",
"Status": "Ativo",
"Email": "s.santarosa@email.com",
"Bloqueado": false
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"Codigo": 287,
"Nome": "Danielle Silva",
"Login": "dani",
"Cargo": "ANALISTA FINANCEIRO",
"Loja": "Filial RJ",
"Status": "Ativo",
"Email": "dani.silva@email.com",
"Bloqueado": true
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"Codigo": 500,
"Nome": "Usuario Inativo Teste",
"Login": "inativo.teste",
"Cargo": "VENDEDOR",
"Loja": "Matriz SP",
"Status": "Inativo",
"Email": "inativo@email.com",
"Bloqueado": false
}
]
```
**Propriedades da Resposta (por item da lista, baseado na Model Users.vb):**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
- `Codigo` <int> - Código interno do usuário.
- `Nome` <string> - Nome completo do usuário.
- `Login` <string> - Login de acesso do usuário.
- `Cargo` <string> - Descrição do cargo do usuário.
- `Loja` <string> - Nome/apelido da loja à qual o usuário está vinculado.
- `Status` <string> - Descrição do status do usuário (ex: "Ativo", "Inativo").
- `Email` <string> - Endereço de e-mail do usuário.
- `Bloqueado` <boolean> - Indica se o usuário está bloqueado (`true`) ou não (`false`).
### Bloquear Usuário
**Método:** POST
**URL:** `/api/Users/Bloquear`
**Descrição:** Bloqueia o acesso do usuário.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `CodigoUsuario` <int32> - Código do usuário a ser bloqueado
**Exemplo:**
```json
{
"Emp": 116,
"CodigoUsuario": 1
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "Usuário bloqueado com sucesso."
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao bloquear usuário: [descrição do erro]"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
### Desbloquear Usuário
**Método:** POST
**URL:** `/api/Users/Desbloquear`
**Descrição:** Desbloqueia o acesso do usuário.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `CodigoUsuario` <int32> - Código do usuário a ser desbloqueado
**Exemplo:**
```json
{
"Emp": 116,
"CodigoUsuario": 1
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "Usuário desbloqueado com sucesso."
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao desbloquear usuário: [descrição do erro]"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
### Resetar Senha
**Método:** POST
**URL:** `/api/Users/ResetarSenha`
**Descrição:** Reseta a senha do usuário para o padrão.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Loja` <int32> - Código da loja
- `CodigoUsuario` <int32> - Código do usuário
**Exemplo:**
```json
{
"Emp": 116,
"Loja": 2009,
"CodigoUsuario": 1
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "Senha resetada com sucesso.",
"NovaSenha": "aB1!cDe2"
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao resetar senha: [descrição do erro]",
"NovaSenha": null
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
- `NovaSenha` <string> - A nova senha gerada para o usuário (em caso de sucesso, nulo em caso de erro). Esta senha deve ser informada ao usuário.
### Verificar Permissões
**Método:** POST
**URL:** `/api/Permissao`
**Descrição:** Verifica as permissões do usuário para construir o menu.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Usuario` <int32> - Código do usuário
- `Versao` <string> - Versão do aplicativo
**Exemplo:**
```json
{
"Emp": 116,
"Usuario": 1,
"Versao": "0.2"
}
```
**Response (Exemplo):**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"Codigo": 1,
"Descricao": "Liberar Pontuação",
"Icone": "icon_liberar_pontuacao",
"Ordem": 1,
"Status": true,
"IdentificadorOriginal": "liLiberacoes"
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"Codigo": 2,
"Descricao": "Autorização Deb/Cred",
"Icone": "icon_autorizacao_de_cred",
"Ordem": 2,
"Status": true,
"IdentificadorOriginal": "liAutorizacoes"
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"Codigo": 7,
"Descricao": "Limpar Senha",
"Icone": "icon_reset_senha",
"Ordem": 7,
"Status": true,
"IdentificadorOriginal": "btnResetSenha"
}
]
```
**Propriedades da Resposta (por item da lista):**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
- `Codigo` <int> - Código numérico da permissão (pode ser derivado da `Seq` da SP ou ser um ID de permissão interno).
- `Descricao` <string> - Descrição textual da permissão/item de menu.
- `Icone` <string> - Nome/identificador do ícone para a permissão (pode ser nulo/vazio se não definido).
- `Ordem` <int> - Ordem de exibição da permissão (derivado da `Seq` da SP).
- `Status` <boolean> - Sempre `true` para permissões retornadas, indicando que o usuário tem acesso.
- `IdentificadorOriginal` <string> - O campo `Identificador` original retornado pela Stored Procedure (ex: "liLiberacoes", "btnResetSenha").
:::warning Observações
- O bloqueio/desbloqueio de usuários requer permissão específica
- O reset de senha requer permissão específica
- Usuários bloqueados são identificados com ícone de cadeado
- Após bloqueio/desbloqueio, a lista é atualizada automaticamente
- A senha padrão após reset é definida no sistema
- As permissões são verificadas ao carregar o menu principal
- O sistema mantém histórico de alterações de status dos usuários
:::
# Comunicação Interna
:::info Descrição
Sistema completo de mensagens corporativas que permite a troca de comunicações entre usuários, cargos e equipes. Inclui recursos de organização por pastas, acompanhamento de mensagens, respostas e busca avançada.
:::
## Fluxo no APP
1. Acessar o menu `Comunicação Interna`
2. Visualizar mensagens organizadas por pastas:
- Entrada
- Enviadas
- Importantes
- Arquivadas
3. Ao selecionar uma mensagem e/ou (arrastar para a esquerda):
- Ler conteúdo completo
- Marcar como lida/não lida
- Sinalizar para acompanhamento
- Mover para outra pasta
- Responder
4. Para nova mensagem:
- Selecionar destinatários (usuários, cargos ou equipes)
- Definir assunto e conteúdo
- Enviar
---
## Endpoints Utilizados
### Listar Mensagens
**Método:** POST
**URL:** `/api/ComunicacaoInterna`
**Descrição:** Lista as mensagens de uma pasta.
**Parâmetros:**
- `Pasta` <int32> - Tipo da pasta (-1=Todas, 100=Entrada, 300=Enviadas, 400=Acompanhamento, 500=Lixeira)
- `Usuario` <string> - ID do usuário
- `Posicao` <int32> - Início da paginação
- `RegPorPagina` <int32> - Quantidade de registros por página
**Exemplo:**
```json
{
"Pasta": -1,
"Usuario": "160200900001",
"Posicao": 0,
"RegPorPagina": 20
}
```
**Response (Exemplo de um item da lista):**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"_Seq": "1",
"CAB_ID": 7313221,
"USU_NomeCompletoDe": "Silvio Santarosa ",
"CON_Assunto": "Exportação de informações do sistema - Usuário: Silvio",
"CON_Conteudo": null,
"CAB_DataEnviado": "14/05/2025 17:29:34",
"Usuarios": "Silvio Santarosa ;",
"CAB_Acompanhar": 0,
"CAB_Pasta": 100,
"CAB_DataLida": "",
"CAB_Pai": "7313220",
"CAB_Conteudo": null,
"TipoCampoBusca": null,
"TitHeader": null
}
]
```
**Propriedades da Resposta (por item da lista):**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
- `_Seq` <string> - Sequencial ou identificador de ordenação na lista.
- `CAB_ID` <int> - ID único do cabeçalho da mensagem.
- `USU_NomeCompletoDe` <string> - Nome completo do usuário remetente.
- `CON_Assunto` <string> - Assunto da mensagem.
- `CON_Conteudo` <string> - Conteúdo HTML principal da mensagem (pode ser `null`).
- `CAB_DataEnviado` <string> - Data e hora do envio da mensagem (formato "dd/MM/yyyy HH:mm:ss").
- `Usuarios` <string> - Lista de destinatários (nomes separados por ponto e vírgula, ex: "Nome1 ; Nome2 ;").
- `CAB_Acompanhar` <int> - Indica se a mensagem está marcada para acompanhamento (0 = Não, 1 = Sim).
- `CAB_Pasta` <int> - Código numérico da pasta onde a mensagem se encontra (ex: 100 para Caixa de Entrada, 300 para Enviadas, etc.).
- `CAB_DataLida` <string> - Data e hora em que a mensagem foi lida pelo usuário atual (formato "dd/MM/yyyy HH:mm:ss"). String vazia (`""`) se não lida.
- `CAB_Pai` <string> - ID da mensagem original à qual esta é uma resposta. Pode ser uma string numérica ou `null` se não for uma resposta.
- `CAB_Conteudo` <string> - Um conteúdo secundário ou preview relacionado ao cabeçalho da mensagem (pode ser `null`). Distinto de `CON_Conteudo`.
- `TipoCampoBusca` <string> - Informa qual campo foi utilizado caso a mensagem tenha sido encontrada através de uma busca (ex: "Assunto", "Remetente"). Pode ser `null`.
- `TitHeader` <string> - Título sugerido para exibição no cabeçalho da interface ao visualizar os detalhes da mensagem. Pode ser `null`.
### Detalhes da Mensagem
**Método:** POST
**URL:** `/api/ComunicacaoInterna/Item`
**Descrição:** Retorna o conteúdo de uma mensagem específica.
**Parâmetros:**
- `CAB_ID` <int32> - ID da mensagem
**Exemplo:**
```json
{
"CAB_ID": 12345
}
```
### Buscar Mensagens
**Método:** POST
**URL:** `/api/ComunicacaoInterna/Busca`
**Descrição:** Busca mensagens por conteúdo.
**Parâmetros:**
- `Pasta` <int32> - Tipo da pasta
- `Usuario` <string> - Código do usuário
- `Criterio` <string> - Texto para busca
**Exemplo:**
```json
{
"Pasta": -1,
"Usuario": "160200900001",
"Criterio": "texto para busca"
}
```
**Response (Exemplo de um item da lista - similar a Listar Mensagens):**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"CAB_ID": 12380,
"CAB_Tipo": 1,
"CON_Assunto": "Urgente: Revisão da Proposta Cliente X",
"CON_DataCadastro": "28/07/2024 15:00:00",
"CAB_Usuario": "102009000001",
"USU_Nome": "Silvio Santarosa",
"CIC_Lida": false,
"CAB_Acompanhar": false,
"CAB_Prioridade": 3, // Ex: 3=Urgente
"TotalDestinatarios": 1,
"Destinatarios": "Danielle Silva",
"TemAnexo": true,
"Pasta": "Caixa de Entrada",
"Icone": "email_urgent",
"Cor": "#FFDAB9",
"Respondida": false,
"Encaminhada": false,
"CAB_IdResposta": null
}
// ... mais mensagens encontradas na busca
]
```
**Propriedades da Resposta (por item da lista, baseado na Model ComunicacaoInterna.vb - igual a Listar Mensagens):**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso).
- `CAB_ID` <int> - ID único da mensagem (cabeçalho).
- `CAB_Tipo` <int> - Tipo da mensagem/documento.
- `CON_Assunto` <string> - Assunto da mensagem.
- `CON_DataCadastro` <string> - Data e hora do cadastro/envio da mensagem (formato "dd/MM/yyyy HH:mm:ss").
- `CAB_Usuario` <string> - ID do usuário remetente original.
- `USU_Nome` <string> - Nome do usuário remetente original.
- `CIC_Lida` <boolean> - Indica se a mensagem foi lida pelo usuário atual.
- `CAB_Acompanhar` <boolean> - Indica se a mensagem está marcada para acompanhamento.
- `CAB_Prioridade` <int> - Nível de prioridade da mensagem.
- `TotalDestinatarios` <int> - Número total de destinatários da mensagem.
- `Destinatarios` <string> - String com os nomes dos primeiros destinatários.
- `TemAnexo` <boolean> - Indica se a mensagem possui anexos.
- `Pasta` <string> - Nome da pasta onde a mensagem está.
- `Icone` <string> - Identificador do ícone para a mensagem.
- `Cor` <string> - Cor associada à mensagem.
- `Respondida` <boolean> - Indica se esta mensagem foi respondida.
- `Encaminhada` <boolean> - Indica se esta mensagem foi encaminhada.
- `CAB_IdResposta` <int> - ID da mensagem original à qual esta é uma resposta.
### Marcar Acompanhamento
**Método:** POST
**URL:** `/api/ComunicacaoInterna/MudaAcompanhar`
**Descrição:** Marca/desmarca mensagem para acompanhamento.
**Parâmetros:**
- `CAB_ID` <int32> - ID da mensagem
- `CAB_Acompanhar` <int32> - Status do acompanhamento (0=Não, 1=Sim)
**Exemplo:**
```json
{
"CAB_ID": 12345,
"CAB_Acompanhar": 1
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "Status de acompanhamento atualizado."
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao atualizar acompanhamento."
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
### Mover Mensagem
**Método:** POST
**URL:** `/api/ComunicacaoInterna/MudaPasta`
**Descrição:** Move mensagem para outra pasta.
**Parâmetros:**
- `CAB_ID` <int32> - ID da mensagem
- `CAB_Pasta` <int32> - Código da pasta destino
- `Lida` <int32> - Status de leitura
**Exemplo:**
```json
{
"CAB_ID": 12345,
"CAB_Pasta": 500,
"Lida": 1
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "Mensagem movida com sucesso."
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao mover mensagem."
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
### Marcar Leitura
**Método:** POST
**URL:** `/api/ComunicacaoInterna/MudaLida`
**Descrição:** Marca/desmarca mensagem como lida.
**Parâmetros:**
- `CAB_ID` <int32> - ID da mensagem
- `Modo` <int32> - Status de leitura (0=Não lida, 1=Lida)
**Exemplo:**
```json
{
"CAB_ID": 12345,
"Modo": 1
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "Status de leitura atualizado."
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao marcar leitura."
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
### Nova Mensagem
**Método:** POST
**URL:** `/api/ComunicacaoInterna/NovaCI`
**Descrição:** Envia nova mensagem.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `CAB_IdResposta` <int32> - ID da mensagem respondida (-1 para nova)
- `CAB_Usuario` <string> - Código do usuário remetente
- `CAB_NaoResponder` <int32> - Permite resposta (0=Sim, 1=Não)
- `CAB_Tipo` <int32> - Tipo da mensagem
- `CAB_Pasta` <int32> - Pasta inicial
- `CAB_Acompanhar` <int32> - Marca para acompanhamento
- `CAB_Prioridade` <int32> - Nível de prioridade
- `CON_Assunto` <string> - Assunto da mensagem
- `CON_Conteudo` <string> - Conteúdo da mensagem
- `CON_IP` <string, ==opcional==> - IP do remetente
- `Participantes` <string, ==opcional==> - Lista de usuários (separados por ;)
- `Cargos` <string, ==opcional==> - Lista de cargos (separados por ;)
- `CargosEquipe` <string, ==opcional==> - Lista de equipes (separados por ;)
**Exemplo:**
```json
{
"Emp": 116,
"CAB_IdResposta": -1,
"CAB_Usuario": "160200900001",
"CAB_NaoResponder": 0,
"CAB_Tipo": 1,
"CAB_Pasta": 100,
"CAB_Acompanhar": 0,
"CAB_Prioridade": 1,
"CON_Assunto": "Assunto da mensagem",
"CON_Conteudo": "Conteúdo da mensagem",
"CON_IP": "",
"Participantes": "1;2;3;",
"Cargos": "10;20;",
"CargosEquipe": "100;200;"
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "Mensagem enviada com sucesso.",
"CAB_ID": 12346 // ID da nova mensagem criada
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao enviar mensagem: [descrição do erro]",
"CAB_ID": null
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro ou sucesso.
- `CAB_ID` <int> - ID da nova mensagem (cabeçalho principal) criada (em caso de sucesso, nulo em caso de erro).
### Buscar Usuários
**Método:** POST
**URL:** `/api/GetBuscaUsuarioCI`
**Descrição:** Busca usuários para envio de mensagem.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `UserCI` <string> - Código do usuário
- `Busca` <string> - Termo para busca
**Exemplo:**
```json
{
"Emp": 116,
"UserCI": "160200900001",
"Busca": "nome do usuário"
}
```
:::warning Observações
- A busca de mensagens requer no mínimo 3 caracteres
- Mensagens podem ser enviadas para múltiplos destinatários
- Destinatários podem ser usuários, cargos ou equipes
- Sistema mantém histórico completo de mensagens
- Mensagens não lidas são destacadas visualmente
- Respostas mantêm referência à mensagem original
- Conteúdo suporta formatação HTML básica
- Anexos não são suportados na versão atual
:::
# Registro de Visita
:::info Descrição
Sistema para registro e controle de visitas técnicas aos clientes, permitindo check-in e check-out com geolocalização. Integrado com os módulos de montagem e assistência técnica, possibilita o acompanhamento em tempo real das visitas realizadas.
:::
## Fluxo no APP
1. Acessar o menu `Registro de Visita`
2. Visualizar lista de clientes agendados
- Filtrar por nome do cliente
- Ver status da visita (pendente, em andamento, finalizada)
3. Ao selecionar um cliente:
- Realizar check-in
- Registra localização atual
- Registra data/hora
- Adiciona observações
- Durante a visita:
- Registrar ocorrências
- Adicionar observações
- Realizar check-out
- Registra localização de saída
- Registra data/hora final
- Adiciona observações finais
---
## Endpoints Utilizados
### Listar Visitas
**Método:** POST
**URL:** `/api/visitasLista`
**Descrição:** Lista as visitas agendadas.
**Parâmetros:**
- `Emp` <int32> - Código da empresa
- `Usuario` <int32> - Código do usuário
- `Busca` <string, ==opcional==> - Termo para filtrar resultados
**Exemplo:**
```json
{
"Emp": 116,
"Usuario": 1,
"Busca": ""
}
```
**Response (Exemplo):**
```json
[
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"PMT_Emp": 116,
"PMT_Loja": 2009,
"PMT_Cliente": 12345,
"CLI_Nome": "Nome Completo do Cliente Exemplo",
"PMT_Contrato": "200901234",
"PMT_TipoMontagem": 1,
"Ambientes": "AA-AB-AC [Montagem]",
"MIN_PMT_MontagemI": "2024-08-01T09:00:00",
"MAX_PMT_MontagemT": "2024-08-05T18:00:00",
"REV_ID": 789,
"REV_CheckinData": "2024-08-02T10:00:00.123", // Exemplo com milissegundos
"REV_CheckOutData": "0001-01-01T00:00:00", // Visita em aberto
"USU_Nome": "MONTADOR - Fulano de Tal",
"StatusVisita": 1,
"StatusVisitaDescricao": "Iniciado em 02/08/2024 10:00"
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"PMT_Emp": 116,
"PMT_Loja": 2009,
"PMT_Cliente": 67890,
"CLI_Nome": "Outro Cliente Teste",
"PMT_Contrato": "200967890",
"PMT_TipoMontagem": 10,
"Ambientes": "BA [Retorno]",
"MIN_PMT_MontagemI": "2024-07-20T08:00:00",
"MAX_PMT_MontagemT": "2024-07-20T17:00:00",
"REV_ID": 790,
"REV_CheckinData": "2024-07-20T08:05:00.00",
"REV_CheckOutData": "2024-07-20T16:55:00.456", // Visita finalizada
"USU_Nome": "MONTADOR - Ciclano Alves",
"StatusVisita": 0,
"StatusVisitaDescricao": "Última visita em 20/07/2024 16:55"
},
{
"ERR_Codigo": 0,
"ERR_Mensagem": "",
"PMT_Emp": 116,
"PMT_Loja": 2009,
"PMT_Cliente": 11223,
"CLI_Nome": "Cliente Sem Visita Registrada",
"PMT_Contrato": "200911223",
"PMT_TipoMontagem": 1,
"Ambientes": "DA-DB",
"MIN_PMT_MontagemI": "2024-08-10T00:00:00",
"MAX_PMT_MontagemT": "2024-08-12T00:00:00",
"REV_ID": null, // Sem visita registrada
"REV_CheckinData": null,
"REV_CheckOutData": null,
"USU_Nome": "Sem visita",
"StatusVisita": 0,
"StatusVisitaDescricao": "Sem visita"
}
]
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso).
- `ERR_Mensagem` <string> - Mensagem de erro (vazio se sucesso, ou "Nenhum registro encontrado").
- `PMT_Emp` <int> - Código da empresa.
- `PMT_Loja` <int> - Código da loja.
- `PMT_Cliente` <int> - Código do cliente.
- `CLI_Nome` <string> - Nome do cliente.
- `PMT_Contrato` <string> - Número do contrato.
- `PMT_TipoMontagem` <int> - Código do tipo de montagem (ex: 1, 4, 10).
- `Ambientes` <string> - String com os códigos dos ambientes agregados (ex: "AA-AB-AC"), pode incluir sufixo como "[Retorno]".
- `MIN_PMT_MontagemI` <datetime> - Data e hora previstas para o início da montagem do primeiro ambiente (formato ISO 8601, ex: "2024-08-01T09:00:00").
- `MAX_PMT_MontagemT` <datetime> - Data e hora previstas para o término da montagem do último ambiente (formato ISO 8601, ex: "2024-08-05T18:00:00").
- `REV_ID` <int> - ID do último registro de visita associado (pode ser `null` se não houver visita registrada para o agrupamento de montagem).
- `REV_CheckinData` <datetime> - Data e hora do check-in da última visita (formato ISO 8601, ex: "2024-08-02T10:00:00.123", pode incluir milissegundos). Será `null` se não houver visita.
- `REV_CheckOutData` <datetime> - Data e hora do check-out da última visita (formato ISO 8601, ex: "2024-07-20T16:55:00.456"). Retorna `"0001-01-01T00:00:00"` se a visita foi iniciada (check-in realizado) mas ainda não finalizada (check-out não realizado). Será `null` se não houver visita.
- `USU_Nome` <string> - Nome do usuário (técnico/montador) que realizou a última visita, formatado com o cargo (ex: "MONTADOR - Fulano de Tal"), ou "Sem visita".
- `StatusVisita` <int> - Código do status da visita (0 = Sem visita / Finalizada, 1 = Em andamento).
- `StatusVisitaDescricao` <string> - Descrição textual do status da visita (ex: "Sem visita", "Iniciado em dd/MM/yyyy HH:mm", "Última visita em dd/MM/yyyy HH:mm").
### Registrar Check-in
**Método:** POST
**URL:** `/api/visitasCheckin`
**Descrição:** Registra o início da visita (check-in).
**Parâmetros:**
- `REV_Emp` <int32> - Código da empresa.
- `REV_Loja` <int32> - Código da loja.
- `REV_Cliente` <int32> - Código do cliente.
- `REV_Contrato` <int32> - Número do contrato.
- `REV_Ambientes` <string> - Códigos dos ambientes (separados por vírgula, ex: "AA,AB").
- `REV_CheckinUsuario` <int32> - Código do usuário que está fazendo o check-in.
- `REV_CheckinLatitude` <string> - Latitude da localização no momento do check-in.
- `REV_CheckinLongitude` <string> - Longitude da localização no momento do check-in.
- `REV_CheckinDevice` <string> - Identificador/nome do dispositivo utilizado.
- `REV_Observacao` <string> - Observações iniciais da visita.
- `PMT_TipoMontagem` <int32> - Código do tipo de montagem (Este valor é passado para o parâmetro `@REV_TipoMontagem` da Stored Procedure. O parâmetro `@REV_TipoVisita` da SP é fixado em `1` pela API para check-in, indicando "Montagem").
**Exemplo:**
```json
{
"REV_Emp": 116,
"REV_Loja": 2009,
"REV_Cliente": 12345,
"REV_Contrato": 67890,
"REV_Ambientes": "AA,AB",
"REV_TipoVisita": 1, // A API envia este valor fixo para a SP (@REV_TipoVisita = 1)
"REV_CheckinUsuario": 1,
"REV_CheckinLatitude": "-19.123456",
"REV_CheckinLongitude": "-43.123456",
"REV_CheckinDevice": "iPhone 12",
"REV_Observacao": "Início da visita",
"PMT_TipoMontagem": 1 // Mapeado para @REV_TipoMontagem na SP
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": "98765" // Contém o ID (REV_ID) do novo registro de visita criado
}
```
**Response (Erro - Ex: Check-in pendente):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Existe cliente sem finalizar visita. Finalize a visita antes de iniciar uma nova. <br>Loja: 2009 - Cliente: 12340 - Nome Cliente Pendente"
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, 1 = erro).
- `ERR_Mensagem` <string> - Em caso de sucesso, contém o ID (string) do novo registro de visita (`REV_ID`). Em caso de erro, contém a mensagem de erro do sistema ou da Stored Procedure.
### Registrar Check-out
**Método:** POST
**URL:** `/api/visitasChekout`
**Descrição:** Finaliza a visita (check-out).
**Parâmetros:**
- `REV_Emp` <int32> - Código da empresa.
- `REV_Loja` <int32> - Código da loja.
- `REV_Cliente` <int32> - Código do cliente.
- `REV_Contrato` <int32> - Número do contrato.
- `REV_Ambientes` <string> - Códigos dos ambientes (separados por vírgula, ex: "AA,AB").
- `REV_TipoVisita` <int32> - Tipo da visita (A API atualmente envia o valor fixo `1` para a Stored Procedure, indicando "Montagem", durante o check-out).
- `REV_CheckOutUsuario` <int32> - Código do usuário que está fazendo o check-out.
- `REV_CheckOutLatitude` <string> - Latitude da localização no momento do check-out.
- `REV_CheckOutLongitude` <string> - Longitude da localização no momento do check-out.
- `REV_CheckOutDevice` <string> - Identificador/nome do dispositivo utilizado.
- `REV_Observacao` <string> - Observações finais da visita (obrigatórias para check-out).
- `REV_ID` <int32> - ID do registro de visita que está sendo finalizado (este ID foi retornado no momento do check-in).
**Exemplo:**
```json
{
"REV_Emp": 116,
"REV_Loja": 2009,
"REV_Cliente": 12345,
"REV_Contrato": 67890,
"REV_Ambientes": "AA,AB",
"REV_TipoVisita": 1, // A API envia este valor fixo para a SP (@REV_TipoVisita = 1)
"REV_CheckOutUsuario": 1,
"REV_CheckOutLatitude": "-19.123456",
"REV_CheckOutLongitude": "-43.123456",
"REV_CheckOutDevice": "iPhone 12",
"REV_Observacao": "Visita finalizada com sucesso. Todas as pendências resolvidas.",
"REV_ID": 98765
}
```
**Response (Sucesso):**
```json
{
"ERR_Codigo": 0,
"ERR_Mensagem": ""
}
```
**Response (Erro):**
```json
{
"ERR_Codigo": 1,
"ERR_Mensagem": "Falha ao registrar o check-out. Detalhes do erro aqui."
}
```
**Propriedades da Resposta:**
- `ERR_Codigo` <int> - Código de erro (0 = sucesso, 1 = erro).
- `ERR_Mensagem` <string> - Mensagem de sucesso (geralmente vazia) ou mensagem de erro detalhada.
:::warning Observações
- O sistema registra automaticamente data, hora e localização do dispositivo
- É necessário permitir acesso à localização do dispositivo
- Visitas podem ser de três tipos: Montagem, AT ou Cliente avulso
- O histórico completo de visitas é mantido no sistema
- Observações são obrigatórias no check-out
- O status da visita é atualizado em tempo real
- Integração com módulo de Gerenciamento de Montagem/AT para registro de ocorrências
- Visitas sem check-out são sinalizadas como pendentes no sistema
:::