{
  "info": {
    "_postman_id": "a1c00000-0000-4000-8000-000000000001",
    "name": "UY3 — Consignado privado",
    "description": "Collection do modulo Consignado privado (desconto em folha do setor privado) da API de Credito da UY3.\n\nPastas na ordem do fluxo: 1. Cadastros -> 2. Operacao -> 3. Consultas. Dentro de cada pasta, as requisicoes estao na ORDEM em que devem ser chamadas.\n\nATENCAO A ORDEM DOS CADASTROS: a autorizacao de margem vem PRIMEIRO, antes do cadastro do tomador. Ela se identifica por CPF e telefone e nao exige personId. Depois vem a conta de liquidacao (enviada dentro do cadastro do tomador) e por fim o cadastro do tomador.\n\nVariaveis da collection: {{baseUrl}} e {{token}}. A autorizacao Bearer esta no nivel da collection; as requisicoes herdam.\n\nUNIDADES: requestedAmount, requestedValue e campos com sufixo InCents sao INTEIROS EM CENTAVOS. totalValue e dataprev_OriginalMargin sao DECIMAIS EM REAIS. apr e taxa MENSAL em porcentagem.\n\nDATAS: data civil = AAAA-MM-DD. Data e hora = AAAA-MM-DDTHH:MM:SSZ (UTC). Competencia (dataprev_DiscountStartPeriod) = data civil completa com dia, mes e ano, usando o primeiro dia do mes.\n\nTodos os dados de exemplo sao ficticios e mascarados. Nunca substitua por CPF, token ou chave reais em ambiente compartilhado.\n\nDocumentacao: /guia/consignado-privado-visao-geral",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [ { "key": "token", "value": "{{token}}", "type": "string" } ]
  },
  "variable": [
    { "key": "baseUrl", "value": "", "type": "string" },
    { "key": "token", "value": "", "type": "string" },
    { "key": "personId", "value": "11111111-1111-1111-1111-111111111111", "type": "string" },
    { "key": "bankAccountId", "value": "22222222-2222-2222-2222-222222222222", "type": "string" },
    { "key": "productId", "value": "33333333-3333-3333-3333-333333333333", "type": "string" },
    { "key": "creditNoteId", "value": "55555555-5555-5555-5555-555555555555", "type": "string" }
  ],
  "item": [
    {
      "name": "1. Cadastros",
      "description": "Ordem obrigatoria: 2.1 autorizacao de margem -> 2.2 conta de liquidacao -> 2.3 cadastro do tomador. A autorizacao vem primeiro porque nao exige tomador cadastrado. A conta e enviada DENTRO do cadastro do tomador (coleção bankAccounts) — e o caminho recomendado.",
      "item": [
        {
          "name": "2.1 Registrar autorizacao de margem",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"registrationNumber\": \"00000000000\",\n  \"phoneNumber\": \"11900000000\",\n  \"productId\": \"{{productId}}\",\n  \"channel\": \"LinkWeb\",\n  \"acceptanceDate\": \"2026-08-25T14:30:00Z\",\n  \"authorizationLink\": \"https://exemplo.com.br/termo/000123\",\n  \"uY3Origin\": false,\n  \"additionalData\": {\n    \"ip\": \"203.0.113.10\",\n    \"geoLocation\": \"-23.5505,-46.6333\",\n    \"deviceModel\": \"Modelo Exemplo X1\",\n    \"operationalSystem\": \"Android 14\",\n    \"deviceType\": \"mobile\",\n    \"weblinkValidation\": true,\n    \"motherName\": \"MARIA F*** D*** S***\",\n    \"birthDate\": \"1990-01-01\"\n  }\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/DataprevEmployee/AuthorizationMargin",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "DataprevEmployee", "AuthorizationMargin" ]
            },
            "description": "PRIMEIRO PASSO DO FLUXO. Registra o consentimento do trabalhador para consulta de margem.\n\nNao exige personId: identifica-se por CPF e telefone. Isso permite coletar o aceite no funil antes de cadastrar o trabalhador — e evita coletar cadastro completo de quem nao tem margem.\n\nNasce Pending; so Approved habilita a consulta de margem. Se additionalData for enviado, ip/geoLocation/deviceModel passam a ser obrigatorios dentro do objeto.\n\nDoc: /guia/consignado-privado-cadastro-autorizacao"
          },
          "response": []
        },
        {
          "name": "2.1 Listar autorizacoes de margem",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/DataprevEmployee/AuthorizationMargin?registrationNumber=00000000000&status=Approved&page=1&size=10",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "DataprevEmployee", "AuthorizationMargin" ],
              "query": [
                { "key": "registrationNumber", "value": "00000000000" },
                { "key": "status", "value": "Approved" },
                { "key": "page", "value": "1" },
                { "key": "size", "value": "10" }
              ]
            },
            "description": "Confirma se ha autorizacao Approved para o CPF. Chame ANTES DE CADA consulta de margem, nao uma vez so por trabalhador: nao existe campo de expiracao, e a recusa da consulta de margem e o unico sinal de que a autorizacao venceu."
          },
          "response": []
        },
        {
          "name": "2.1 Consultar autorizacao por id",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/DataprevEmployee/AuthorizationMargin/44444444-4444-4444-4444-444444444444",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "DataprevEmployee", "AuthorizationMargin", "44444444-4444-4444-4444-444444444444" ]
            },
            "description": "Autorizacao especifica, com status, acceptanceDate e o nsu (numero sequencial junto ao Credito do Trabalhador). Guarde o nsu para tratativa de suporte."
          },
          "response": []
        },
        {
          "name": "2.3 Criar tomador com a conta de liquidacao",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"registrationNumber\": \"00000000000\",\n  \"name\": \"JOAO D*** S*** SANTOS\",\n  \"email\": \"tomador@exemplo.com.br\",\n  \"phone\": \"11900000000\",\n  \"birthDate\": \"1990-01-01\",\n  \"mothersName\": \"MARIA F*** D*** S***\",\n  \"pep\": false,\n  \"natureOfOccupation\": \"PrivateEmployee\",\n  \"workplace\": \"EMPRESA EXEMPLO LTDA\",\n  \"workplaceCompanyRegistrationNumber\": \"00000000000000\",\n  \"employeeNumber\": \"MAT-000123\",\n  \"admissionDate\": \"2022-03-01\",\n  \"occupation\": \"ANALISTA ADMINISTRATIVO\",\n  \"netSalary\": 4500.00,\n  \"address\": {\n    \"zipCode\": \"00000-000\",\n    \"street\": \"Rua Exemplo\",\n    \"number\": \"100\",\n    \"district\": \"Centro\",\n    \"city\": \"Sao Paulo\",\n    \"state\": \"SP\",\n    \"country\": \"Brasil\"\n  },\n  \"bankAccounts\": [\n    {\n      \"operationTypeValue\": \"Pix\",\n      \"type\": \"NaturalCheckingAccount\",\n      \"pixKeyTypeValue\": \"NaturalRegistrationNumber\",\n      \"keyPix\": \"00000000000\",\n      \"bankCode\": 341,\n      \"jointAccount\": false\n    }\n  ]\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/NaturalPerson?returnValue=true",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "NaturalPerson" ],
              "query": [ { "key": "returnValue", "value": "true" } ]
            },
            "description": "CAMINHO RECOMENDADO: cria o tomador E a conta de liquidacao em uma chamada, pela colecao bankAccounts.\n\nUse o MESMO CPF e o MESMO telefone da autorizacao de margem — e o CPF que amarra as duas coisas, e telefone divergente causa recusa na validacao de identidade.\n\nDois identificadores saem daqui: id da pessoa = personId; id do item de bankAccounts = bankAccountId.\n\nOs campos de vinculo (workplace, workplaceCompanyRegistrationNumber, employeeNumber, admissionDate) sao o que a averbadora usa para localizar o vinculo e reservar margem. Use os valores devolvidos pela consulta de margem.\n\nDoc: /guia/consignado-privado-cadastro-pessoa"
          },
          "response": []
        },
        {
          "name": "2.3 Buscar tomador por CPF",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/NaturalPerson?registrationNumber=00000000000&page=1&size=10",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "NaturalPerson" ],
              "query": [
                { "key": "registrationNumber", "value": "00000000000" },
                { "key": "page", "value": "1" },
                { "key": "size", "value": "10" }
              ]
            },
            "description": "Procura o tomador antes de criar. Se o CPF ja existir visivel ao seu usuario, a criacao ATUALIZA o cadastro e devolve o id existente — nao cria duplicata."
          },
          "response": []
        },
        {
          "name": "2.3 Consultar tomador por id",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/NaturalPerson/{{personId}}",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "NaturalPerson", "{{personId}}" ]
            },
            "description": "Cadastro completo do tomador, incluindo as contas ja cadastradas — use para reaproveitar o bankAccountId em vez de cadastrar conta duplicada."
          },
          "response": []
        },
        {
          "name": "2.2 Cadastrar conta depois (caminho alternativo)",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "[\n  {\n    \"operationTypeValue\": \"Pix\",\n    \"type\": \"NaturalCheckingAccount\",\n    \"pixKeyTypeValue\": \"NaturalRegistrationNumber\",\n    \"keyPix\": \"00000000000\",\n    \"bankCode\": 341,\n    \"jointAccount\": false\n  }\n]",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/NaturalPerson/{{personId}}/BankAccount",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "NaturalPerson", "{{personId}}", "BankAccount" ]
            },
            "description": "Use quando o tomador JA EXISTE — troca ou acrescimo de conta. Para fluxo novo, prefira enviar a conta dentro do cadastro do tomador.\n\nA titularidade e conferida na liquidacao: a chave Pix precisa ser do CPF do tomador. Chave de terceiro devolve a operacao para PaymentRevision depois de ela ja estar assinada e averbada.\n\nDoc: /guia/consignado-privado-cadastro-conta"
          },
          "response": []
        }
      ]
    },
    {
      "name": "2. Operacao",
      "description": "Fluxo principal: margem -> simulacao (dois caminhos possiveis) -> proposta -> operacao -> aprovacao -> assinatura.",
      "item": [
        {
          "name": "Passo 1 — Consultar margem livre",
          "request": {
            "method": "POST",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/DataprevEmployee/FreeMarginQuery?personId={{personId}}&creditProductId={{productId}}",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "DataprevEmployee", "FreeMarginQuery" ],
              "query": [
                { "key": "personId", "value": "{{personId}}" },
                { "key": "creditProductId", "value": "{{productId}}" }
              ]
            },
            "description": "Consulta nova de margem consignavel. Exige autorizacao Approved para o CPF.\n\nUse personId depois do cadastro (forma preferida) ou registrationNumber antes dele — o que permite consultar margem logo apos a autorizacao, sem cadastro.\n\nGuarde do retorno: employeeCode, CNPJ do empregador e o valor da margem. Eles reaparecem na garantia da operacao.\n\nSe responder que nao ha autorizacao valida, colete novo consentimento: e esta recusa, e nao um calculo de prazo do seu lado, que decide se a autorizacao ainda vale."
          },
          "response": []
        },
        {
          "name": "Passo 1 — Historico de consultas de margem",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/DataprevEmployee/FreeMarginQuery?personId={{personId}}",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "DataprevEmployee", "FreeMarginQuery" ],
              "query": [ { "key": "personId", "value": "{{personId}}" } ]
            },
            "description": "Margens ja apuradas, sem gerar consulta nova. Util para nao repetir chamada dentro da janela de cache."
          },
          "response": []
        },
        {
          "name": "Passo 2A — Simular ofertas pela margem total",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"registrationNumber\": \"00000000000\",\n  \"employerRegistrationNumber\": \"00000000000000\",\n  \"employeeCode\": \"MAT-000123\",\n  \"rangeNumberOfPayments\": [12, 24, 36],\n  \"rateMode\": \"MinimumRate\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/Amortization/DataprevEmployeeOffers",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "Amortization", "DataprevEmployeeOffers" ]
            },
            "description": "CAMINHO A da simulacao: responde \"quais condicoes cabem na margem?\". Devolve uma LISTA de ofertas com prazo, parcela, taxa, CET, IOF e o offerRequestId da proposta.\n\nSem valor pedido, a simulacao usa a MARGEM TOTAL disponivel — o maximo que cabe. Para simular abaixo disso, use a requisicao seguinte.\n\nLista apenas produtos com modelo de calculo Price."
          },
          "response": []
        },
        {
          "name": "Passo 2A — Simular ofertas abaixo da margem total (V2)",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"registrationNumber\": \"00000000000\",\n  \"employerRegistrationNumber\": \"00000000000000\",\n  \"employeeCode\": \"MAT-000123\",\n  \"calculateByValue\": \"Liquid\",\n  \"requestedValue\": 300000,\n  \"rangeNumberOfPayments\": [12, 24, 36],\n  \"rateMode\": \"MinimumRate\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/Amortization/DataprevEmployeeOffers",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "Amortization", "DataprevEmployeeOffers" ]
            },
            "description": "SIMULACAO ABAIXO DA MARGEM TOTAL. O trabalhador tem margem para mais, mas quer R$ 3.000,00 liquidos (300000 em CENTAVOS).\n\nComo pedir um valor especifico:\n- valor liquido: calculateByValue=Liquid + requestedValue\n- valor bruto:   calculateByValue=Gross  + requestedValue\n- parcela:       calculateByValue=Payment + rangePaymentAmounts\n\nPor que importa: simular sempre pelo teto empurra o trabalhador para o valor e a parcela maximos. Simular pelo valor pedido e o que permite apresentar a oferta que ele quer contratar.\n\nO valor pedido continua limitado pela margem: pedir mais do que cabe devolve simulacao sem resultado."
          },
          "response": []
        },
        {
          "name": "Passo 2A — Calcular data da primeira parcela",
          "request": {
            "method": "POST",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/DataprevEmployee/FirstPaymentDate?productId={{productId}}&startDate=2026-08-25",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "DataprevEmployee", "FirstPaymentDate" ],
              "query": [
                { "key": "productId", "value": "{{productId}}" },
                { "key": "startDate", "value": "2026-08-25" }
              ]
            },
            "description": "Data da primeira parcela conforme o dia de repasse do produto contratado. Use o retorno em firstPaymentDate na criacao da operacao — nao calcule a data por conta propria.\n\nstartDate no formato data civil (AAAA-MM-DD)."
          },
          "response": []
        },
        {
          "name": "Passo 2B — Simular por amortizacao (plano de pagamento)",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amortizationType\": \"price\",\n  \"requestedAmount\": 500000,\n  \"apr\": 2.15,\n  \"numberOfPayments\": 24,\n  \"firstPaymentDate\": \"2026-10-05T00:00:00Z\",\n  \"startDate\": \"2026-08-25T00:00:00Z\",\n  \"calculationType\": \"V360DiasCorridos\",\n  \"calculateByValueType\": \"Liquid\",\n  \"dueDateOnBusinessDays\": true,\n  \"paymentPeriodicity\": { \"every\": 1, \"periodicity\": \"Monthly\" }\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/Amortization",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "Amortization" ]
            },
            "description": "CAMINHO B da simulacao: responde \"como fica o plano desta condicao que eu ja escolhi?\". Devolve UM plano de pagamento parcela a parcela, com CET, IOF e custo de emissao.\n\nUse quando a condicao ja esta definida — tabela negociada, recontratacao, cliente que ja escolheu. Nao passa pela proposta ao empregador.\n\nO corpo e o MESMO objeto de calculo da criacao da operacao: o que voce simulou e o que voce cria.\n\nAtencao: requestedAmount em CENTAVOS; apr e taxa MENSAL em porcentagem; calculationType e criterio de contagem de dias, nao Price/SAC."
          },
          "response": []
        },
        {
          "name": "Passo 2B — Consultar simulacao gerada",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/Amortization/77777777-7777-7777-7777-777777777777",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "Amortization", "77777777-7777-7777-7777-777777777777" ]
            },
            "description": "Recupera uma simulacao ja gerada, sem simular de novo."
          },
          "response": []
        },
        {
          "name": "Passo 3 — Enviar proposta (sem reforco FGTS)",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"offerRequestId\": 9876543,\n  \"proposalNumber\": \"PROP-000123\",\n  \"expirationDate\": \"2026-09-05T23:59:59Z\",\n  \"installmentCount\": 24,\n  \"installmentAmountInCents\": 28500,\n  \"loanAmountInCents\": 500000,\n  \"releasedAmountInCents\": 487500,\n  \"iofAmountInCents\": 12500,\n  \"monthlyInterestRate\": 2.15,\n  \"yearlyInterestRate\": 29.07,\n  \"contacts\": [ { \"type\": \"Celular\", \"contact\": \"11900000000\" } ]\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/DataprevEmployee/OfferProposals",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "DataprevEmployee", "OfferProposals" ]
            },
            "description": "Envia UMA proposta ao empregador. Só no caminho A (ofertas).\n\nofferRequestId vem da simulacao. Todos os campos com sufixo InCents sao inteiros em CENTAVOS. expirationDate em UTC.\n\nproposalNumber reaparece na garantia da operacao (dataprev_ProposalNumber) — e o que liga as duas pontas."
          },
          "response": []
        },
        {
          "name": "Passo 3 — Enviar propostas (com reforco FGTS)",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "[\n  {\n    \"offerRequestId\": 9876543,\n    \"proposalNumber\": \"PROP-000123\",\n    \"expirationDate\": \"2026-09-05T23:59:59Z\",\n    \"installmentCount\": 24,\n    \"installmentAmountInCents\": 28500,\n    \"loanAmountInCents\": 500000,\n    \"releasedAmountInCents\": 487500,\n    \"iofAmountInCents\": 12500,\n    \"monthlyInterestRate\": 2.15,\n    \"yearlyInterestRate\": 29.07,\n    \"contacts\": [ { \"type\": \"Celular\", \"contact\": \"11900000000\" } ],\n    \"warranty\": {\n      \"hasWarranty\": true,\n      \"fgtsBalanceInCents\": 150000,\n      \"fgtsRescissionPenaltyInCents\": 60000,\n      \"rescissionBenefitPercentage\": 40.0\n    }\n  }\n]",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/DataprevEmployee/OfferProposalsWarranty",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "DataprevEmployee", "OfferProposalsWarranty" ]
            },
            "description": "Lista de propostas com reforco de garantia FGTS (saldo e multa rescisoria). Use quando o produto contratado habilita o reforco.\n\nAqui o FGTS entra como REFORCO da margem consignada — nao e o produto FGTS. Para antecipar saque-aniversario, use a collection do FGTS."
          },
          "response": []
        },
        {
          "name": "Passo 3 — Revalidar oferta de leilao CTPS",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/AuctionCTPS/OfferProposals/9876543/simulation",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "AuctionCTPS", "OfferProposals", "9876543", "simulation" ]
            },
            "description": "Revalida a oferta do leilao: confere expiracao, re-simula e valida a parcela contra a margem ATUAL. Chame quando o empregador abrir o link de contratacao — se a margem caiu desde a proposta, e aqui que isso aparece, antes de a operacao existir."
          },
          "response": []
        },
        {
          "name": "Passo 4 — Criar operacao de credito",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"productId\": \"{{productId}}\",\n  \"personId\": \"{{personId}}\",\n  \"liquidationType\": \"EletronicTransfer\",\n  \"bankAccountId\": \"{{bankAccountId}}\",\n  \"observations\": \"Proposta PROP-000123\",\n  \"amortization\": {\n    \"amortizationType\": \"price\",\n    \"requestedAmount\": 500000,\n    \"apr\": 2.15,\n    \"numberOfPayments\": 24,\n    \"firstPaymentDate\": \"2026-10-05T00:00:00Z\",\n    \"startDate\": \"2026-08-25T00:00:00Z\",\n    \"calculationType\": \"V360DiasCorridos\",\n    \"calculateByValueType\": \"Liquid\",\n    \"dueDateOnBusinessDays\": true,\n    \"paymentPeriodicity\": { \"every\": 1, \"periodicity\": \"Monthly\" }\n  },\n  \"warranty\": [\n    {\n      \"warrantyType\": \"DataprevEmployee\",\n      \"dataprev_EmployeeCode\": \"MAT-000123\",\n      \"dataprev_EmployerRegistrationCode\": 100234,\n      \"dataprev_EmployerName\": \"EMPRESA EXEMPLO LTDA\",\n      \"dataprev_EmployerRegistrationNumber\": \"00000000000000\",\n      \"dataprev_DiscountStartPeriod\": \"2026-10-01\",\n      \"dataprev_EmployeeAdmissionDate\": \"2022-03-01T00:00:00Z\",\n      \"dataprev_OriginalMargin\": 1200.00,\n      \"dataprev_EmployeePositionCBOCode\": 411005,\n      \"dataprev_CtpsDigitalAuthorizationNumber\": \"AUT-000123\",\n      \"dataprev_ProposalNumber\": \"PROP-000123\",\n      \"dataprev_HasWarranty\": true,\n      \"dataprev_WarrantyFgtsBalanceInCents\": 150000,\n      \"dataprev_WarrantyFgtsRescissionPenaltyInCents\": 60000,\n      \"totalValue\": 6840.00\n    }\n  ],\n  \"uploads\": [\n    {\n      \"fileType\": \"Authorization\",\n      \"fileName\": \"autorizacao-margem.pdf\",\n      \"displayName\": \"Autorizacao de margem\",\n      \"documentDate\": \"2026-08-25T00:00:00Z\"\n    }\n  ]\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote?returnValue=true",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote" ],
              "query": [ { "key": "returnValue", "value": "true" } ]
            },
            "description": "Cria a operacao. Guarde o id devolvido em {{creditNoteId}}.\n\nTRES COLECOES no corpo:\n- amortization: o objeto de calculo (modelo price/sac)\n- warranty: os DADOS da garantia de margem (nao e arquivo)\n- uploads: os ARQUIVOS da operacao (termo de autorizacao, instrumento assinado)\n\nDOCUMENTO ASSINADO EM RASCUNHO: se voce ja tem o instrumento assinado, envie um item em uploads com fileType=SignedContract enquanto a operacao esta em Draft. Desde que a colecao nao esteja vazia, ele permanece vinculado e e aproveitado na etapa de assinatura. Nao envie uploads como [] esperando anexar depois — colecao vazia nao reserva lugar.\n\nUNIDADES no mesmo corpo: requestedAmount = 500000 CENTAVOS (R$ 5.000,00); totalValue = 6840.00 REAIS. Trocar as duas passa por todas as validacoes.\n\nCOMPETENCIA: dataprev_DiscountStartPeriod = 2026-10-01 (dia, mes e ano; primeiro dia do mes da competencia). Nao aceita 2026-10.\n\nperiodicidade OBRIGATORIA: every=1, periodicity=Monthly."
          },
          "response": []
        },
        {
          "name": "Passo 5 — Anexar garantia de margem",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"productId\": \"{{productId}}\",\n  \"warranty\": [\n    {\n      \"warrantyType\": \"DataprevEmployee\",\n      \"dataprev_EmployeeCode\": \"MAT-000123\",\n      \"dataprev_EmployerRegistrationCode\": 100234,\n      \"dataprev_EmployerName\": \"EMPRESA EXEMPLO LTDA\",\n      \"dataprev_EmployerRegistrationNumber\": \"00000000000000\",\n      \"dataprev_DiscountStartPeriod\": \"2026-10-01\",\n      \"dataprev_EmployeeAdmissionDate\": \"2022-03-01T00:00:00Z\",\n      \"totalValue\": 6840.00\n    }\n  ]\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/{{creditNoteId}}/warranty",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "{{creditNoteId}}", "warranty" ]
            },
            "description": "Alternativa a enviar a garantia no corpo da criacao. Sem garantia, o envio para aprovacao e recusado: \"E necessario informar ao menos uma garantia\"."
          },
          "response": []
        },
        {
          "name": "Passo 5 — Anexar documentos",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"uploads\": [\n    {\n      \"fileType\": \"Authorization\",\n      \"fileName\": \"autorizacao-margem.pdf\",\n      \"displayName\": \"Autorizacao de margem\",\n      \"documentDate\": \"2026-08-25T00:00:00Z\"\n    },\n    {\n      \"fileType\": \"SignedContract\",\n      \"fileName\": \"instrumento-assinado.pdf\",\n      \"displayName\": \"Instrumento assinado\",\n      \"documentDate\": \"2026-08-25T00:00:00Z\"\n    }\n  ]\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/{{creditNoteId}}/upload",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "{{creditNoteId}}", "upload" ]
            },
            "description": "Documentos da operacao. Permitido nos status Rascunho, Revisao, Aprovacao de Instrumento e Coleta de Assinaturas.\n\nUse fileType=Authorization para o termo de autorizacao de margem e fileType=SignedContract para o instrumento ja assinado. Nao reenvie o mesmo documento em cada etapa: ele permanece, e reenviar gera duplicata no dossie."
          },
          "response": []
        },
        {
          "name": "Passo 6 — Enviar para aprovacao",
          "request": {
            "method": "POST",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/{{creditNoteId}}/submitapproval",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "{{creditNoteId}}", "submitapproval" ]
            },
            "description": "Inicia a esteira. Depois do envio a operacao nao aceita alteracao ate o fim da analise — reenviar devolve 409."
          },
          "response": []
        },
        {
          "name": "Passo 7 — URLs de assinatura",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/{{creditNoteId}}/SignUrl",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "{{creditNoteId}}", "SignUrl" ]
            },
            "description": "URLs de coleta de assinatura, para entregar ao tomador. Disponiveis a partir do status Signatures. Antes disso, a resposta vem vazia — nao e erro."
          },
          "response": []
        },
        {
          "name": "Passo 8 — Encerrar revisao de garantia",
          "request": {
            "method": "POST",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/{{creditNoteId}}/doneWarrantyRevision",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "{{creditNoteId}}", "doneWarrantyRevision" ]
            },
            "description": "Encerra a revisao de garantia depois de corrigir o que a mesa apontou. Use quando a operacao estiver em WarrantyRevision."
          },
          "response": []
        },
        {
          "name": "Passo 9 — Cancelar operacao",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"message\": \"Desistencia do tomador\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/{{creditNoteId}}/cancel",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "{{creditNoteId}}", "cancel" ]
            },
            "description": "Acao unica, sem parametros de controle: o tratamento da reserva de margem faz parte do processamento do cancelamento pela esteira.\n\nACOMPANHE ATE Canceled. O cancelamento nao e instantaneo; se a operacao ja estava averbada, a liberacao da margem faz parte do processamento. So contrate de novo para o mesmo trabalhador depois desse status — antes, a margem pode ainda estar comprometida."
          },
          "response": []
        }
      ]
    },
    {
      "name": "3. Consultas",
      "description": "Acompanhamento por consulta. Nao ha webhook de saida nesta API — ver /guia/consignado-privado-eventos.",
      "item": [
        {
          "name": "Consultar operacao por id",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/{{creditNoteId}}",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "{{creditNoteId}}" ]
            },
            "description": "Operacao completa: status, calculo, garantia, documentos, assinaturas e cronograma. O campo status e o \"evento\" atual — e o que dispara a sua maquina de estados.\n\nDoc: /guia/consignado-privado-consultas e /guia/consignado-privado-eventos"
          },
          "response": []
        },
        {
          "name": "Listar operacoes por status",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote?status=Warranty&page=1&size=50&orderBy=createDate desc",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote" ],
              "query": [
                { "key": "status", "value": "Warranty" },
                { "key": "page", "value": "1" },
                { "key": "size", "value": "50" },
                { "key": "orderBy", "value": "createDate desc" }
              ]
            },
            "description": "Varredura da fila de uma etapa. Base do acompanhamento: varra os estados em que voce tem operacoes abertas, compare com o ultimo status conhecido e reaja so as diferencas.\n\nEstados que exigem acao sua: Draft, WarrantyRevision, Signatures, PaymentRevision (mais Revision e Disapproved, se o seu processo trata). Todo o resto e espera."
          },
          "response": []
        },
        {
          "name": "Listar operacoes do tomador",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote?personId={{personId}}&page=1&size=50",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote" ],
              "query": [
                { "key": "personId", "value": "{{personId}}" },
                { "key": "page", "value": "1" },
                { "key": "size", "value": "50" }
              ]
            },
            "description": "Todas as operacoes de um tomador. Use para conferir se ha operacao anterior ainda em processamento antes de recontratar."
          },
          "response": []
        },
        {
          "name": "Comprovante de transferencia",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/{{creditNoteId}}/transferReceipt",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "{{creditNoteId}}", "transferReceipt" ]
            },
            "description": "Comprovante da transferencia (Pix/TED) feita ao tomador. Disponivel a partir da liquidacao."
          },
          "response": []
        },
        {
          "name": "Calendario de quitacao",
          "request": {
            "method": "POST",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/{{creditNoteId}}/DuePaymentSchedule",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "{{creditNoteId}}", "DuePaymentSchedule" ]
            },
            "description": "Calendario de quitacao: o que o tomador deve para liquidar antecipadamente em uma data."
          },
          "response": []
        },
        {
          "name": "Exportar carteira em Excel",
          "request": {
            "method": "GET",
            "header": [ { "key": "Accept", "value": "application/json" } ],
            "url": {
              "raw": "{{baseUrl}}/v1/CreditNote/Export/excel?productId={{productId}}",
              "host": [ "{{baseUrl}}" ],
              "path": [ "v1", "CreditNote", "Export", "excel" ],
              "query": [ { "key": "productId", "value": "{{productId}}" } ]
            },
            "description": "Exportacao da carteira filtrada, para conciliacao periodica. Nao use para acompanhar operacao individual."
          },
          "response": []
        }
      ]
    }
  ]
}
