API SRO v3 — Carga de produção int_producao

Hoje Previdência · Backend dotnet_bke · Carga de propostas de produção (REST)

Projeto hojeprev.root
Base path REST /dotnet_bke/api_int_producao
Autenticação JWT Bearer
Content-Type application/json
Procedure dbo.sro_v3_int_producao_api
Chave primária num_proposta
Formato de datas dd/MM/yyyy
Versão doc 2026-06-18
URL base: https://hojeprevidencia-ww1.dynv6.net — backend REST em /dotnet_bke/.

Sumário

  1. Visão geral
  2. Fluxo operacional
  3. Autenticação
  4. Swagger / OpenAPI
  5. Endpoints REST
  6. Campos do payload
  7. Respostas e erros
  8. Exemplos cURL
  9. Operações SQL (DDL / GET)
  10. Arquivos de referência

1. Visão geral

Projeto hojeprev.root · banco HOJE_PREV. A API REST expõe inclusão unitária (add), carga em lote pós-fechamento (add_lote), cancelamento (cancel) e balancete diário (balancete_diario) na tabela dbo.int_producao, utilizada no fluxo de fechamento previdenciário para carga de produção. A carga em lote via arquivo CSV permanece fluxo interno separado (prev_fechamento_carga_int_producao). Cada registro é identificado de forma única pela combinação cpf + num_proposta.

O campo idproposta na API REST é igual a num_proposta (normalizado: UPPER, trim, máx. 30 caracteres). Use o valor retornado no add na rota de cancelamento: POST .../cancel/{idproposta} — ex.: PROP001. O cpf continua obrigatório no payload do add, mas não compõe a chave de unicidade.

2. Fluxo operacional

  1. Durante o dia — enviar propostas uma a uma com POST /add. Cada inclusão usa lote automático INT_PRODUCAO_AAAA_MM_DD (ou TESTE_AAAA_MM_DD com carga_teste: true).
  2. Fim do dia — consultar POST /balancete_diario (informe carga_teste: true se a carga foi de teste) para avisos e checagens.
  3. Após fechar produção — enviar o arquivo completo com POST /add_lote: cabeçalho com grupo_uso, mes_referencia, lote_producao (obrigatório em produção; opcional com carga_teste: true) e array propostas[].
Carga de teste: envie "carga_teste": true no add, balancete_diario ou add_lote. O lote automático passa a ser TESTE_AAAA_MM_DD (ex.: TESTE_2026_06_16), isolado do lote de produção INT_PRODUCAO_AAAA_MM_DD. No add_lote, com carga_teste: true, lote_producao pode ser omitido (gerado pela data de dt_interface) ou informado com prefixo TESTE_.
O add_lote grava todos os itens no mesmo lote_producao (coluna arquivo). Itens válidos são inseridos ou reativados se existirem com status CANCELADO. Itens inválidos retornam engine_status: erro na lista propostas[] sem interromper os demais.

3. Autenticação

Todos os endpoints exigem header HTTP:

Authorization: Bearer <token_jwt>

Obter token

POST https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/login
Content-Type: application/x-www-form-urlencoded

username=<usuario>&password=<senha>&contexto=<contexto_acesso>

O token retornado em engine_data.token (ou estrutura equivalente do login) deve ser enviado nas chamadas à API int_producao.

4. Swagger / OpenAPI

A API está documentada no Swagger UI do dotnet_bke (Swashbuckle), grupo api_int_producao, rótulo Carga int_producao.

RecursoURL
Swagger UI https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/swagger
OpenAPI JSON (spec desta API) https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/swagger/api_int_producao/swagger.json
GET mes_referencia_atual https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/mes_referencia_atual
POST add https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/add
POST add_lote https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/add_lote
POST cancel https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/cancel/{idproposta}
POST balancete_diario https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/balancete_diario

Como testar no Swagger UI

  1. Abra https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/swagger.
  2. No combo superior, selecione Carga int_producao.
  3. Clique em Authorize e informe Bearer <token_jwt> (token do login).
  4. Expanda POST .../add, POST .../add_lote, POST .../cancel ou POST .../balancete_diario, preencha o JSON e execute Try it out.

O schema do body de add corresponde a dotnet_bke.model_engine.TSroV3IntProducaoIn; cancel usa rota POST .../cancel/{idproposta} com body TSroV3IntProducaoCancelIn (somente observacao); balancete_diario usa TSroV3IntProducaoBalanceteDiarioIn (grupo_uso obrigatório; dt_carga opcional); add_lote usa TSroV3IntProducaoAddLoteIn (cabeçalho + propostas[]).

