Nova Página // TESTE GUSTAVO
setLojaVendaParcelasDOCUMENTAÇÃO TÉCNICA
| Nome do cliente | OSKLEN |
| Nome do projeto | Integração LINX (Venda PDV) |
| Biblioteca / Método | wosk_loja_venda — setLojaVendaParcelas |
| Data | 27/03/2026 |
HISTÓRICO DE VERSÕES
| Data | Versão | Modificado por | Descrição |
| 27/03/2026 | 1.0 | Maykon/Gustavo | Criação da setLojaVendaParcelas alinhada ao modelo de rotina inteligente. |
DESCRIÇÃO
Esta função prepara os dados de uma parcela de pagamento, aplica regras de sobrescrita para identificadores de transação e persiste em LOJA_VENDA_PARCELAS quando a chave da parcela ainda não existe para o caixa da venda. O método não executa UPDATE; o fluxo é de criação condicional com validação pós-insert.
Assinatura do método:
public function setLojaVendaParcelas($params)
Retorno: o próprio array $params recebido, sem alteração de estrutura pelo retorno explícito.
Fluxo: transação de banco comentada no código-fonte (não ativa); try/catch envolve montagem de $_params, consulta prévia por chave, INSERT condicional via sqlPrepareInsert, nova leitura de confirmação ou exceção com prefixo LOJA_VENDA_PARCELAS:.
FONTES
- Origem consultada:
LOJA_VENDA_PARCELAS| Tipo: leitura | Uso: verificar existência porCODIGO_FILIAL,TERMINAL,LANCAMENTO_CAIXAePARCELA. - Origem persistida:
LOJA_VENDA_PARCELAS| Tipo: insert | Uso: inserir parcela quando não encontrada na consulta de pré-validação. - Origem de SQL dinâmico: helper
sqlPrepareInsert(classe base) com hydratehydrateLojaVendaParcelas, permitindoNULLpara colunas não preenchidas eGETDATE()emDATA_PARA_TRANSFERENCIA. Opcionalmente incluiLX_METODO_PGTOno hydrate quando informado.
Consultas
Leitura SQL
Leituras feitas com (sqlSimpleQuery) (classe— base): colunas ['*'], tabela LOJA_VENDA_PARCELAS, condições CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA e PARCELA (esta última com o valor já normalizado em $_params['PARCELA']), sem ordenação, limite TOP 1.
1) Pré-validação (antes do insert): verifica se já existe linha para a chave. Se $_LOJA_VENDA_PARCELAS[0]['PARCELA'] estiver vazio, o fluxo segue para o sqlPrepareInsert.
2) Confirmação pós-insert: mesma assinatura de chamada da consulta anterior; se após o insert ainda não houver PARCELA no retorno, o método lança exceção com a chave na mensagem.
Template gerado por sqlSimpleQuery (forma geral):template:SELECT TOP 1
*
FROM [dbo].[LOJA_VENDA_PARCELAS] (NOLOCK)
WHERE CODIGO_FILIAL = '{CODIGO_FILIAL}'
AND TERMINAL = '{TERMINAL}'
AND LANCAMENTO_CAIXA = '{LANCAMENTO_CAIXA}'
AND PARCELA = '{PARCELA}'Observação:Persistência os(sqlPrepareInsert) valores— dehydrate filtro sãpadrão interpolados na montagem da string SQL conforme a implementação de(sem sqlSimpleQueryLX_METODO_PGTOnadinâmico):
SET base;NOCOUNT nãoON;
sãoINSERT parâmetrosINTO nomeados[dbo].[LOJA_VENDA_PARCELAS] de(
preparedTERMINAL,
statementLANCAMENTO_CAIXA,
nessaCODIGO_FILIAL,
leitura.PARCELA,
CODIGO_ADMINISTRADORA,
TIPO_PGTO,
VALOR,
VENCIMENTO,
NUMERO_TITULO,
MOEDA,
NUMERO_APROVACAO_CARTAO,
PARCELAS_CARTAO,
VALOR_CANCELADO,
CHEQUE_CARTAO,
DATA_PARA_TRANSFERENCIA,
REDE_CONTROLADORA,
TROCO,
DATA_HORA_TEF,
NSU_CANCELAMENTO
)
VALUES (
:TERMINAL,
:LANCAMENTO_CAIXA,
:CODIGO_FILIAL,
:PARCELA,
:CODIGO_ADMINISTRADORA,
:TIPO_PGTO,
:VALOR,
:VENCIMENTO,
:NUMERO_TITULO,
:MOEDA,
:NUMERO_APROVACAO_CARTAO,
:PARCELAS_CARTAO,
:VALOR_CANCELADO,
:CHEQUE_CARTAO,
GETDATE(),
:REDE_CONTROLADORA,
:TROCO,
:DATA_HORA_TEF,
NULL
)
Persistência (sqlPrepareInsert) — hydrate com LX_METODO_PGTO (Omni3):
SET NOCOUNT ON;
INSERT INTO [dbo].[LOJA_VENDA_PARCELAS] (
TERMINAL,
LANCAMENTO_CAIXA,
CODIGO_FILIAL,
PARCELA,
CODIGO_ADMINISTRADORA,
TIPO_PGTO,
VALOR,
VENCIMENTO,
NUMERO_TITULO,
MOEDA,
NUMERO_APROVACAO_CARTAO,
PARCELAS_CARTAO,
VALOR_CANCELADO,
CHEQUE_CARTAO,
DATA_PARA_TRANSFERENCIA,
REDE_CONTROLADORA,
TROCO,
DATA_HORA_TEF,
NSU_CANCELAMENTO,
LX_METODO_PGTO
)
VALUES (
:TERMINAL,
:LANCAMENTO_CAIXA,
:CODIGO_FILIAL,
:PARCELA,
:CODIGO_ADMINISTRADORA,
:TIPO_PGTO,
:VALOR,
:VENCIMENTO,
:NUMERO_TITULO,
:MOEDA,
:NUMERO_APROVACAO_CARTAO,
:PARCELAS_CARTAO,
:VALOR_CANCELADO,
:CHEQUE_CARTAO,
GETDATE(),
:REDE_CONTROLADORA,
:TROCO,
:DATA_HORA_TEF,
NULL,
:LX_METODO_PGTO
)
PARAMETROSPARÂMETROS
Parâmetros de entrada da função:o ($params):TERMINAL, LANCAMENTO_CAIXA, CODIGO_FILIAL, PARCELA, CODIGO_ADMINISTRADORA, NUMERO_TITULO, TIPO_PGTO, VALOR, VENCIMENTO, NUMERO_APROVACAO_CARTAO, PARCELAS, CHEQUE_CARTAO, REDE_CONTROLADORA, TROCO, DATA_HORA_TEF, TXID, ENDTOENDID, LX_METODO_PGTO.
Campos montados em $_params para persistência:ncia:TERMINAL, LANCAMENTO_CAIXA, CODIGO_FILIAL, PARCELA, CODIGO_ADMINISTRADORA, NUMERO_TITULO, TIPO_PGTO, VALOR, VENCIMENTO, MOEDA, NUMERO_APROVACAO_CARTAO, PARCELAS_CARTAO, VALOR_CANCELADO, CHEQUE_CARTAO, REDE_CONTROLADORA, TROCO, DATA_HORA_TEF, LX_METODO_PGTO (quando aplicável).
Campos usados nas condições de busca/validação:o:CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA, PARCELA (valor normalizado em $_params['PARCELA'] na consulta).
TRATAMENTO DE DADOS
PARCELA: normalizada comstr_pad($params['PARCELA'], 2, '0', STR_PAD_LEFT).VALOR,TROCO: normalizados comgetNumericantes da persistência.MOEDA: fixada emR$.VALOR_CANCELADO: fixado em0no insert.CHEQUE_CARTAO: gerado por composição{CODIGO_FILIAL}-{TERMINAL}-{LANCAMENTO_CAIXA}-{PARCELA}; se$params['CHEQUE_CARTAO']vier preenchido, sobrescreve o valor composto.NUMERO_TITULO,NUMERO_APROVACAO_CARTAO: podem ser sobrescritos porTXIDquando informado.NUMERO_APROVACAO_CARTAO: pode ser sobrescrito novamente porENDTOENDIDquando informado.LX_METODO_PGTO: quando preenchido, adiciona dinamicamente a coluna no hydrate ($this->hydrateLojaVendaParcelas[] = 'LX_METODO_PGTO') e entra no insert.- Tratamento de criação vs atualização: este método possui apenas criação condicional (
INSERT) e não possui bloco deUPDATE.
DicionárioCONSULTAS SQL
Leituras feitas com sqlSimpleQuery (classe base): colunas ['*'], tabela LOJA_VENDA_PARCELAS, condições CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA e PARCELA (esta última com o valor já normalizado em $_params['PARCELA']), sem ordenação, limite TOP 1.
- 1) Pré-validação (antes do insert): verifica se já existe linha para a chave. Se
$_LOJA_VENDA_PARCELAS[0]['PARCELA']estiver vazio, o fluxo segue para osqlPrepareInsert. - 2) Confirmação pós-insert: mesma assinatura de
dadoschamada da consulta anterior; se após o insert ainda não houverPARCELAno retorno, o método lança exceção com a chave na mensagem.
Templates SQL indentados: o SELECT de leitura e queryos geradaINSERT gerados pelo hydrate estão na secção FONTES (blocos <pre><code>, mesma formatação do restante do documento).
Observação: os valores de filtro são interpolados na montagem da string SQL conforme a implementação de sqlSimpleQuery na classe base; não são parâmetros nomeados de prepared statement nessa leitura.
DICIONÁRIO DE DADOS E QUERY GERADA
| Campo | Origem | Tratamento aplicado | Operação |
TERMINAL |
$params['TERMINAL'] |
Sem alteração adicional | INSERT |
LANCAMENTO_CAIXA |
$params['LANCAMENTO_CAIXA'] |
Sem alteração adicional | INSERT |
CODIGO_FILIAL |
$params['CODIGO_FILIAL'] |
Sem alteração adicional | INSERT |
PARCELA |
$params['PARCELA'] |
Função str_pad do PHP: preenche à esquerda com '0' até o comprimento 2 (STR_PAD_LEFT), equivalente a str_pad( — ex.: 1 → 01. |
INSERT |
CODIGO_ADMINISTRADORA |
$params['CODIGO_ADMINISTRADORA'] |
Condicional por preenchimento | INSERT |
NUMERO_TITULO |
$params['NUMERO_TITULO'] / $params['TXID'] |
Sobrescrita por TXID quando informado |
INSERT |
TIPO_PGTO |
$params['TIPO_PGTO'] |
Sem alteração adicional | INSERT |
VALOR |
$params['VALOR'] |
Método getNumeric da classe base: normaliza o valor recebido para formato numérico válido na persistência (tratamento de separadores, máscara monetária, etc., conforme a implementação da biblioteca), antes do bind no insert. |
INSERT |
VENCIMENTO |
$params['VENCIMENTO'] |
Sem alteração adicional | INSERT |
MOEDA |
Valor fixo | R$ |
INSERT |
NUMERO_APROVACAO_CARTAO |
$params['NUMERO_APROVACAO_CARTAO'] / $params['TXID'] / $params['ENDTOENDID'] |
Sobrescritas em cascata (TXID e depois ENDTOENDID) | INSERT |
PARCELAS_CARTAO |
$params['PARCELAS'] |
Mapeamento direto | INSERT |
VALOR_CANCELADO |
Valor fixo | 0 |
INSERT |
CHEQUE_CARTAO |
Composição do método / $params['CHEQUE_CARTAO'] |
Composição padrão com sobrescrita opcional | INSERT |
REDE_CONTROLADORA |
$params['REDE_CONTROLADORA'] |
Condicional por preenchimento | INSERT |
TROCO |
$params['TROCO'] |
Mesmo critério de VALOR: getNumeric da classe base para normalizar o valor numérico antes do insert. |
INSERT |
DATA_HORA_TEF |
$params['DATA_HORA_TEF'] |
Condicional por preenchimento | INSERT |
LX_METODO_PGTO |
$params['LX_METODO_PGTO'] |
Inclusão dinâmica no hydrate e no payload | INSERT |
DATA_PARA_TRANSFERENCIA |
Hydrate | GETDATE() |
INSERT |
NSU_CANCELAMENTO |
Não preenchido no fluxo | NULL no insert |
INSERT |
Queries INSERT comindentadas: os dois templates (hydrate padrão (seme variante com LX_METODO_PGTO) anexadoestão emna temposecção de execução):FONTES.
SET NOCOUNT ON; INSERT INTO [dbo].[LOJA_VENDA_PARCELAS] (TERMINAL, LANCAMENTO_CAIXA, CODIGO_FILIAL, PARCELA, CODIGO_ADMINISTRADORA, TIPO_PGTO, VALOR, VENCIMENTO, NUMERO_TITULO, MOEDA, NUMERO_APROVACAO_CARTAO, PARCELAS_CARTAO, VALOR_CANCELADO, CHEQUE_CARTAO, DATA_PARA_TRANSFERENCIA, REDE_CONTROLADORA, TROCO, DATA_HORA_TEF, NSU_CANCELAMENTO) VALUES (:TERMINAL, :LANCAMENTO_CAIXA, :CODIGO_FILIAL, :PARCELA, :CODIGO_ADMINISTRADORA, :TIPO_PGTO, :VALOR, :VENCIMENTO, :NUMERO_TITULO, :MOEDA, :NUMERO_APROVACAO_CARTAO, :PARCELAS_CARTAO, :VALOR_CANCELADO, :CHEQUE_CARTAO, GETDATE(), :REDE_CONTROLADORA, :TROCO, :DATA_HORA_TEF, NULL)INSERT quando $this->hydrateLojaVendaParcelas[] = 'LX_METODO_PGTO' foi aplicado (Omni3):
SET NOCOUNT ON; INSERT INTO [dbo].[LOJA_VENDA_PARCELAS] (TERMINAL, LANCAMENTO_CAIXA, CODIGO_FILIAL, PARCELA, CODIGO_ADMINISTRADORA, TIPO_PGTO, VALOR, VENCIMENTO, NUMERO_TITULO, MOEDA, NUMERO_APROVACAO_CARTAO, PARCELAS_CARTAO, VALOR_CANCELADO, CHEQUE_CARTAO, DATA_PARA_TRANSFERENCIA, REDE_CONTROLADORA, TROCO, DATA_HORA_TEF, NSU_CANCELAMENTO, LX_METODO_PGTO) VALUES (:TERMINAL, :LANCAMENTO_CAIXA, :CODIGO_FILIAL, :PARCELA, :CODIGO_ADMINISTRADORA, :TIPO_PGTO, :VALOR, :VENCIMENTO, :NUMERO_TITULO, :MOEDA, :NUMERO_APROVACAO_CARTAO, :PARCELAS_CARTAO, :VALOR_CANCELADO, :CHEQUE_CARTAO, GETDATE(), :REDE_CONTROLADORA, :TROCO, :DATA_HORA_TEF, NULL, :LX_METODO_PGTO)
Critério de criação: o insert ocorre apenas quando a consulta por CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA e PARCELA não retorna registro.
SITUAÇÕES CONSIDERADAS
| Valor | Significado |
Pré-consulta sem PARCELA no primeiro registro |
Dispara tentativa de INSERT com sqlPrepareInsert; se a linha já existir na prática, a segunda leitura deve encontrá-la e o fluxo não relança insert. |
Pós-insert ainda sem PARCELA na leitura |
Exceção com mensagem contendo CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA e PARCELA e texto NA 'LOJA_VENDA_PARCELAS': NÃO ENCONTRADO. |
TXID informado |
NUMERO_TITULO e NUMERO_APROVACAO_CARTAO recebem o valor de TXID. |
ENDTOENDID informado (após eventual TXID) |
NUMERO_APROVACAO_CARTAO é definido com o valor de ENDTOENDID. |
LX_METODO_PGTO informado |
Hydrate estendido e coluna incluída no INSERT (fluxo Omni3). |