Pular para conteúdo

Passo a passo — recriar empresa e lançamentos em outro ambiente

Objetivo: no ambiente destino, montar a mesma estrutura e reimportar os movimentos do ambiente origem, deixando calendário e consolidação prontos.

APIs usadas:

  • masterdata → empresa / opções / calendário
  • moviments → abertura de mês / importação / consolidação

0. Pré-requisitos

  1. Token JWT válido nos dois serviços.
  2. Código da empresa de origem (empresa) e filial (filial, em geral 000000001).
  3. Mês/ano de abertura da empresa (ex.: 01/2024).
  4. Acesso SQL ao banco de origem (somente leitura).
  5. Plano de contas e históricos já existentes no destino (ou iguais ao origem) — o createBranchAndOptions não copia o plano; usa o plano padrão (10).

1. Extrair dados do ambiente origem (SELECT)

1.1 Cadastro da empresa

SELECT * FROM gr_empresa WHERE empresa = :empresa;
SELECT * FROM gr_filial WHERE empresa = :empresa;
SELECT * FROM ct_controle WHERE empresa = :empresa AND filial = :filial;

Anote especialmente em ct_controle:

  • mesanobase / baseYearMonth → data de abertura
  • mesanoatual / currentYearMonth → mês corrente

1.2 Movimentos a recriar

-- Lotes
SELECT * FROM ct_lote
 WHERE empresa = :empresa AND filial = :filial
 ORDER BY ano, mes, lote;

-- Documentos
SELECT d.*
  FROM ct_documentos d
  JOIN ct_lote l ON l.lote_id = d.lote_id
 WHERE l.empresa = :empresa AND l.filial = :filial
 ORDER BY l.ano, l.mes, l.lote, d.docto_id;

-- Lançamentos (com conta reduzida do plano)
SELECT
  l.lote,
  l.ano,
  l.mes,
  e.lancamento,
  e.debcre,
  e.diareferencia,
  e.valor,
  e.cdhistorico,
  e.historico,
  p.cdcontabil AS conta_reduzida,
  pc.cdcontabil AS contrapartida_reduzida
FROM ct_lancamento e
JOIN ct_documentos d ON d.docto_id = e.docto_id
JOIN ct_lote l ON l.lote_id = d.lote_id
JOIN ct_plano p ON p.conta_id = e.conta_id
LEFT JOIN ct_plano pc ON pc.conta_id = e.contrapartida
WHERE l.empresa = :empresa AND l.filial = :filial
ORDER BY l.ano, l.mes, l.lote, e.lancamento, e.debcre;

Não copie ct_calendario, ct_plsaldos, ct_plano_saldo* nem históricos (ct_histo_*) — o destino regenera isso pela API.


2. Criar empresa no destino

API: POST [masterdata]/company

{
  "company": "000003318",
  "fiscalName": "...",
  "communName": "...",
  "typeofCompany": "...",
  "taxId": "...",
  "postalcode": "...",
  "address": "...",
  "number": "...",
  "district": "...",
  "city": "...",
  "stateCode": "...",
  "phone": "...",
  "ibgeCode": "3550308",
  "createBranchAndOptions": true
}

Com createBranchAndOptions = true o sistema cria, entre outras:

  • gr_empresa, gr_filial (000000001)
  • ct_controle, ct_calendario (mês atual)
  • ct_parametro_fundo, ct_conta_patrimonio, ct_controle_cosif, ct_plsaldos

Importante: após criar, a abertura/mês corrente ficam no mês atual do servidor. Ajuste no passo 3.

Garanta também vínculo do usuário à empresa (UserCompanyBranch), senão a consolidação/consulta falha.


3. Definir data de abertura (mês/ano específico)

API:

  • GET [masterdata]/company/options/company/{company}/{branch} → pegar id
  • PUT [masterdata]/company/options/{id}

Ajuste no body (mantenha os demais campos):

  • baseYearMonth = mês de abertura (ex.: "01/2024")
  • currentYearMonth = mesmo valor no início (ex.: "01/2024")
  • balanceYearMonth = "12/AAAA" do ano de abertura (ou alinhado ao origem)

Isso define o ponto inicial do calendário e da consolidação.