Registro no Swagger: Startup.csSwaggerDoc("api_int_producao") + endpoint na UI. Rebuild do dotnet_bke necessário após deploy.

5. Endpoints REST

GET /api_int_producao/mes_referencia_atual

Mês de referência atual — lê cproc_config.FECHAMENTO_MENSAL_MES_ABERTO (grupo HOJEPREV).

Query obrigatória: ?grupo_uso=HOJEPREV. Use antes do add para saber qual mes_referencia enviar (deve estar no mesmo mês/ano de int_producao_mes_emissao_propostas).

Retorna: mes_referencia_atual, fechamento_mensal_mes_aberto, int_producao_mes_emissao_propostas, int_producao_mes_vigencia_propostas (todos iguais ao fechamento aberto).

POST /api_int_producao/add

Inclusão de novo registro. Falha com erro se já existir registro ativo com o mesmo num_proposta.

Body: JSON com campos descritos na seção 5. Após cada add, a procedure reaplica as checagens de prev_fechamento_carga_int_producao em todo o arquivo do dia.

Controles da carga diária (INT_PRODUCAO_AAAA_MM_DD): cod_plano fixo 01; mesmo fechamento_mensal_mes_aberto entre registros do lote.

POST /api_int_producao/add_lote

Carga em lote pós-fechamento de produção — mesmo tratamento do add, com cabeçalho compartilhado e array de propostas.

Body: JSON com cabeçalho (grupo_uso, mes_referencia, lote_producao obrigatórios; dt_interface opcional) e propostas[] com os campos de proposta (seção 6.2).

Retorna lote_producao, qtd_propostas, qtd_ok, qtd_erro, contadores do lote (qtd_add, qtd_cancel, qtd_ativos) e lista propostas[] com status por item (seq, idproposta, checagem_erro).

Após gravação, reaplica as 5 checagens pós-gravação sobre todo o lote_producao informado.

POST /api_int_producao/balancete_diario

Balancete da carga REST do dia — equivalente ao relatório de fechamento da carga lote.

Body: { "grupo_uso": "HOJEPREV", "dt_carga": "16/06/2026", "carga_teste": false }grupo_uso obrigatório; dt_carga e carga_teste opcionais (default: hoje e produção).

Retorna lote_producao, qtd_add, qtd_cancel, qtd_ativos, qtd_problemas, balancete (por checagem_erro) e lista problemas.

lote_producao corresponde à coluna arquivo em int_producao (ex.: INT_PRODUCAO_2026_06_16).

qtd_add e qtd_cancel acumulam as operações REST do dia (tabela int_producao_api_controle_dia); qtd_ativos é o COUNT de registros não cancelados (checagem_erro sem prefixo CANCELADO) para o arquivo do dia.

POST /api_int_producao/cancel/{idproposta}

Cancelamento da carga de produção: marca o registro em int_producao (checagem_erro = CANCELADO - {observacao}) e atualiza dt_processamento_carga com o momento do cancelamento. O registro permanece na tabela para auditoria.

Rota: idproposta = num_proposta retornado no add (ex.: PROP001).

Body: JSON com único campo observacao (obrigatório — motivo do cancelamento, gravado em checagem_erro).

Falha com not_found se o idproposta não existir; com erro se já cancelado, se observacao estiver vazia ou se a proposta já estiver implantada em PROP (PROPOSTA_JA_IMPLANTADA).

A operação GET (consulta por chave) existe na procedure SQL e no ModelEngine, mas não está exposta como endpoint REST no controller atual. Para consulta, use a procedure diretamente (seção 9) ou solicite inclusão do endpoint GET /api_int_producao/get.

6. Campos do payload (JSON)

6.1 Campos do add (proposta unitária)

