Seu Template de Dados de Processamento de Pagamentos do Contas a Pagar
Seu Template de Dados de Processamento de Pagamentos do Contas a Pagar
- Campos de dados essenciais para Sage Intacct
- Marcos de processo padronizados
- Instruções específicas de extração
Atributos de Processamento de Pagamentos de Contas a Pagar
| Nome | Descrição | ||
|---|---|---|---|
| Event Timestamp EventTime | A data e hora específicas em que uma atividade ocorreu. | ||
| Descrição Este atributo registra o momento exato de um evento. É a base para todos os cálculos de tempo, incluindo Tempo Médio de Ciclo da Fatura e Duração Média da Aprovação. Timestamps precisos são críticos para identificar gargalos no dashboard de Desempenho do Workflow de Aprovação. Por que é importante Necessário para sequenciar eventos e calcular a duração entre as etapas do processo. Onde obter Timestamps de criação ou modificação de transação nas tabelas de origem Exemplos 2023-10-12T08:30:00Z2023-10-12T14:45:12Z2023-10-15T09:15:00Z | |||
| Nome da Atividade ActivityName | A ação ou evento específico que ocorre no ciclo de vida da fatura. | ||
| Descrição Este atributo captura o nome da etapa realizada, como 'Invoice Created', 'Invoice Approved' ou 'Payment Posted'. É essencial para reconstruir o fluxo do processo e visualizar a sequência de eventos no dashboard de Distribuição do Tempo de Ciclo de Ponta a Ponta. Por que é importante Define as etapas no mapa do processo e é obrigatório para qualquer análise de Process Mining. Onde obter Logs de trilha de auditoria ou tabelas de histórico de transações do sistema Exemplos Rascunho da Fatura CriadoFatura AprovadaPagamento Gerado | |||
| Número da fatura InvoiceNumber | O identificador único do documento de fatura do fornecedor. | ||
| Descrição O Número da Fatura serve como o identificador de caso definitivo para este processo. Ele agrupa de forma única todos os eventos de uma única fatura de fornecedor, permitindo uma análise completa da sua jornada, do recebimento à liquidação. No Sage Intacct, isso geralmente corresponde ao Document Number ou Record Number no objeto AP Bill. Por que é importante É a chave fundamental para vincular todas as atividades do processo a uma única instância de caso. Onde obter Objeto Sage Intacct AP Bill, campo DOCNUMBER ou RECORDNO Exemplos INV-2023-001988722-AFEB-23-991 | |||
| Sistema de Origem SourceSystem | O nome do sistema onde o evento se originou. | ||
| Descrição Este atributo identifica a origem dos dados, que geralmente é 'Sage Intacct'. Se as faturas vierem de ferramentas de OCR ou plataformas de compras externas, este campo ajuda a diferenciar as fontes na Visão Geral de Conformidade e Risco. Por que é importante Garante a rastreabilidade da linhagem de dados, especialmente em ambientes multi-sistema. Onde obter Fixado durante a extração ou derivado das configurações de conexão Exemplos Sage IntacctBill.comExpensify | |||
| Última Atualização de Dados LastDataUpdate | O timestamp de quando o registro foi extraído ou atualizado pela última vez. | ||
| Descrição Este atributo rastreia quando os dados foram sincronizados pela última vez. Ajuda a entender a atualidade das informações em dashboards como Otimização de Lote de Pagamento e garante que a análise reflita o estado mais recente do Contas a Pagar. Por que é importante Campo técnico necessário para cargas incrementais e verificações de atualização de dados. Onde obter Hora do sistema no momento da extração dos dados Exemplos 2023-11-01T12:00:00Z2023-11-02T01:00:00Z | |||
| Criado pelo Usuário CreatedBy | O ID de usuário de quem inseriu a fatura. | ||
| Descrição Este atributo identifica o iniciador do caso. É usado na análise de Intervenções Manuais e Touchpoints para identificar necessidades de treinamento de usuários específicos que frequentemente precisam corrigir dados ou geram duplicatas. Por que é importante Permite a análise de desempenho de recursos e identifica oportunidades de treinamento. Onde obter Objeto Sage Intacct AP Bill, campo CREATEDBY Exemplos jsmithap_automation_botmdoe | |||
| Data da Fatura InvoiceDate | A data em que a fatura foi emitida pelo fornecedor. | ||
| Descrição Este atributo reflete a data do documento na fatura física. É usado com a Data de Pagamento para calcular o Tempo de Ciclo de Ponta a Ponta. Grandes lacunas entre a Data da Fatura e a data de entrada podem indicar atrasos no recebimento ou digitalização. Por que é importante O ponto de partida para a análise de aging e cálculos de prazos de pagamento. Onde obter Objeto Sage Intacct AP Bill, campo WHENTOCREATE ou DATECREATED Exemplos 2023-10-012023-10-05 | |||
| Data de Pagamento PaymentDate | A data em que o pagamento foi executado. | ||
| Descrição Este atributo registra o timestamp final da liquidação financeira. É usado para calcular o tempo de ciclo e é comparado com a Data de Vencimento para o KPI de Percentual de Pagamento em Dia. Por que é importante Marca a conclusão do ciclo principal do processo. Onde obter Sage Intacct AP Payment Detail, campo WHENPAID Exemplos 2023-11-052023-11-10 | |||
| Data de Vencimento DueDate | O prazo contratual para o pagamento. | ||
| Descrição Este atributo indica quando o pagamento deve ser feito para evitar multas. É o denominador do KPI de Percentual de Pagamento em Dia. Analisar pagamentos feitos após esta data revela falhas de conformidade e riscos de danos na relação com fornecedores. Por que é importante Base de referência para determinar o desempenho de pontualidade e aderência ao SLA. Onde obter Objeto Sage Intacct AP Bill, campo WHENDUE Exemplos 2023-11-012023-11-15 | |||
| Departamento Department | O departamento interno responsável pela despesa. | ||
| Descrição Este atributo categoriza a fatura por centro de custo ou função de negócio. Ele alimenta o dashboard de Análise de Variação de Processo, destacando quais departamentos sofrem com atrasos na aprovação ou altas taxas de retrabalho em relação à média. Por que é importante Permite o detalhamento organizacional (drill-down) e análise de causa raiz. Onde obter Objeto Sage Intacct AP Bill, campo DEPTID ou DEPTNAME Exemplos Serviços de TIMarketingOperações | |||
| Nome do Fornecedor VendorName | O nome do fornecedor ou prestador de serviço que emitiu a fatura. | ||
| Descrição Este atributo identifica a entidade externa a quem o pagamento é devido. É a dimensão principal do dashboard de Previsibilidade de Pagamento ao Fornecedor, permitindo agrupar métricas por fornecedor e identificar relações de alto risco ou toques manuais frequentes. Por que é importante Essencial para segmentar a análise por desempenho e comportamento do fornecedor. Onde obter Objeto Sage Intacct AP Bill, campo VENDORNAME Exemplos Acme CorpGlobal Services IncOffice Depot | |||
| Número do Pedido de Compra PurchaseOrderNumber | O número de referência do pedido de compra relacionado. | ||
| Descrição Este atributo vincula a fatura a um documento de compra anterior. É o motor principal do dashboard de Eficiência de Three Way Match e da análise de Conformidade de PO e Gastos sem PO. Casos com valor nulo aqui indicam gastos fora do pedido de compra. Por que é importante Distingue faturas baseadas em pedidos (PO) de faturas sem pedidos para análise de conformidade. Onde obter Objeto Sage Intacct AP Bill, campo PONUMBER ou link de documento relacionado Exemplos PO-9912PO-1002nulo | |||
| Status da Fatura InvoiceStatus | O estado atual do ciclo de vida da fatura no sistema. | ||
| Descrição Este atributo reflete o status atual no sistema (ex: Lançado, Pago, Rascunho). Ajuda a filtrar o conjunto de dados entre casos ativos e concluídos no dashboard de Distribuição do Tempo de Ciclo de Ponta a Ponta. Por que é importante Identifica rapidamente o estado do caso. Onde obter Objeto Sage Intacct AP Bill, campo STATE Exemplos LançadoPagoRascunhoPago Parcialmente | |||
| Valor da Fatura InvoiceAmount | O valor monetário total da fatura. | ||
| Descrição Este atributo representa a obrigação financeira total do caso. É usado no dashboard de Detecção de Envios Duplicados para identificar faturas com valores e IDs de fornecedores idênticos. Também permite filtrar a análise por transações de alto versus baixo valor. Por que é importante Essencial para análise de impacto financeiro e pontuação de risco. Onde obter Objeto Sage Intacct AP Bill, campo TOTALENTERED ou TOTALDUE Exemplos 1500.00250.5010000.00 | |||
| Baseado em PO IsPOBacked | Flag indicando se a fatura está associada a um Pedido de Compra. | ||
| Descrição Este atributo identifica se a fatura seguiu os procedimentos padrão de compras. É o filtro principal para o KPI de Taxa de Conformidade de Pedidos de Compra e ajuda a separar gastos avulsos (ad-hoc) de gastos gerenciados. Por que é importante Diferencial fundamental para análise de caminhos de processo. Onde obter Calculado: PurchaseOrderNumber não é nulo Exemplos verdadeirofalse | |||
| Condições de Pagamento PaymentTerms | As condições acordadas para prazos de pagamento e descontos. | ||
| Descrição Este atributo descreve a regra usada para calcular a data de vencimento e a data de desconto (ex: Net 30, 2/10 Net 30). É vital para o dashboard de Análise de Desconto por Antecipação identificar quais faturas eram elegíveis para economias que foram perdidas. Por que é importante Contexto para análise de estratégias de fluxo de caixa e oportunidades de descontos perdidas. Onde obter Objeto Sage Intacct AP Bill, campo TERMNAME Exemplos Líquido 30Vencimento no Recebimento2/10 Líquido 30 | |||
| Pago com Atraso IsPaidLate | Flag indicando se a data de pagamento excedeu o vencimento. | ||
| Descrição Este atributo booleano é calculado comparando a Data de Pagamento com a Data de Vencimento. Serve como filtro direto para o KPI de Percentual de Pagamento em Dia e ajuda a isolar casos problemáticos no dashboard de Previsibilidade de Pagamento ao Fornecedor. Por que é importante Simplifica a filtragem de violações de SLA. Onde obter Calculado: PaymentDate > DueDate Exemplos verdadeirofalse | |||
| Status de Retenção HoldStatus | Indica se a fatura está atualmente em retenção de pagamento. | ||
| Descrição Este atributo sinaliza casos suspensos do processamento de pagamento. Ele alimenta o dashboard Monitor de Impacto de Bloqueio de Pagamento, identificando casos travados em estado de bloqueio. Por que é importante Identifica gargalos imediatos que exigem intervenção. Onde obter Objeto Sage Intacct AP Bill, campo ONHOLD Exemplos verdadeirofalse | |||
| Tempo de Ciclo (Dias) CycleTimeDays | O número de dias desde o recebimento da fatura até o pagamento. | ||
| Descrição Esta métrica quantifica a velocidade do processo para cada caso. Alimenta diretamente o KPI de Tempo Médio de Ciclo da Fatura e permite a análise de histogramas no dashboard de Distribuição do Tempo de Ciclo de Ponta a Ponta. Por que é importante Métrica padrão de desempenho para eficiência. Onde obter Calculado: Dias entre InvoiceDate e PaymentDate Exemplos 15.530.05.2 | |||
| Unidade de Negócio BusinessUnit | A entidade legal ou localidade associada à fatura. | ||
| Descrição Este atributo diferencia subsidiárias ou localidades. É crucial para a Visão Geral de Conformidade e Risco para comparar a aderência ao processo entre diferentes entidades geográficas ou legais da organização. Por que é importante Essencial para benchmarks entre várias entidades. Onde obter Objeto Sage Intacct AP Bill, campo LOCATIONID ou ENTITY Exemplos USA-HQEMEA-LondonAPAC-Singapore | |||
Atividades de Processamento de Pagamentos de Contas a Pagar
| Atividade | Descrição | ||
|---|---|---|---|
| Fatura Aprovada | Uma ação de aprovação distinta registrada no workflow de aprovação designado. Isso indica que um usuário com autoridade suficiente autorizou o pagamento da fatura. | ||
| Por que é importante Crítico para o KPI de 'Duração Média de Aprovação' e para identificar gargalos na assinatura da gestão. Onde obter Consulte o log 'Examine Approval History' associado à AP Bill para encontrar ações 'Approved'. Captura Registrado quando a ação de aprovação é executada Tipo de evento explicit | |||
| Fatura Correspondida ao PO | Identifica quando uma fatura de fornecedor é criada ao converter ou vincular um Pedido de Compra ou Recebimento. Esta atividade valida a eficiência do three-way match. | ||
| Por que é importante Fundamental para o KPI de 'Taxa de Match de Primeira Passagem' e para determinar a conformidade de pedidos versus gastos sem pedido (non-PO). Onde obter Verifique o objeto APBILL para um valor não nulo nos campos 'createdfrom' ou 'source_id', indicando vinculação a uma transação de Compras. Captura Comparar Record ID com ID da Transação de Origem Tipo de evento inferred | |||
| Fatura encaminhada | A transição da fatura do status Rascunho para Enviado, acionando o workflow de aprovação. Isso marca o fim da entrada de dados e o início do ciclo de aprovação. | ||
| Por que é importante Essencial para segmentar a duração de 'Entrada de Dados' da duração de 'Aprovação' na análise de tempo de ciclo. Onde obter Inferir a partir do audit trail do APBILL onde o campo State muda de 'Draft' para 'Submitted' ou 'Pending Approval'. Captura Comparar campo de status antes/depois Tipo de evento inferred | |||
| Fatura Lançada | O ponto em que a fatura é lançada no Razão Geral. Em sistemas sem workflows de aprovação, isso pode ocorrer simultaneamente ao envio. | ||
| Por que é importante Indica que a obrigação financeira está oficialmente reconhecida nos livros contábeis. Onde obter Consulte a trilha de auditoria da APBILL para a alteração de status para 'Posted'. Captura Registrado quando a transação é lançada no razão Tipo de evento explicit | |||
| Pagamento Gerado | A criação do registro de Pagamento (Cheque, ACH, EFT) vinculado à fatura. É o momento em que a transferência de fundos é iniciada no sistema. | ||
| Por que é importante O timestamp principal para o 'Tempo Médio de Ciclo da Fatura' e 'Percentual de Pagamento em Dia'. Onde obter Identifique a criação de um registro APPYMT vinculado ao APBILL. Use a data de criação do objeto de pagamento. Captura Registrado quando o registro APPYMT é criado Tipo de evento explicit | |||
| Rascunho da Fatura Criado | A criação inicial do registro AP Bill no Sage Intacct, geralmente no status de Rascunho. Captura o ponto de entrada dos dados da fatura antes dos workflows de aprovação ou lançamento. | ||
| Por que é importante Estabelece o timestamp inicial para o tempo de ciclo do processo e identifica o início do registro da obrigação. Onde obter Consulte a trilha de auditoria do objeto APBILL para a ação 'Create' ou o timestamp inicial da criação do registro. Captura Registrado quando o registro APBILL é criado pela primeira vez Tipo de evento explicit | |||
| Fatura Atualizada | Registra modificações no cabeçalho ou itens da fatura após a criação inicial. Uma alta frequência desta atividade indica retrabalho manual ou erros de extração de dados. | ||
| Por que é importante Essencial para calcular a 'Taxa de Processamento Sem Toque' e identificar loops ineficientes de correção manual de dados. Onde obter Consulte o histórico de auditoria da APBILL para ações 'Update' realizadas por um usuário antes do lançamento. Captura Registrado quando a transação é modificada Tipo de evento explicit | |||
| Fatura Colocada em Retenção | A aplicação de um bloqueio de pagamento ou status 'Em Espera' na fatura. Isso impede que a fatura seja selecionada para processamento. | ||
| Por que é importante Impacta diretamente o 'Tempo de Resolução de Bloqueio de Pagamento' e visualiza atrasos no pipeline de pagamento. Onde obter Inferir a partir do audit trail do APBILL onde o booleano 'On Hold' ou o campo de status muda para verdadeiro. Captura Comparar campo de status antes/depois Tipo de evento inferred | |||
| Fatura Liberada da Retenção | A remoção do bloqueio de pagamento, permitindo que a fatura siga para a seleção. Isso marca a resolução da disputa ou problema. | ||
| Por que é importante Marca o fim de um período de gargalo e a retomada do fluxo padrão do processo. Onde obter Inferir a partir do audit trail do APBILL onde o booleano 'On Hold' ou o campo de status muda para falso. Captura Comparar campo de status antes/depois Tipo de evento inferred | |||
| Fatura Recusada | Registra quando um aprovador rejeita a fatura, retornando-a para o status de Rascunho ou parcialmente aprovada. Isso indica um loop no processo ou problema de qualidade dos dados. | ||
| Por que é importante Destaca pontos de fricção no workflow e contribui para as métricas de retrabalho. Onde obter Consulte o log 'Examine Approval History' associado à AP Bill para ações 'Declined' ou 'Rejected'. Captura Registrado quando a ação de recusa é executada Tipo de evento explicit | |||
| Fatura Selecionada para Pagamento | A inclusão da fatura em um lote de pagamento ou rodada de seleção. O status geralmente muda para 'Selecionado', bloqueando-a para outras rodadas. | ||
| Por que é importante Analisa a 'Otimização de Lote de Pagamento' e o intervalo entre a decisão de pagar e a emissão real do pagamento. Onde obter Inferir a partir da mudança de status do APBILL para 'Selected' ou equivalente por meio da ação na tela 'Pay Bills'. Captura Comparar campo de status antes/depois Tipo de evento inferred | |||
| Pagamento Anulado | O cancelamento de um pagamento gerado anteriormente. Isso reabre a obrigação da fatura e exige que o processo de pagamento recomece. | ||
| Por que é importante Identifique falhas graves no processo posterior, onde pagamentos são gerados, mas retirados. Onde obter Consulte o objeto APPYMT para o status 'Void' ou 'Voided' e o timestamp correspondente. Captura Registrado quando ocorre uma transação de anulação Tipo de evento explicit | |||
| Pagamento Conciliado | A confirmação de que o pagamento foi compensado pelo banco, marcada durante o processo de conciliação bancária no Cash Management. | ||
| Por que é importante Fornece o 'Tempo de Ciclo de Ponta a Ponta' sob a perspectiva do fluxo de caixa, confirmando que os fundos realmente saíram da conta. Onde obter Verifique o status de Reconciliação ou o campo 'Cleared Date' no objeto APPYMT ou na transação vinculada de Cash Management. Captura Comparar status de reconciliação Tipo de evento inferred | |||
Guias de Extração
Etapas
Preparar a Visualização de Faturas de CP Faça login no Sage Intacct e navegue até Contas a Pagar > aba Todos > Faturas. Selecione 'Criar Nova Visualização'. Nomeie a visualização como 'Process Mining - Extração de Faturas'. Selecione as seguintes colunas em ordem: Número da Fatura (Doc Number), Nome do Fornecedor, Data de Criação, Data de Lançamento, Data de Vencimento, Valor Total, Status (State), Moeda, Número do Pedido (PO), Departamento, Criado Por, Em Espera (On Hold), Descrição, Nº do Registro (ID do Sistema). Defina filtros para excluir faturas em 'Rascunho' se quiser apenas dados lançados, ou deixe aberto para capturar o ciclo completo. Garanta que o intervalo de datas cubra seu período de análise (ex: Data de Criação = Últimos 365 dias). Salve a visualização.
Exportar Dados de Faturas de CP Abra a visualização 'Process Mining - Extração de Faturas'. Clique no botão 'Exportar' e selecione o formato 'CSV'. Salve o arquivo como 'AP_Bills.csv'.
Preparar a Visualização de Pagamentos Lançados Navegue até Contas a Pagar > aba Todos > Pagamentos Lançados. Crie uma nova visualização chamada 'Process Mining - Pagamentos'. Selecione as colunas: Número do Cheque/Pagamento, Data do Pagamento, Nome do Fornecedor, Valor da Transação, Método de Pagamento, Status (Anulado/Compensado), Data da Conciliação, Número da Fatura (Referência), Nº do Registro. Salve a visualização.
Exportar Dados de Pagamentos Abra a visualização 'Process Mining - Pagamentos'. Clique em 'Exportar' e selecione 'CSV'. Salve o arquivo como 'AP_Payments.csv'.
Opcional: Audit Trail para Histórico de Workflow Visualizações personalizadas padrão no Intacct mostram apenas o estado atual e a última data de modificação. Para capturar eventos históricos como 'Fatura Recusada' ou timestamps específicos de aprovação, você deve exportar o Histórico de Auditoria. Navegue até Relatórios > Configurações > Audit Trail. Configure o audit trail para observar o objeto 'AP Bill'. Selecione os tipos de ação: Add, Modify, Approve, Decline. Exporte este relatório como 'AP_Audit_History.csv'.
Executar Script de Transformação Use o script Python fornecido na seção Query para mesclar esses arquivos. O script processa os arquivos 'AP_Bills.csv', 'AP_Payments.csv' e o opcional 'AP_Audit_History.csv' para gerar a estrutura de Event Log necessária.
Verificar e Formatar Abra o arquivo resultante 'Event_Log_Output.csv'. Garanta que 'EventTime' esteja no formato ISO 8601 (AAAA-MM-DD HH:MM:SS). Verifique se o campo 'InvoiceNumber' está preenchido em todas as linhas. Faça o upload do CSV final no ProcessMind.
Configuração
- Configuração de Visualização: Certifique-se de que o 'Número de registros' nas configurações de visualização esteja alto o suficiente para capturar todas as transações ou use o recurso de exportação 'Próxima Página' se houver limites.
- Tratamento de Datas: O Intacct exporta datas no formato local do usuário (ex: MM/DD/AAAA). O script de transformação assume o formato padrão dos EUA; ajuste o script se o seu perfil de usuário utilizar DD/MM/AAAA.
- Permissões de Campo: Garanta que o usuário que está criando a visualização tenha permissões de 'List' e 'View' em Faturas de Contas a Pagar e Pagamentos Lançados.
- Granularidade Histórica: Sem a exportação do Audit Trail, atividades como 'Fatura Aprovada' dependerão do proxy 'Data de Lançamento', e 'Fatura Atualizada' refletirá apenas o horário da última modificação.
- Filtragem: Aplique um filtro em 'Data de Criação' >= [Data de Início] para limitar o volume de dados. Evite filtrar por 'Status' a menos que queira especificamente excluir registros anulados ou históricos.
a Consulta de Exemplo config
import pandas as pd
import numpy as np
from datetime import datetime
# CONFIGURATION
# Update these filenames to match your exported files
FILE_BILLS = 'AP_Bills.csv'
FILE_PAYMENTS = 'AP_Payments.csv'
# Set to None if Audit History is unavailable
FILE_AUDIT = 'AP_Audit_History.csv'
# COLUMNS MAPPING (Adjust based on your View column headers)
COL_BILL_NUM = 'Invoice Number'
COL_VENDOR = 'Vendor Name'
COL_AMOUNT = 'Total Amount'
COL_CREATED = 'Date Created'
COL_POSTED = 'Date Posted'
COL_DUE = 'Due Date'
COL_STATE = 'State'
COL_PO = 'PO Number'
COL_HOLD = 'On Hold'
COL_PAY_DATE = 'Payment Date'
COL_PAY_REF = 'Check/Payment Number'
COL_PAY_BILL_REF = 'Bill Number'
COL_PAY_STATE = 'State'
# OUTPUT STRUCTURE
event_log_columns = [
'InvoiceNumber', 'ActivityName', 'EventTime', 'SourceSystem',
'LastDataUpdate', 'VendorName', 'InvoiceAmount', 'PurchaseOrderNumber',
'InvoiceDate', 'DueDate', 'InvoiceStatus'
]
def run_extraction():
events = []
current_time = datetime.now().isoformat()
# 1. LOAD BILLS
try:
df_bills = pd.read_csv(FILE_BILLS)
# Clean formatting (remove currency symbols if present)
df_bills[COL_AMOUNT] = df_bills[COL_AMOUNT].replace('[\\$,]', '', regex=True).astype(float)
except FileNotFoundError:
print('Bills file not found.')
return
# 2. LOAD PAYMENTS
try:
df_pay = pd.read_csv(FILE_PAYMENTS)
except FileNotFoundError:
print('Payments file not found.')
df_pay = pd.DataFrame()
# PROCESSING BILLS
for index, row in df_bills.iterrows():
invoice_num = str(row[COL_BILL_NUM])
vendor = row[COL_VENDOR]
amount = row[COL_AMOUNT]
po_num = str(row[COL_PO]) if pd.notna(row[COL_PO]) else None
due_date = row[COL_DUE]
status = row[COL_STATE]
# Common attributes for this invoice
base_attr = {
'InvoiceNumber': invoice_num,
'SourceSystem': 'Sage Intacct',
'LastDataUpdate': current_time,
'VendorName': vendor,
'InvoiceAmount': amount,
'PurchaseOrderNumber': po_num,
'DueDate': due_date,
'InvoiceStatus': status
}
# Activity: Invoice Draft Created
if pd.notna(row[COL_CREATED]):
events.append({**base_attr,
'ActivityName': 'Invoice Draft Created',
'EventTime': row[COL_CREATED],
'InvoiceDate': row[COL_CREATED]})
# Activity: Invoice Matched to PO
if po_num and pd.notna(row[COL_CREATED]):
events.append({**base_attr,
'ActivityName': 'Invoice Matched to PO',
'EventTime': row[COL_CREATED],
'InvoiceDate': row[COL_CREATED]})
# Activity: Invoice Posted
if pd.notna(row[COL_POSTED]):
events.append({**base_attr,
'ActivityName': 'Invoice Posted',
'EventTime': row[COL_POSTED]})
# In standard views, Posted often implies Submission and Approval if no audit trail
# We generate proxy events if Audit Trail is missing
if not FILE_AUDIT:
events.append({**base_attr,
'ActivityName': 'Invoice Submitted',
'EventTime': row[COL_POSTED]})
events.append({**base_attr,
'ActivityName': 'Invoice Approved',
'EventTime': row[COL_POSTED]})
# Activity: Invoice Placed on Hold
if str(row[COL_HOLD]).lower() in ['true', 'yes', 'on hold']:
# Time is approximate (Last Modified) as View doesn't track hold time
events.append({**base_attr,
'ActivityName': 'Invoice Placed on Hold',
'EventTime': row.get('Date Modified', row[COL_CREATED])})
# PROCESSING PAYMENTS
# Intacct payment export might list multiple bills per check line or require join logic
# Assuming direct link via Bill Number
if not df_pay.empty:
for index, row in df_pay.iterrows():
bill_ref = str(row[COL_PAY_BILL_REF])
# Only process if this payment links to a bill we know
# (In a real scenario, merge on Bill Number)
pay_attr = {
'InvoiceNumber': bill_ref,
'SourceSystem': 'Sage Intacct',
'LastDataUpdate': current_time,
'ActivityName': 'Payment Generated',
'EventTime': row[COL_PAY_DATE]
}
events.append(pay_attr)
if str(row[COL_PAY_STATE]).lower() == 'void':
events.append({**pay_attr, 'ActivityName': 'Payment Voided', 'EventTime': row[COL_PAY_DATE]})
if 'Date Reconciled' in row and pd.notna(row['Date Reconciled']):
events.append({**pay_attr, 'ActivityName': 'Payment Reconciled', 'EventTime': row['Date Reconciled']})
# 3. OUTPUT
df_events = pd.DataFrame(events)
# Ensure dates are ISO format
df_events['EventTime'] = pd.to_datetime(df_events['EventTime']).dt.strftime('%Y-%m-%d %H:%M:%S')
# Final Select
df_final = df_events[event_log_columns]
df_final.to_csv('Event_Log_Output.csv', index=False)
print(f'Successfully exported {len(df_final)} events.')
if __name__ == '__main__':
run_extraction() Etapas
Estabelecer Sessão de Web Services: Autentique-se no endpoint do Sage Intacct Web Services 3.0 usando seu Sender ID, Senha, ID da Empresa, ID do Usuário e Senha do Usuário para obter um ID de sessão.
Identificar Objetos Necessários: Você deve extrair dados de três objetos principais para capturar o ciclo completo:
APBILL(Cabeçalhos de Fatura),APPYMTDETAIL(Detalhes de Pagamento vinculados às Faturas) eAUDITTRAIL(Histórico de workflow).Extrair Dados de Cabeçalho de Fatura: Use o método
readByQueryno objetoAPBILL. Selecione os camposRECORDNO,DOCNUMBER,WHENCREATED,WHENPOSTED,STATE,VENDORNAME,TOTALENTERED,PONUMBER,DUE_DATE. Filtre pelo intervalo de datas usandoWHENCREATED.Extrair Dados de Pagamento: Use
readByQueryemAPPYMTDETAIL. SelecioneRECORDNO,WHENCREATED,PAYMENTDATE,TRX_AMOUNT,DOCNUMBER(Ref. de Pagamento) eBILLRECORDNO(Chave Estrangeira para APBILL). Certifique-se de extrair o statusCLEAREDou a data, se disponível, para conciliação.Extrair Histórico de Auditoria: Use
readByQueryno objetoAUDITTRAIL. Filtre ondeOBJECTTYPE= 'APBILL'. Isso é essencial para capturar eventos de aprovação, recusa, retenção e anulação que não são mantidos como timestamps na tabela de cabeçalho. SelecioneOBJECTKEY,LOGTYPE,MESSAGE,WHENDOCCURREDeUSERID.Preparar os Dados (Staging): Carregue as respostas XML/JSON dessas três chamadas de API em um banco de dados de staging (SQL Server, Snowflake, Postgres, etc.). A API não suporta joins ou unions complexos em uma única chamada, portanto, a transformação deve ocorrer após a extração.
Executar Script de Transformação: Execute o script SQL fornecido na seção Query nas suas tabelas de staging. Este script unifica os dados estáticos do cabeçalho com o log de auditoria transacional para criar o event log único.
Validar Tipos de Atividade: Verifique a saída para palavras-chave específicas encontradas nas mensagens do Audit Trail (como Approved, Declined) e garanta que sua lógica de correspondência de strings cubra a redação específica da sua configuração do Intacct.
Formatar Datas: Garanta que a coluna
EventTimeesteja formatada nos padrões ISO 8601 (AAAA-MM-DD THH:MM:SS) durante a exportação final.Exportar Event Log: Exporte o resultado da query SQL como um arquivo CSV ou Parquet para upload no ProcessMind.
Configuração
- API Endpoint: https://api.intacct.com/ia/xml/xmlgw.phtml
- Método:
readByQuery(Web Services 3.0) - Tamanho da Página: Defina o
pagesizecomo 1000 (máximo recomendado) para minimizar o overhead de HTTP. Implemente um loop usando oresultIdpara buscar as páginas seguintes. - Filtragem por Data: Use operadores SQL padrão (>=, <, AND) na sua query string para colunas
WHENCREATEDa fim de limitar a janela de extração (ex: Últimos 365 dias). - Permissões: O usuário de extração precisa de permissões de 'List' e 'View' em Contas a Pagar e a permissão de 'Audit Trail' (geralmente encontrada nas configurações de Platform Services ou Company Admin).
- Vinculação de Objetos:
APBILL.RECORDNOé a chave primária usada para realizar o join comAPPYMTDETAIL.BILLRECORDNOeAUDITTRAIL.OBJECTKEY.
a Consulta de Exemplo sql
/*
PROCESSMIND TRANSFORMATION SCRIPT
Prerequisite: Data from APBILL, APPYMTDETAIL, and AUDITTRAIL
must be extracted via API and staged in tables with those names.
*/
/* 1. Invoice Draft Created */
SELECT
H.DOCNUMBER AS InvoiceNumber,
'Invoice Draft Created' AS ActivityName,
H.WHENCREATED AS EventTime,
'Sage Intacct' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.VENDORNAME AS VendorName,
H.TOTALENTERED AS InvoiceAmount,
H.PONUMBER AS PurchaseOrderNumber,
H.WHENCREATED AS InvoiceDate,
H.DUE_DATE AS DueDate,
NULL AS Department,
H.CREATEDBY AS CreatedBy,
H.STATE AS InvoiceStatus,
NULL AS PaymentDate
FROM APBILL H
UNION ALL
/* 2. Invoice Matched to PO (Derived from existence of PO Number at creation) */
SELECT
H.DOCNUMBER,
'Invoice Matched to PO',
H.WHENCREATED, -- Occurs effectively at creation if PO links
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
H.TOTALENTERED,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
H.CREATEDBY,
H.STATE,
NULL
FROM APBILL H
WHERE H.PONUMBER IS NOT NULL AND H.PONUMBER <> ''
UNION ALL
/* 3. Invoice Posted (Header Timestamp) */
SELECT
H.DOCNUMBER,
'Invoice Posted',
H.WHENPOSTED,
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
H.TOTALENTERED,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
H.CREATEDBY,
H.STATE,
NULL
FROM APBILL H
WHERE H.WHENPOSTED IS NOT NULL
UNION ALL
/* 4. Payment Generated */
SELECT
H.DOCNUMBER,
'Payment Generated',
P.WHENCREATED,
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
P.TRX_AMOUNT,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
P.CREATEDBY,
H.STATE,
P.PAYMENTDATE
FROM APPYMTDETAIL P
JOIN APBILL H ON P.BILLRECORDNO = H.RECORDNO
UNION ALL
/* 5. Payment Reconciled */
SELECT
H.DOCNUMBER,
'Payment Reconciled',
P.WHENCLEARED,
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
P.TRX_AMOUNT,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
P.CREATEDBY,
H.STATE,
P.PAYMENTDATE
FROM APPYMTDETAIL P
JOIN APBILL H ON P.BILLRECORDNO = H.RECORDNO
WHERE P.WHENCLEARED IS NOT NULL
UNION ALL
/* 6. Workflow Activities from Audit Trail */
/* Covers: Updated, Submitted, Approved, Declined, Hold, Released, Voided, Selected */
SELECT
H.DOCNUMBER,
CASE
WHEN A.MESSAGE LIKE '%Submitted%' THEN 'Invoice Submitted'
WHEN A.MESSAGE LIKE '%Approved%' THEN 'Invoice Approved'
WHEN A.MESSAGE LIKE '%Declined%' THEN 'Invoice Declined'
WHEN A.MESSAGE LIKE '%Hold%' AND A.LOGTYPE = 'Add' THEN 'Invoice Placed on Hold'
WHEN A.MESSAGE LIKE '%Hold%' AND A.LOGTYPE = 'Remove' THEN 'Invoice Released from Hold'
WHEN A.MESSAGE LIKE '%Voided%' THEN 'Payment Voided'
WHEN A.MESSAGE LIKE '%Selected for payment%' THEN 'Invoice Selected for Payment'
WHEN A.MESSAGE LIKE '%Modified%' THEN 'Invoice Updated'
ELSE 'System Activity'
END AS ActivityName,
A.WHENDOCCURRED AS EventTime,
'Sage Intacct' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.VENDORNAME,
H.TOTALENTERED,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
A.USERID AS CreatedBy,
H.STATE,
NULL
FROM AUDITTRAIL A
JOIN APBILL H ON A.OBJECTKEY = CAST(H.RECORDNO AS VARCHAR(50))
WHERE A.OBJECTTYPE = 'APBILL'
AND (
A.MESSAGE LIKE '%Submitted%'
OR A.MESSAGE LIKE '%Approved%'
OR A.MESSAGE LIKE '%Declined%'
OR A.MESSAGE LIKE '%Hold%'
OR A.MESSAGE LIKE '%Voided%'
OR A.MESSAGE LIKE '%Selected for payment%'
OR A.MESSAGE LIKE '%Modified%'
)
/* Exclude creation updates to avoid duplication with Invoice Draft Created */
AND NOT (A.MESSAGE LIKE '%Modified%' AND ABS(DATEDIFF(second, A.WHENDOCCURRED, H.WHENCREATED)) < 60)