4. Abrir calendários do mês de abertura até hoje

Para cada MM/yyyy de baseYearMonth até o mês atual:

Opção A (recomendada — abre mês e avança o corrente)

API: POST [moviments]/monthOpening/{company}/{branch}

{ "newyearmonth": "01/2024" }

Repita avançando: 02/2024, 03/2024, … até o mês atual.

Cada chamada:

  1. Atualiza currentYearMonth em ct_controle
  2. Cria ct_calendario se ainda não existir

Opção B (só garante calendário)

API: GET [masterdata]/calendar/{company}/{branch}/{month}/{year}

Se não existir, cria automaticamente (dias abertos).

Conferência

SELECT empresa, filial, mes, ano, indicador, consolidado, encerrado
  FROM ct_calendario
 WHERE empresa = :empresa AND filial = :filial
 ORDER BY ano, mes;

Os dias dos lançamentos precisam estar com indicador 0 ou * (livres / a processar). Dias 1 (fim de semana) ou 2 (encerrado) bloqueiam importação.


5. Importar movimentos

API: POST [moviments]/importMovimentJson?fileName=RECRIACAO_ORIGEM.json

Montar o JSON a partir dos SELECTs (agrupar por lote → documento → lançamentos):

{
  "company": "000003318",
  "branch": "000000001",
  "lots": [
    {
      "lotCode": "000001",
      "year": "2024",
      "month": "01",
      "documents": [
        {
          "entrys": [
            {
              "entryCode": "00001",
              "movimentDate": "02",
              "typeEntry": "1",
              "debitCredit": "D",
              "contaNo": "123456",
              "history": "1017",
              "historyPattern": "Descrição do histórico",
              "value": 1000.00,
              "conterpartNo": null,
              "conterpartHistory": null,
              "conterpartHistoryPattern": null
            }
          ]
        }
      ]
    }
  ]
}

Regras rápidas

Campo Uso
typeEntry = 1 Lançamento simples (debitCredit = D ou C)
typeEntry = 2 Com contrapartida (debitCredit vazio; preencher conterpartNo)
contaNo Conta reduzida (6 dígitos) — o destino resolve o conta_id
movimentDate Dia (dd)
month / year Do lote

Ordem sugerida: importar mês a mês (do mais antigo ao atual), validando erros de relatório a cada lote.

Tabelas geradas no destino: ct_lote, ct_documentos, ct_lancamento (+ relatório de importação).


6. Processar consolidação

Com calendários abertos e movimentos importados:

API: POST [moviments]/runconsolidation

{
  "fromCompany": "000003318",
  "toCompany": "000003318",
  "fromBranch": "000000001",
  "toBranch": "000000001",
  "month": "08",
  "year": "2026"
}

A consolidação anda a partir do primeiro mês pendente (baseYearMonth → corrente).
Pode ser necessário chamar várias vezes até a mensagem “TUDO CONSOLIDADO…”.

Gera/atualiza saldos (ct_plano_saldo, ct_plano_saldo_dia, etc.) e marca calendário consolidado.


Sequência resumida (checklist)

# Ação Onde
0 Extrair empresa + lotes/docs/lançamentos (SELECT) Banco origem
1 POST /company com createBranchAndOptions: true masterdata
2 Ajustar baseYearMonth / currentYearMonth masterdata PUT /company/options/{id}
3 Abrir todos os meses até hoje (POST /monthOpening/...) moviments
4 Conferir dias livres no calendário SQL ou GET calendar
5 POST /importMovimentJson?fileName=... (mês a mês) moviments
6 POST /runconsolidation (repetir até consolidar) moviments
7 Validar totais vs origem (lotes, débitos/créditos, saldos) SQL / telas

Cuidados

  1. IDs de conta do origem ≠ destino — use sempre conta reduzida (contaNo), não conta_id.
  2. Históricos devem existir em ct_historico no destino.
  3. Não faça INSERT direto em ct_lancamento no destino se o objetivo for reprocessar consolidação via API.
  4. Empresa já existente no destino → use outro código ou limpe o ambiente antes.
  5. Após a recriação, o mês corrente deve terminar no mês atual (POST /monthOpening no mês de hoje).

Referências