Campo JSON Tipo SQL Obrig. Descrição
cpfvarchar(11)Sim*CPF do proponente — 11 dígitos, zero-fill à esquerda (ex.: 00123456789); dado cadastral, não faz parte da chave
num_propostavarchar(30)Sim*Número da proposta — chave primária; retornado como idproposta na API
grupo_usovarchar(20)SimObrigatório — chave em cproc_config para fechamento (ex.: HOJEPREV)
carga_testebooleanNãotrue = lote automático TESTE_AAAA_MM_DD em vez de INT_PRODUCAO_AAAA_MM_DD (default: produção)
mes_referenciasmalldatetimeSimMês/ano da proposta; deve coincidir com int_producao_mes_emissao_propostas atual (consultar GET mes_referencia_atual)
dt_interfacesmalldatetimeNãoData da interface em dd/MM/yyyy; omitir = data atual (somente dia, sem hora)
lote_producaovarchar(100)NãoSomente leitura na resposta — gerado como INT_PRODUCAO_AAAA_MM_DD ou TESTE_AAAA_MM_DD (carga_teste)
cod_planovarchar(10)FixoFixo 01 — não enviar no JSON do add
dt_propostasmalldatetimeSimData da proposta
nomevarchar(80)SimNome do proponente
dt_nascsmalldatetimeSimData de nascimento
rgvarchar(40)SimDocumento de identidade
rg_dtsmalldatetimeSimData de emissão do RG
rg_orgvarchar(40)SimÓrgão emissor
enderecovarchar(150)SimLogradouro
bairrovarchar(80)SimBairro
telefonevarchar(50)SimTelefone
cidadevarchar(60)SimCidade
estadovarchar(2)SimUF
cepvarchar(9)SimCEP
sexovarchar(1)SimM / F
estado_civilvarchar(1)SimCódigo estado civil
profissaovarchar(50)NãoProfissão
emailvarchar(90)SimE-mail (obrigatório)
vl_produtonumeric(9,2)FixoFixo 20.00 — não enviar no JSON
matriculavarchar(15)SimMatrícula
matinstituidorvarchar(15)NãoMatrícula instituidor
tipo_averbacaovarchar(30)SimTexto livre (qualquer tipo de averbação). Enviar sem acentos e sem caracteres estendidos (ASCII); a API aplica UPPER + remove_acento, mas evite símbolos especiais.
codorgaovarchar(20)SimCódigo do órgão
nomeorgaovarchar(80)SimNome do órgão
codupagvarchar(20)SimCódigo UPAG
nomeupagvarchar(80)SimNome UPAG
uf_upagvarchar(2)SimUF da UPAG
cod_produtorvarchar(20)NãoCódigo do produtor — opcional; se não houver, omitir o campo ou enviar vazio ("" / null); gravado como NULL no banco

* Obrigatório no add. A unicidade é por num_proposta (idproposta = num_proposta).

6.2 Campos do add_lote (cabeçalho + array)

Campo JSON Tipo SQL Obrig. Descrição
grupo_usovarchar(20)SimChave em cproc_config para fechamento (ex.: HOJEPREV)
carga_testebooleanNãotrue = lote TESTE_AAAA_MM_DD; lote_producao opcional (auto) ou com prefixo TESTE_
mes_referenciasmalldatetimeSimMês/ano da proposta; deve coincidir com int_producao_mes_emissao_propostas atual (GET mes_referencia_atual)
dt_interfacesmalldatetimeNãoData da interface em dd/MM/yyyy; omitir = data atual (somente dia)
lote_producaovarchar(100)Sim*Identificador do lote (coluna arquivo). Produção: ex. INT_PRODUCAO_2026_06_16. Teste: ex. TESTE_2026_06_16 ou omitir com carga_teste: true
propostasarray JSONSimLista de objetos com os campos da seção 6.1 (cpf, num_proposta, dados cadastrais etc.) — sem repetir grupo_uso, mes_referencia ou lote_producao

* lote_producao obrigatório em carga de produção; com carga_teste: true pode ser omitido (gerado) ou informado com prefixo TESTE_.

Payload do cancel (somente estes campos)

Campo JSON Tipo SQL Obrig. Descrição
observacaovarchar(255)SimÚnico parâmetro do body — motivo do cancelamento; gravado em checagem_erro como CANCELADO - {observacao}. O registro é identificado por idproposta na URL (POST .../cancel/{idproposta}).
dt_processamento_carga (campo interno): preenchido automaticamente no add com o momento da inclusão; no cancel, atualizado para o momento do cancelamento. Retornado nas respostas de ADD e CANCEL (yyyy-MM-dd HH:mm:ss).
Campos internos (não enviar no JSON do add): fechamento_mensal_mes_aberto, int_producao_mes_emissao_propostas, int_producao_mes_vigencia_propostas, cod_plano (sempre 01), lote_producao (coluna arquivo), checagem_erro, dt_processamento_carga, carga_anterior — preenchidos pela API a partir de cproc_config e regras de carga.
tipo_averbacao: aceita qualquer valor descritivo (não há lista fechada). Preferir texto curto em maiúsculas, sem acentos nem caracteres estendidos (ex.: NOVA, PORTABILIDADE, RENOVACAO — não Renovação). Campos de nome/endereço/cidade seguem a mesma recomendação; acentos são removidos na gravação quando remove_acento está disponível no banco.

