Rotina: Recebimento de Mercadoria
Conferência de NF de entrada, confronto com pedido de compra, lançamento em estoque e geração de contas a pagar.
Módulos Delphi
| Arquivo | Papel |
|---|---|
source/MRC001/UMRC001.pas | Listagem de NFs de entrada pendentes de conferência |
source/MRC002/UMRC002.pas | Conferência de NF de entrada (cabeçalho) |
source/MRC002/UdmMRC002.pas | DataModule — queries de conferência |
source/MRC004/UMRC004.pas | Conferência de itens (divergências de quantidade/preço) |
source/MRC007/UMRC007.pas | Devolução de mercadoria a fornecedor |
source/MRC009/UMRC009.pas | Entrada de NF manual (sem pedido de compra) |
source/MRC014/UMRC014.pas | Relatório de entradas por período |
Tabelas do Banco de Dados
CONFERENCIANOTA — Cabeçalho da Conferência
DDL: docs/schema/tables/CONFERENCIANOTA.sql
Chave primária: (CD_EMPRESA, NR_CONFERENCIANOTA)
| Campo | Tipo | Descrição |
|---|---|---|
| NR_CONFERENCIANOTA | INTEGER | Sequencial (PK) |
| NR_PEDIDO | INTEGER | Pedido de compra de origem (FK → PEDIDO) |
| CD_PESSOA | INTEGER | Fornecedor (FK → PESSOA) |
| NR_NOTAFISCAL | INTEGER | Número da NF do fornecedor |
| CD_SERIE | VARCHAR(4) | Série da NF |
| DT_EMISSAO | DATE | Data de emissão da NF |
| DT_ENTRADA | DATE | Data de entrada/recebimento físico |
| VL_NOTA | NUMERIC(15,2) | Valor total da NF |
| VL_FRETE | NUMERIC(15,2) | Frete destacado |
| VL_SEGURO | NUMERIC(15,2) | Seguro |
| VL_OUTRASDESPESAS | NUMERIC(15,2) | Outras despesas |
| VL_DESCONTO | NUMERIC(15,2) | Desconto global |
| VL_IPI | NUMERIC(15,2) | Total de IPI |
| VL_ICMS | NUMERIC(15,2) | Total de ICMS |
| VL_ICMSST | NUMERIC(15,2) | Total de ICMS-ST |
| ST_CONFERENCIA | CHAR(1) | 'A'=Aberta, 'C'=Conferida, 'F'=Finalizada/Lançada |
| CD_USUARIO | VARCHAR(5) | Usuário que conferiu |
| DT_CONFERENCIA | TIMESTAMP | Data/hora da conferência |
| NR_LANCTONOTA | INTEGER | NF lançada no sistema (FK → NOTA) |
| DS_OBSERVACAO | VARCHAR(500) | Observações |
Regra:
ST_CONFERENCIA='F'indica que a NF foi lançada em NOTA e gerou movimentação de estoque e financeiro.
ITEMCONFERENCIANOTA — Itens Conferidos
DDL: docs/schema/tables/ITEMCONFERENCIANOTA.sql
Chave primária: (CD_EMPRESA, NR_CONFERENCIANOTA, NR_ITEM)
| Campo | Tipo | Descrição |
|---|---|---|
| NR_ITEM | INTEGER | Sequencial do item |
| CD_ITEM | INTEGER | Produto (FK → ITEM) |
| CD_ITEM_FORNECEDOR | VARCHAR(30) | Código do produto no fornecedor |
| QT_PEDIDA | NUMERIC(15,5) | Quantidade no pedido de compra |
| QT_NOTA | NUMERIC(15,5) | Quantidade na NF do fornecedor |
| QT_LIDA | NUMERIC(15,5) | Quantidade fisicamente contada |
| VL_UNITARIO | NUMERIC(15,4) | Preço unitário na NF |
| VL_UNITARIO_PEDIDO | NUMERIC(15,4) | Preço unitário no pedido (para confronto) |
| VL_IPI | NUMERIC(15,2) | IPI do item |
| VL_ICMS | NUMERIC(15,2) | ICMS do item |
| VL_ICMSST | NUMERIC(15,2) | ICMS-ST do item |
| PC_DESCONTO | NUMERIC(5,2) | % de desconto no item |
| NR_LOTE | INTEGER | Número do lote (se controle de lote ativo) |
| DT_VALIDADE | DATE | Validade do lote |
| CD_LOCAL | INTEGER | Local de estoque de destino |
| ST_DIVERGENCIA | CHAR(1) | 'S'=Há divergência, 'N'=OK |
MOVTOENTRADA — Histórico de Entradas
DDL: docs/schema/tables/MOVTOENTRADA.sql
| Campo | Tipo | Descrição |
|---|---|---|
| NR_LANCAMENTO | INTEGER | Sequencial (PK) |
| NR_CONFERENCIANOTA | INTEGER | Conferência de origem (FK) |
| NR_LANCTONOTA | INTEGER | NF lançada (FK → NOTA) |
| CD_ITEM | INTEGER | Produto |
| QT_ENTRADA | NUMERIC(15,5) | Quantidade efetivamente entrada |
| VL_CUSTO | NUMERIC(15,4) | Custo unitário calculado |
| DT_ENTRADA | DATE | Data da entrada |
| ST_CANCELAMENTO | CHAR(1) | 'N'=Normal, 'C'=Cancelado |
Tabelas auxiliares no recebimento
| Tabela | Uso |
|---|---|
PEDIDO | Pedido de compra de origem (TP_PEDIDO='E') |
ITEMPEDIDO | Itens do pedido para confronto |
NOTA | NF lançada ao finalizar a conferência |
ITEMNOTA | Itens da NF lançada |
ESTOQUE | Saldo atualizado após entrada |
MOVESTOQUE | Trilha de auditoria da entrada |
CONTAS | Título a pagar gerado (TP_CONTAS='E') |
Parâmetros (PARMFATUR)
| Parâmetro | Tipo | Efeito quando ativo |
|---|---|---|
ST_CONFNOTAENTRADA | S/N | 'S' = conferência obrigatória antes de lançar NF de entrada; 'N' = entrada direta sem conferência |
ST_CONFPRECOQUANTIDADE | S/N | 'S' = alerta ao conferir se preço ou quantidade diverge do pedido |
ST_BLOQCONFNOTA | S/N | 'S' = bloqueia finalização se houver divergência não justificada |
ST_LOCALESTOQUEENTRADA | S/N | 'S' = exige informar local de destino em cada item |
ST_CONFERELOTE | S/N | 'S' = exige número de lote e validade no recebimento |
CD_OPERRECEBTO | INTEGER | Operação de estoque para entrada por recebimento (referência de PARMESTOQUE) |
Stored Procedures Relevantes
FINALIZA_CONFERENCIANOTA
EXECUTE PROCEDURE FINALIZA_CONFERENCIANOTA(
:CD_EMPRESA,
:NR_CONFERENCIANOTA,
:CD_USUARIO
)
Responsável por:
- Validar divergências (se
ST_BLOQCONFNOTA='S'e houver divergência → aborta) INSERT NOTA+INSERT ITEMNOTA— lança a NF no sistemaINSERT MOVESTOQUEpara cada item (CD_OPERACAO = CD_OPERRECEBTO)UPDATE ESTOQUE.QT_ESTOQUE(+= QT_LIDA)- Recalcula
VL_PRECOMEDIO(custo médio ponderado) GRAVA_CONTAS(TP_CONTAS='E')— gera título a pagar para o fornecedor- Atualiza
ITEMPEDIDO.QT_RECEBIDAeST_PEDIDOdo pedido de compra
GRAVA_CONTAS (TP_CONTAS='E')
- Parcela a obrigação conforme
CD_CONDPAGTOda NF INSERT CONTASpara cada parcela (TP_CONTAS='E',ST_CONTAS='T')- Vincula via
CONTASPEDIDO.NR_PEDIDO
Fluxo Completo — Recebimento de Mercadoria
┌──────────────────────────────────────────────────────────┐
│ 1. RECEBIMENTO FÍSICO │
│ Chegada da mercadoria na empresa │
│ Conferente abre CONFERENCIANOTA vinculada ao pedido │
│ ST_CONFERENCIA := 'A' │
│ Informa: NR_NOTAFISCAL, CD_SERIE, DT_EMISSAO │
│ Informa: VL_NOTA, VL_FRETE, VL_IPI, VL_ICMSST │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 2. CONFERÊNCIA DE ITENS (MRC004) │
│ Para cada ITEMCONFERENCIANOTA: │
│ - Lê código de barras ou digita QT_LIDA │
│ - Confronta com QT_PEDIDA e QT_NOTA │
│ - Se ST_CONFPRECOQUANTIDADE='S': │
│ Alerta se VL_UNITARIO != VL_UNITARIO_PEDIDO │
│ - Se divergência: ST_DIVERGENCIA := 'S' │
│ - Se controle de lote: informa NR_LOTE, DT_VALIDADE │
│ ST_CONFERENCIA := 'C' │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 3. TRATAMENTO DE DIVERGÊNCIAS │
│ Se ST_DIVERGENCIA='S' em algum item: │
│ - Usuário pode ajustar QT_LIDA (aceitar NF) │
│ - Ou rejeitar o item (devolução parcial) │
│ - Se ST_BLOQCONFNOTA='S': deve justificar │
│ Aprovação de preço diferente: gera novo VL_UNITARIO │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 4. FINALIZAÇÃO (FINALIZA_CONFERENCIANOTA) │
│ ST_CONFERENCIA := 'F' │
│ INSERT NOTA (TP_NOTA='E') → NR_LANCTONOTA │
│ INSERT ITEMNOTA para cada item │
│ INSERT MOVESTOQUE (entrada, CD_OPERRECEBTO) │
│ UPDATE ESTOQUE (+= QT_LIDA, recalcula VL_PRECOMEDIO) │
│ GRAVA_CONTAS(TP_CONTAS='E') — título a pagar │
│ UPDATE ITEMPEDIDO.QT_RECEBIDA │
│ Se QT_RECEBIDA = QT_PEDIDA: fecha item do pedido │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 5. DEVOLUÇÃO (opcional — MRC007) │
│ Se item rejeitado ou mercadoria com defeito: │
│ INSERT NOTA (TP_NOTA='D') — NF de devolução a forn. │
│ INSERT MOVESTOQUE (saída) — estorna entrada │
│ UPDATE CONTAS — estorna ou reduz título a pagar │
└──────────────────────────────────────────────────────────┘
Entrada sem Pedido (MRC009)
Quando não há pedido de compra:
- Lança NF diretamente via MRC009
ST_CONFNOTAENTRADA='N'→ pula conferência- INSERT NOTA + INSERT MOVESTOQUE diretamente
- Sem confronto com ITEMPEDIDO
Importação de XML NF-e
Quando o fornecedor envia XML da NF-e:
- Sistema lê XML (chave de acesso de 44 dígitos)
- Consulta SEFAZ: valida autenticidade
- Pré-preenche CONFERENCIANOTA com dados do XML
- Conferente valida apenas quantidades físicas
- Divergências de preço são sinalizadas automaticamente
Influências em Outros Módulos
→ Estoque e Movimentação
- Finalização da conferência gera entrada em MOVESTOQUE
UPDATE ESTOQUE.QT_ESTOQUEe recalculaVL_PRECOMEDIO
→ Contas a Pagar
GRAVA_CONTAS(TP_CONTAS='E')gera título(s) a pagar para o fornecedor- Vinculado ao pedido de compra via CONTASPEDIDO
→ Pedido de Venda
- Pedido de compra (
TP_PEDIDO='E') atualizaQT_RECEBIDAem ITEMPEDIDO - Quando todos os itens recebidos:
ST_PEDIDO='A'(atendido)
→ Emissão NF-e
- NF de devolução a fornecedor emite NF-e (TP_NOTA='D') pelo mesmo motor fiscal
- Cancelamento de NF de entrada usa
CANCELA_NOTAFISCAL
→ Fiscal e SPED
- NF de entrada alimenta registros C1xx do SPED Fiscal
- Créditos de ICMS e PIS/COFINS de entrada registrados na apuração