7. Respostas, normalização e checagens

Normalização automática (ADD)

Antes de gravar, a procedure aplica os mesmos tratamentos de prev_fechamento_carga_int_producao:

Controle da carga do dia

Todos os add do mesmo dia compartilham o mesmo lote (lote_producao / coluna arquivo = INT_PRODUCAO_AAAA_MM_DD). Regras de checagem alinhadas à carga interna:

Checagens pós-gravação (checagem_erro)

checagem_erro e carga_anterior não são parâmetros de entrada — controlados pela API (carga_anterior sempre N; checagens abaixo preenchem checagem_erro na resposta do add).

Idênticas a prev_fechamento_carga_int_producao (UPDATE por arquivo). O registro retorna engine_status: ok; problemas ficam em checagem_erro. Nenhuma checagem rejeita o add.

checagem_erroCondição
NUM_PROPOSTA_DUPLICADOnum_proposta repetido no mesmo arquivo (seq > 1)
NUMERO_PROPOSTA_MAIOR_30num_proposta com mais de 30 caracteres após gravação
PROPOSTA_JA_IMPLANTADACPF + proposta já existem em PROP com mês de fechamento diferente
EMAIL_INVALIDOE-mail não passa em fnAppEmailCheck
VL_CONTRIB_MAIOR_QUE_20vl_produto > 20,00
nullSem problemas detectados

Respostas JSON

engine_statusHTTPSignificado
ok200Operação concluída. ADD retorna idproposta, cpf, num_proposta, lote_producao, dt_processamento_carga; CANCEL retorna idproposta, cpf, num_proposta, checagem_erro, dt_processamento_carga, engine_message: cancelado.
erro200 ou 500Falha de negócio (ex.: registro já existe, proposta implantada, JSON inválido). Ver engine_message.
not_found200GET SQL ou CANCEL: registro inexistente (engine_data null no GET).

Exemplo — sucesso ADD

{
  "engine_status": "ok",
  "idproposta": "PROP001",
  "cpf": "12345678901",
  "num_proposta": "PROP001",
  "lote_producao": "INT_PRODUCAO_2026_06_16",
  "checagem_erro": null,
  "dt_processamento_carga": "2026-06-16 14:23:11",
  "qtd_add": 42,
  "qtd_cancel": 3,
  "qtd_ativos": 39
}

Exemplo — sucesso ADD_LOTE

{
  "engine_status": "ok",
  "lote_producao": "INT_PRODUCAO_2026_06_16",
  "mes_referencia": "01/06/2026",
  "dt_interface": "16/06/2026",
  "qtd_propostas": 2,
  "qtd_ok": 2,
  "qtd_erro": 0,
  "qtd_add": 2,
  "qtd_cancel": 0,
  "qtd_ativos": 2,
  "propostas": [
    { "seq": 1, "cpf": "12345678901", "num_proposta": "PROP001",
      "idproposta": "PROP001", "engine_status": "ok", "checagem_erro": null }
  ]
}

Exemplo — sucesso BALANCETE_DIARIO

{
  "engine_status": "ok",
  "lote_producao": "INT_PRODUCAO_2026_06_16",
  "dt_carga": "16/06/2026",
  "qtd_add": 42,
  "qtd_cancel": 3,
  "qtd_ativos": 39,
  "qtd_problemas": 2,
  "balancete": [
    { "checagem_erro": "OK", "qtd": 37 },
    { "checagem_erro": "EMAIL_INVALIDO", "qtd": 2 }
  ]
}

Exemplo — sucesso com alerta de checagem

{
  "engine_status": "ok",
  "idproposta": "PROP001",
  "checagem_erro": "VL_CONTRIB_MAIOR_QUE_20"
}

Exemplo — GET mes_referencia_atual

{
  "engine_status": "ok",
  "grupo_uso": "HOJEPREV",
  "fechamento_mensal_mes_aberto": "01/06/2026",
  "int_producao_mes_emissao_propostas": "01/06/2026",
  "int_producao_mes_vigencia_propostas": "01/06/2026",
  "mes_referencia_atual": "01/06/2026"
}

Exemplo — erro de negócio (pré-gravação)

{
  "engine_status": "erro",
  "engine_message": "Registro ja existe (num_proposta)"
}

Códigos HTTP do controller

8. Exemplos cURL

8.1 Mes referencia atual (GET)

curl -s -X GET "https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/mes_referencia_atual?grupo_uso=HOJEPREV" \
  -H "Authorization: Bearer <TOKEN>"

8.2 Login

curl -s -X POST "https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/login" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=integracao&password=***&contexto=HOJEPREV"

8.3 Inclusão de teste (ADD + carga_teste)

curl -s -X POST "https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/add" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "grupo_uso": "HOJEPREV",
    "carga_teste": true,
    "cpf": "12345678901",
    "num_proposta": "PROPTEST001",
    "mes_referencia": "01/06/2026",
    "dt_proposta": "15/06/2026",
    "nome": "JOAO DA SILVA",
    "dt_nasc": "01/01/1980",
    "rg": "MG1234567",
    "rg_dt": "01/01/2000",
    "rg_org": "SSP-MG",
    "endereco": "RUA EXEMPLO 100",
    "bairro": "CENTRO",
    "telefone": "31999999999",
    "cidade": "BELO HORIZONTE",
    "estado": "MG",
    "cep": "30100000",
    "sexo": "M",
    "estado_civil": "C",
    "email": "JOAO@EXEMPLO.COM.BR",
    "matricula": "123456",
    "tipo_averbacao": "NOVA",
    "codorgao": "ORG01",
    "nomeorgao": "ORGAO EXEMPLO",
    "codupag": "UP01",
    "nomeupag": "UPAG EXEMPLO",
    "uf_upag": "MG"
  }'

Resposta inclui "lote_producao": "TESTE_2026_06_16" (data do processamento).

8.4 Inclusão (ADD)

curl -s -X POST "https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/add" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "grupo_uso": "HOJEPREV",
    "cpf": "12345678901",
    "num_proposta": "PROP001",
    "mes_referencia": "01/06/2026",
    "dt_proposta": "15/06/2026",
    "nome": "JOAO DA SILVA",
    "dt_nasc": "01/01/1980",
    "rg": "MG1234567",
    "rg_dt": "01/01/2000",
    "rg_org": "SSP-MG",
    "endereco": "RUA EXEMPLO 100",
    "bairro": "CENTRO",
    "telefone": "31999999999",
    "cidade": "BELO HORIZONTE",
    "estado": "MG",
    "cep": "30100000",
    "sexo": "M",
    "estado_civil": "C",
    "email": "JOAO@EXEMPLO.COM.BR",
    "matricula": "123456",
    "tipo_averbacao": "NOVA",
    "codorgao": "ORG01",
    "nomeorgao": "ORGAO EXEMPLO",
    "codupag": "UP01",
    "nomeupag": "UPAG EXEMPLO",
    "uf_upag": "MG"
  }'

8.5 Carga em lote (ADD_LOTE)

curl -s -X POST "https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/add_lote" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "grupo_uso": "HOJEPREV",
    "mes_referencia": "01/06/2026",
    "dt_interface": "16/06/2026",
    "lote_producao": "INT_PRODUCAO_2026_06_16",
    "propostas": [
      {
        "cpf": "12345678901",
        "num_proposta": "PROP001",
        "dt_proposta": "15/06/2026",
        "nome": "JOAO DA SILVA",
        "dt_nasc": "01/01/1980",
        "rg": "MG1234567",
        "rg_dt": "01/01/2000",
        "rg_org": "SSP-MG",
        "endereco": "RUA EXEMPLO 100",
        "bairro": "CENTRO",
        "telefone": "31999999999",
        "cidade": "BELO HORIZONTE",
        "estado": "MG",
        "cep": "30100000",
        "sexo": "M",
        "estado_civil": "C",
        "email": "JOAO@EXEMPLO.COM.BR",
        "matricula": "123456",
        "tipo_averbacao": "NOVA",
        "codorgao": "ORG01",
        "nomeorgao": "ORGAO EXEMPLO",
        "codupag": "UP01",
        "nomeupag": "UPAG EXEMPLO",
        "uf_upag": "MG"
      }
    ]
  }'

8.6 Cancelamento (CANCEL)

curl -s -X POST "https://hojeprevidencia-ww1.dynv6.net/dotnet_bke/api_int_producao/cancel/PROP001" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "observacao": "Cliente desistiu da proposta"
  }'

Exemplo — sucesso CANCEL

{
  "engine_status": "ok",
  "idproposta": "PROP001",
  "cpf": "12345678901",
  "num_proposta": "PROP001",
  "checagem_erro": "CANCELADO - Cliente desistiu da proposta",
  "dt_processamento_carga": "2026-06-16 15:40:02",
  "engine_message": "cancelado"
}

9. Operações SQL (procedure)

Para DBAs e testes diretos no SQL Server. O REST usa internamente OPERACAO = ADD, ADD_LOTE ou CANCEL.

SQL OPERACAO = DDL

Cria tabela int_producao e índices de forma idempotente.

EXEC dbo.sro_v3_int_producao_api
  @__json_data = N'{"OPERACAO":"DDL"}';
GET_MES_REFERENCIA OPERACAO = GET_MES_REFERENCIA (REST: GET mes_referencia_atual)
EXEC dbo.sro_v3_int_producao_api
  @__json_data = N'{"OPERACAO":"GET_MES_REFERENCIA","grupo_uso":"HOJEPREV"}';
BALANCETE_DIARIO OPERACAO = BALANCETE_DIARIO (REST: POST balancete_diario)
EXEC dbo.sro_v3_int_producao_api
  @__json_data = N'{"OPERACAO":"BALANCETE_DIARIO","grupo_uso":"HOJEPREV","dt_carga":"16/06/2026"}';

Balancete e lista de problemas do arquivo INT_PRODUCAO_AAAA_MM_DD. Inclui qtd_add, qtd_cancel e qtd_ativos.

ADD_LOTE OPERACAO = ADD_LOTE (REST: POST add_lote)
EXEC dbo.sro_v3_int_producao_api
  @__json_data = N'{"OPERACAO":"ADD_LOTE","grupo_uso":"HOJEPREV","mes_referencia":"01/06/2026","lote_producao":"INT_PRODUCAO_2026_06_16","propostas":[{"cpf":"12345678901","num_proposta":"PROP001","dt_proposta":"15/06/2026","nome":"JOAO DA SILVA","dt_nasc":"01/01/1980","rg":"MG1234567","rg_dt":"01/01/2000","rg_org":"SSP-MG","endereco":"RUA EXEMPLO 100","bairro":"CENTRO","telefone":"31999999999","cidade":"BELO HORIZONTE","estado":"MG","cep":"30100000","sexo":"M","estado_civil":"C","email":"JOAO@EXEMPLO.COM.BR","matricula":"123456","tipo_averbacao":"NOVA","codorgao":"ORG01","nomeorgao":"ORGAO EXEMPLO","codupag":"UP01","nomeupag":"UPAG EXEMPLO","uf_upag":"MG"}]}';

Carga em lote com cabeçalho compartilhado. Retorna contadores e lista propostas[] com status por item.

CANCEL OPERACAO = CANCEL (REST: POST cancel/{idproposta})
EXEC dbo.sro_v3_int_producao_api
  @__json_data = N'{"OPERACAO":"CANCEL","idproposta":"PROP001","observacao":"Cliente desistiu"}';

Marca checagem_erro e atualiza dt_processamento_carga — não remove o registro. Bloqueia se já existir em PROP.

GET OPERACAO = GET (somente SQL)
EXEC dbo.sro_v3_int_producao_api
  @__json_data = N'{"OPERACAO":"GET","num_proposta":"PROP001"}';

Retorno: engine_status = ok com engine_data (objeto completo) ou not_found.

10. Arquivos de referência no repositório

ArquivoConteúdo
doc/api_int_producao.htmlEsta documentação
bd/areas/hojeprev/procs_sro_v3_int_producao_api.sqlProcedure REST (DDL, ADD, ADD_LOTE, CANCEL, BALANCETE_DIARIO, GET, GET_MES_REFERENCIA)
bd/areas/hojeprev/procs_prev_fechamento_carga_int_producao.sqlCarga batch CSV (fluxo interno) — origem dos tratamentos espelhados na API REST
bd/areas/hojeprev/procs_hojeprev_global_proc_INT_PRODUCAO_INCLUIR.sqlMERGE + integração PROP (frontend interno)
bd/areas/hojeprev/tables_int_producao.sqlDDL tabela int_producao
bd/areas/hojeprev/00_sro-v3-api.sqlÍndice rápido da API
backend/dotnet_bke/Controllers/API_int_producaoController.csEndpoints REST add / add_lote / cancel / balancete_diario / GET mes_referencia_atual
backend/dotnet_bke/model_engine/API_int_producao_ModelEngine.csModelo JSON e montagem do EXEC
backend/dotnet_bke/Startup.csRegistro Swagger (api_int_producao)