Seu Template de Dados para Order to Cash - Faturamento e Cobrança
Seu Template de Dados para Order to Cash - Faturamento e Cobrança
- Atributos recomendados para coletar
- Atividades-chave a monitorizar
- Orientação de extração para NetSuite
Atributos de Faturamento e Cobrança
| Nome | Descrição | ||
|---|---|---|---|
| Event Timestamp EventTimestamp | A data e hora exatas em que uma atividade ou evento específico ocorreu. | ||
| Descrição Este atributo registra o momento exato em que uma atividade ocorreu. É essencial para ordenar eventos cronologicamente e para toda análise temporal. No Process Mining, o Timestamp do Evento é usado para calcular tempos de ciclo entre atividades, duração de casos e tempos de espera. É vital para identificar gargalos, medir performance contra SLAs e entender a dinâmica temporal do faturamento. Por exemplo, é usado para calcular o Tempo de Ciclo de Geração de Faturas e o Days Sales Outstanding (DSO). Por que é importante Fornece a ordem cronológica dos eventos, essencial para calcular métricas de duração, identificar gargalos e analisar o desempenho do processo ao longo do tempo. Onde obter As informações de data e hora costumam estar nas notas do sistema, trilhas de auditoria ou campos 'Data de Criação' dos registros relacionados no NetSuite. Exemplos 2023-10-26T10:00:00Z2023-10-27T14:30:00Z2023-11-15T09:05:00Z | |||
| Nome da Atividade ActivityName | O nome do evento de negócio que ocorreu em um ponto específico do ciclo de vida da fatura. | ||
| Descrição O Nome da Atividade descreve uma etapa ou evento específico no processo de faturamento, como 'Fatura Criada', 'Fatura Aprovada' ou 'Pagamento de Cliente Recebido'. Essas atividades são os blocos de construção sequenciais do mapa de processo. Analisar a sequência e a frequência dessas atividades é fundamental para o Process Mining. Isso ajuda a visualizar o fluxo real do processo, identificar caminhos comuns e raros (variantes) e apontar atividades repetitivas, que indicam retrabalho ou ineficiência. Por que é importante Este atributo é fundamental para construir o mapa do processo, permitindo visualizar e analisar as diferentes etapas e caminhos que uma fatura percorre. Onde obter Derivado de logs do sistema, mudanças de status ou registros de eventos específicos associados à transação de Fatura no NetSuite. Isso geralmente requer o mapeamento de mudanças de status de transação ou criações de registros relacionados para nomes de atividades definidos. Exemplos Fatura CriadaFatura AprovadaPagamento do cliente recebidoFatura Totalmente Paga | |||
| Número da fatura InvoiceNumber | O identificador único de cada fatura, servindo como o ID de caso principal para o processo de faturamento. | ||
| Descrição O Número da Fatura é a base da análise do processo de faturamento, identificando cada fatura individualmente da criação ao fechamento. Ele agrupa atividades relacionadas, como aprovação, envio e aplicação de pagamento, em um único caso coeso. No Process Mining, analisar a jornada de cada fatura permite uma visão completa de todo o ciclo. Isso possibilita identificar variantes de processo, gargalos e desvios do padrão, trazendo insights críticos para otimizar o fluxo de caixa e a eficiência operacional. Por que é importante É essencial para rastrear o ciclo de vida completo de cada fatura, permitindo reconstruir todo o processo de cobrança e realizar análises detalhadas de desempenho. Onde obter Geralmente é o 'ID da Transação' ou campo identificador único similar no registro da fatura no NetSuite. Exemplos INV-0012345INV-0012346INV-0012347 | |||
| Sistema de Origem SourceSystem | O sistema do qual os dados foram extraídos. | ||
| Descrição Este atributo identifica a origem dos dados do processo. Para esta visualização, seria sempre 'NetSuite'. Em um contexto analítico amplo, especialmente em empresas com múltiplos ERPs, este atributo é crucial para a governança e linhagem de dados. Ele ajuda a diferenciar processos que cruzam plataformas e garante que a análise seja atribuída corretamente ao sistema de registro apropriado. Por que é importante Fornece um contexto crucial sobre a origem e a governança dos dados, especialmente em ambientes onde vários sistemas podem estar integrados. Onde obter Este é um valor estático ('NetSuite') adicionado durante a extração e transformação dos dados. Exemplos NetSuite | |||
| Última Atualização de Dados LastDataUpdate | O timestamp que indica a última vez que os dados foram atualizados a partir do sistema de origem. | ||
| Descrição Este atributo registra quando o conjunto de dados foi atualizado pela última vez, fornecendo contexto sobre a atualidade da análise. Analistas e gestores usam essa informação para saber se os insights refletem o estado operacional mais recente. É um metadado crítico para qualquer dashboard, garantindo que decisões sejam baseadas em dados com idade conhecida e não interpretadas erroneamente como tempo real. Por que é importante Isso informa os usuários sobre a atualização dos dados, garantindo que entendam o período da análise e a relevância dos insights. Onde obter Este timestamp é gerado e registrado pela ferramenta de extração ou pipeline no momento da atualização dos dados. Exemplos 2024-05-21T02:00:00Z | |||
| Data da Fatura InvoiceDate | A data oficial da fatura, conforme enviada ao cliente. | ||
| Descrição A Data da Fatura, ou data da transação, é o ponto de partida para cálculos financeiros de faturamento. É a partir dela que os prazos e vencimentos são definidos. Na análise, essa data ancora KPIs financeiros essenciais como o Days Sales Outstanding (DSO) e o Aging de Faturas. Ela permite análises de coorte, comparando o desempenho do faturamento entre diferentes períodos, como mês a mês ou ano a ano. Por que é importante Esta data é a base para métricas financeiras críticas como DSO e aging de faturas, impactando diretamente a análise do capital de giro. Onde obter Corresponde ao campo 'Data' (trandate) no registro da fatura no NetSuite. Exemplos 2023-10-262023-10-272023-11-15 | |||
| Data de Vencimento DueDate | A data limite para o pagamento da fatura. | ||
| Descrição A Data de Vencimento é calculada com base na Data da Fatura e nos Prazos de Pagamento acordados. Ela representa o limite para que o cliente pague sem atraso. Este atributo é essencial para monitorar contas a receber e gerir o fluxo de caixa. É a referência para calcular o KPI de Taxa de Pagamento em Dia e analisar o comportamento do cliente. Acompanhar desvios do vencimento ajuda a identificar clientes recorrentes em atrasos e a avaliar a eficácia das estratégias de cobrança. Por que é importante É crítico para medir o desempenho de pagamentos em dia e analisar o comportamento do cliente, apoiando diretamente a cobrança e a previsão de fluxo de caixa. Onde obter Corresponde ao campo 'Data de Vencimento' (duedate) no registro da fatura no NetSuite. Exemplos 2023-11-252023-11-262023-12-15 | |||
| É Automatizado IsAutomated | Um sinalizador que indica se uma atividade foi realizada automaticamente pelo sistema. | ||
| Descrição Este atributo booleano diferencia atividades manuais feitas por usuários daquelas automáticas via workflow, script ou integração. É a chave para medir o nível de automação do faturamento, alimentando o KPI de 'Taxa de Faturamento Automatizado'. Ao filtrar atividades manuais, analistas podem identificar gargalos causados por intervenção humana e localizar oportunidades para automatizar, reduzir erros e ganhar eficiência. Por que é importante Ajuda a medir o nível de automação, identificando oportunidades para reduzir o esforço manual e aumentar a eficiência. Onde obter Geralmente derivado do 'Usuário' associado à atividade. Eventos disparados por 'SYSTEM', 'Workflow' ou 'Integration' são marcados como automatizados. Exemplos verdadeirofalse | |||
| Event End Time EventEndTime | A data e hora exatas em que uma atividade ou evento específico foi concluído. | ||
| Descrição O Horário de Término do Evento marca a conclusão de uma atividade. Embora muitas sejam instantâneas, algumas, como etapas de aprovação, possuem duração mensurável. Este atributo, junto ao Timestamp do Evento (Horário de Início), permite calcular o tempo de processamento da atividade. Analisar esse tempo ajuda a identificar quais etapas consomem mais recursos e tempo, diferenciando-o do tempo de espera entre atividades. Isso é crucial para localizar ineficiências em tarefas específicas. Por que é importante Permite o cálculo preciso de quanto tempo cada atividade leva para ser concluída, essencial para analisar a eficiência dos recursos e identificar tarefas demoradas. Onde obter Semelhante ao StartTime, isso pode ser extraído das trilhas de auditoria do sistema no NetSuite. Pode exigir uma lógica para associar um evento de 'início' ao seu respectivo evento de 'fim'. Exemplos 2023-10-26T10:05:14Z2023-10-27T14:32:00Z2023-11-15T09:05:00Z | |||
| Nome do Cliente CustomerName | O nome do cliente para o qual a fatura foi emitida. | ||
| Descrição Este atributo identifica a entidade legal ou pessoa faturada, conectando o faturamento à gestão de relacionamento com o cliente. Analisar o processo por cliente ajuda a identificar padrões de pagamento, disputas ou complexidade de faturamento para clientes específicos. Isso orienta estratégias de segmentação, decisões de limite de crédito e abordagens de cobrança personalizadas. Por exemplo, pode revelar se um cliente específico sempre exige faturas que demandam retrabalho. Por que é importante Permite uma análise centrada no cliente, ajudando a identificar padrões de pagamento, problemas frequentes ou desvios de processo específicos de determinados clientes. Onde obter Corresponde ao campo de nome do 'Cliente' ou 'Entidade' no registro da fatura no NetSuite. Exemplos Global Tech Inc.Innovate Solutions LLCCornerstone Corp | |||
| Região Region | A região geográfica associada ao cliente ou à transação. | ||
| Descrição O atributo Região classifica as faturas geograficamente, com base no endereço do cliente ou na unidade de negócio emissora. Esta é uma dimensão poderosa para análise comparativa. O Dashboard de 'Comparação Regional do Processo de Faturamento' usa esse atributo para comparar KPIs como tempos de ciclo, taxas de erro e variantes de processo entre regiões. Isso ajuda a identificar diferenças de desempenho, descobrir melhores práticas e impulsionar a padronização de processos em toda a organização. Por que é importante Permite análises comparativas entre diferentes áreas geográficas, o que é fundamental para identificar lacunas de desempenho regional e padronizar melhores práticas. Onde obter Estes dados costumam estar em segmentos personalizados ou campos de classificação no mestre de clientes ou no registro da transação no NetSuite. Exemplos América do NorteEMEAAPAC | |||
| Utilizador User | O nome ou ID do usuário que executou a atividade. | ||
| Descrição Este atributo identifica o funcionário ou usuário do sistema responsável por uma etapa do processo. Pode ser quem criou a fatura, quem a aprovou ou quem aplicou o pagamento. Analisar o processo por usuário ajuda a entender a distribuição de carga de trabalho, o desempenho individual e a identificar necessidades de treinamento. Também destaca oportunidades de automação ao mostrar quais tarefas manuais são feitas por mais pessoas, além de ser vital para auditoria e conformidade. Por que é importante Possibilita a análise da distribuição da carga de trabalho, desempenho por usuário e adesão ao processo, o que é vital para a gestão de recursos e treinamentos focados. Onde obter Disponível na subaba Notas do Sistema ou em campos específicos de 'Modificado Por' na Fatura e nos registros de transações relacionadas no NetSuite. Exemplos Alice SmithBob JohnsonSISTEMA | |||
| Valor Total da Fatura InvoiceTotalAmount | O valor monetário total da fatura, incluindo impostos e outras taxas. | ||
| Descrição Este atributo representa o valor total que o cliente deve pagar, sendo um dado financeiro fundamental para cada caso. Analisar o processo pelo valor permite uma visão baseada em importância financeira. Por exemplo, pode revelar se faturas de alto valor seguem processos mais complexos do que as de baixo valor. Também serve para priorizar esforços de cobrança e entender o impacto financeiro de atrasos ou erros de faturamento. Por que é importante Permite uma análise baseada em valor, ajudando a priorizar faturas de alto valor e a entender o impacto financeiro das ineficiências do processo. Onde obter Corresponde ao campo 'Total' (total) no registro da fatura no NetSuite. Exemplos 1500.0089.9912500.50 | |||
| Condições de Pagamento PaymentTerms | As condições de pagamento acordadas entre a empresa e o cliente. | ||
| Descrição Os Termos de Pagamento definem quando e como um cliente deve pagar sua fatura, como 'Net 30' ou 'Pagamento à Vista'. Essa informação é usada para calcular automaticamente a data de vencimento. Este atributo é vital para o dashboard de 'Adesão aos Termos de Pagamento'. Analisar as taxas de pagamento em dia por diferentes termos ajuda a avaliar sua eficácia. Por exemplo, pode mostrar se clientes com termos 'Net 15' pagam mais rápido do que aqueles com 'Net 30', orientando futuras negociações de contrato e políticas de crédito. Por que é importante É essencial para analisar a eficácia das diferentes condições de pagamento e seu impacto na pontualidade dos clientes. Onde obter Corresponde ao campo 'Condições/Prazos' no registro da fatura no NetSuite. Exemplos Líquido 30Líquido 60Vencimento no recebimento | |||
| Days Sales Outstanding DaysSalesOutstanding | O número de dias entre a data da fatura e a data em que o pagamento foi recebido. | ||
| Descrição O Prazo Médio de Recebimento (DSO) é uma métrica financeira essencial que mede o número médio de dias para receber o pagamento após a emissão de uma fatura. Este atributo é calculado para cada fatura individual para permitir uma análise detalhada. Embora geralmente seja agregado como um KPI de alto nível, ter o DSO por fatura individual permite análises poderosas. Ele pode ser usado para identificar quais clientes, regiões ou tipos de fatura têm o maior DSO. O dashboard de 'Tendência de DSO' utiliza essa métrica para visualizar a eficiência da cobrança ao longo do tempo, fornecendo insights críticos para a gestão do capital de giro. Por que é importante Quantifica a eficiência da cobrança por fatura, permitindo uma análise detalhada da causa raiz do DSO alto e seu impacto no fluxo de caixa. Onde obter Calculado subtraindo a 'Data da Fatura' do timestamp da atividade 'Pagamento do Cliente Recebido'. Exemplos 294562 | |||
| Departamento Department | O departamento interno associado à fatura. | ||
| Descrição Este atributo representa o departamento interno (Vendas, Serviços, etc.) responsável pela transação, sendo um segmento padrão no NetSuite. Analisar por departamento permite benchmarking interno e ajuda a identificar se certas áreas possuem processos mais eficientes que outras. Pode revelar variações na adesão ao processo ou na alocação de recursos, gerando insights para melhorias focadas em partes específicas da organização. Por que é importante Permite comparar o desempenho do processo entre diferentes departamentos internos, destacando variações e oportunidades de padronização. Onde obter Corresponde ao campo de classificação 'Departamento', que pode ser definido no cabeçalho ou no item da fatura no NetSuite. Exemplos Vendas - EnterpriseServiços ProfissionaisHardware | |||
| É Pagamento em Dia IsOnTimePayment | Um sinalizador que indica se o pagamento do cliente foi recebido na data de vencimento ou antes dela. | ||
| Descrição Esta flag calculada compara o timestamp de 'Pagamento de Cliente Recebido' com a 'Data de Vencimento'. É verdadeira se o pagamento foi pontual ou antecipado, e falsa se houve atraso. Base para o KPI de 'Taxa de Pagamento em Dia' e para o dashboard de 'Adesão aos Prazos de Pagamento'. Oferece uma medida binária clara do comportamento do cliente, simplificando relatórios. Ajuda a identificar tendências de pontualidade e a avaliar a eficácia das estratégias de cobrança. Por que é importante Fornece uma métrica clara de sucesso na cobrança, apoiando o cálculo do KPI de Pagamento em Dia e a análise do comportamento do cliente. Onde obter Este é um atributo calculado, obtido ao comparar o timestamp do pagamento com a 'Data de Vencimento' no nível do caso. Exemplos verdadeirofalse | |||
| É Retrabalho IsRework | Um sinalizador calculado que identifica atividades consideradas como ciclos de retrabalho ou correção. | ||
| Descrição Esta flag booleana é verdadeira para atividades de retrabalho sem valor agregado, como 'Fatura Corrigida' ou uma segunda 'Fatura Aprovada'. Geralmente é derivada do nome ou da repetição da atividade. Essencial para o dashboard de 'Análise de Retrabalho e Rejeição de Faturas' e para o KPI de 'Taxa de Erro de Fatura'. Permite quantificar o retrabalho e destacar problemas de qualidade. Ao filtrar essas atividades, as equipes podem identificar causas raiz de erros e medir o impacto das melhorias implementadas. Por que é importante Mede diretamente a qualidade do processo ao sinalizar ciclos de retrabalho ineficientes, permitindo analisar as causas raízes e o impacto financeiro dos erros de faturamento. Onde obter Atributo derivado calculado na transformação de dados. Aplica-se lógica para identificar retrabalho, sinalizando nomes de atividades específicos ou atividades repetidas. Exemplos verdadeirofalse | |||
| Moeda Currency | O código da moeda para o valor da fatura. | ||
| Descrição Este atributo especifica a moeda da fatura (BRL, USD, EUR, etc.), contexto essencial para valores monetários. Para multinacionais, analisar por moeda é vital para entender o desempenho em diferentes mercados. Isso garante que os valores sejam interpretados corretamente e permite a agregação e comparação adequadas após a conversão cambial, se necessário. Por que é importante Fornece o contexto necessário para todos os valores monetários, o que é fundamental para relatórios e análises financeiras precisas, especialmente em operações multinacionais. Onde obter Corresponde ao campo 'Moeda' no registro de transação da fatura no NetSuite. Exemplos USDEURGBP | |||
| Número do pedido de venda SalesOrderNumber | O identificador do pedido de venda que originou a fatura. | ||
| Descrição Este atributo vincula a fatura ao pedido de venda original, conectando o faturamento aos processos anteriores de venda e atendimento. Incluir o número do pedido de venda permite uma visão holística do ciclo Order-to-Cash. Isso possibilita rastrear problemas no faturamento até sua origem nas vendas. Por exemplo, correções frequentes de faturas podem estar ligadas a erros de digitação em tipos específicos de pedidos. Por que é importante Conecta o faturamento de volta ao processo de vendas, permitindo uma análise mais ampla de Order to Cash para identificar as causas raízes dos problemas de faturamento. Onde obter Encontrado no campo 'Criado a Partir de' ou na subaba 'Registros Relacionados' de uma transação de Fatura no NetSuite. Exemplos SO-0009876SO-0009877SO-0009878 | |||
| Status da Fatura InvoiceStatus | O status atual da fatura em seu ciclo de vida. | ||
| Descrição Este atributo reflete o estado atual da fatura, como 'Aberta', 'Totalmente Paga' ou 'Anulada', fornecendo um panorama de onde ela está no processo. O dashboard de 'Visão Geral de Status de Faturas Abertas' baseia-se diretamente nisso. Ele permite avaliar as contas a receber em tempo real, ajudando as equipes financeiras a monitorar saldos pendentes, gerir cobranças e prever entradas de caixa. Analisar o status final também ajuda a entender os desfechos do processo. Por que é importante Fornece um retrato do estado atual do Contas a Receber, alimentando dashboards que monitoram faturas abertas e o progresso geral do faturamento. Onde obter Corresponde ao campo 'Status' no registro da fatura no NetSuite. Exemplos AbertoPago IntegralmenteAnuladaPendente de Aprovação | |||
| Tempo de Processamento da Atividade ActivityProcessingTime | Duração do trabalho efetivo em uma atividade específica. | ||
| Descrição Métrica que mede o tempo decorrido entre o início e o fim de uma única atividade, representando a duração real do trabalho (em oposição ao tempo de espera entre tarefas). É crítica para o dashboard de 'Vazão de Atividades e Gargalos'. Ao analisar tempos de processamento, as equipes identificam quais tarefas consomem mais tempo e recursos, permitindo melhorias como treinamentos, ajustes no sistema ou automação. Por que é importante Quantifica o esforço real em cada tarefa, ajudando a distinguir o tempo de trabalho ativo do tempo de espera e identificando atividades ineficientes. Onde obter Calculado subtraindo o EventTimestamp (StartTime) do EventEndTime para cada registro de atividade. Exemplos 300601200 | |||
Atividades de Faturamento e Cobrança
| Atividade | Descrição | ||
|---|---|---|---|
| Fatura Aprovada | A fatura foi formalmente aprovada e está pronta para o envio. Isso ocorre quando o status muda de 'Pendente de Aprovação' para 'Aprovado', geralmente via ação de workflow. | ||
| Por que é importante Um marco importante que condiciona o envio da fatura ao cliente. É crucial para medir os tempos de ciclo de aprovação e para calcular o KPI de 'Taxa de Faturamento Automatizado'. Onde obter Inferido a partir da mudança do campo 'Status de Aprovação' no registro da Fatura para 'Aprovado'. O timestamp preciso é registrado nas notas do sistema da transação. Captura Inferido a partir da mudança do campo 'Status de Aprovação' para 'Aprovado' nas notas do sistema. Tipo de evento inferred | |||
| Fatura Criada | Marca a criação oficial do registro de transação da fatura no NetSuite. Este evento é o ponto de partida do processo de faturamento para cada número de fatura único e é capturado pelo timestamp de criação da transação. | ||
| Por que é importante Evento inicial principal do faturamento. Analisar o tempo deste evento em relação aos outros revela a eficiência geral e serve de base para o KPI de Tempo de Ciclo de Geração de Faturas. Onde obter Capturado a partir do timestamp 'Data de Criação' no registro de transação da Fatura. As notas do sistema do NetSuite para a fatura também registram explicitamente o evento de criação e o usuário. Captura Evento registrado no momento da criação do registro de transação da Fatura. Tipo de evento explicit | |||
| Fatura Enviada ao Cliente | Indica que a fatura foi enviada ao cliente, geralmente por e-mail. Esse evento é capturado ao rastrear quando um usuário executa a ação de 'E-mail' no registro da fatura. | ||
| Por que é importante Marca o início do período de cobrança e é o ponto de partida principal para o cálculo do DSO. Onde obter Inferido pelo preenchimento do campo 'Data do Último E-mail' no registro da Fatura. Alternativamente, pode ser capturado pela criação de um registro de mensagem de e-mail na subaba Comunicação. Captura Inferido a partir do preenchimento da 'Data do Último E-mail' ou da criação de um registro de comunicação. Tipo de evento inferred | |||
| Fatura Totalmente Paga | O status da fatura mudou para 'Totalmente Paga', indicando saldo zero. É a conclusão bem-sucedida do ciclo de faturamento e cobrança. | ||
| Por que é importante Principal evento final de sucesso do processo. Analisar o tempo total para atingir esse estado fornece o tempo de ciclo de ponta a ponta para a conversão de caixa. Onde obter Inferido pela mudança do campo 'Status' do registro da Fatura para 'Paga Integralmente'. O timestamp dessa mudança de status está disponível nas notas do sistema da transação. Captura Inferido a partir da mudança do campo 'Status' para 'Paga Integralmente' nas notas do sistema. Tipo de evento inferred | |||
| Pagamento do cliente recebido | Um pagamento foi recebido do cliente e registrado no sistema. Isso é capturado pela criação de uma transação de 'Pagamento de Cliente' no NetSuite, que pode ser aplicada a uma ou várias faturas. | ||
| Por que é importante Marca o recebimento do dinheiro, mas não necessariamente sua aplicação a uma fatura específica. É o primeiro passo no processo de aplicação de caixa e um evento-chave para os cálculos de DSO. Onde obter Capturado a partir da data de criação do registro de transação de 'Pagamento de Cliente'. A conexão com a fatura é feita na subaba 'Aplicar' do pagamento. Captura Criação de um registro de transação de Pagamento de Cliente. Tipo de evento explicit | |||
| Data de Vencimento Atingida | Um evento calculado que ocorre quando a data atual coincide com a data de vencimento da fatura. Este evento não corresponde a uma ação direta do usuário ou do sistema, mas é derivado dos dados existentes durante a análise. | ||
| Por que é importante Atua como um marco crítico para medir a pontualidade dos pagamentos. É essencial para calcular o KPI de 'Taxa de Pagamento em Dia' e analisar o comportamento de pagamento dos clientes. Onde obter Não é um evento explícito no NetSuite. É calculado comparando o timestamp do log de eventos com o campo 'Data de Vencimento' no registro da fatura. Captura Calculado quando o timestamp do evento é igual ao campo 'Data de Vencimento' na fatura. Tipo de evento calculated | |||
| Fatura Anulada | A fatura foi anulada, cancelando-a e revertendo qualquer impacto no livro-razão. Essa ação é comum para faturas criadas por erro antes do pagamento. | ||
| Por que é importante Representa uma exceção de processo e um estado terminal. Entender por que as faturas são anuladas pode revelar erros de entrada de dados ou falhas de processo que precisam de correção nas etapas anteriores. Onde obter Ação explícita do usuário. Pode ser capturada nas notas do sistema do registro da fatura, que registram quando e por quem a transação foi anulada. Captura Ação explícita de 'Estorno' (Void) registrada nas notas do sistema da fatura. Tipo de evento explicit | |||
| Fatura Encerrada | A transação da fatura foi fechada, geralmente como parte do fechamento contábil. Isso impede alterações após o pagamento total e a conciliação. | ||
| Por que é importante Embora ocorra após o pagamento total, pode ser um passo administrativo final. Analisar atrasos entre o pagamento e o fechamento pode impactar a pontualidade dos relatórios financeiros. Onde obter Inferido pela mudança do campo 'Status' para 'Encerrado' ou estado semelhante. O timestamp dessa mudança é capturado pelas notas do sistema. Captura Inferido a partir da mudança do campo 'Status' nas notas do sistema. Tipo de evento inferred | |||
| Fatura Enviada para Aprovação | Representa a mudança de status da fatura para 'Pendente de Aprovação'. Este evento é capturado quando um usuário submete a fatura para um fluxo de aprovação configurado, o que é uma customização comum no sistema. | ||
| Por que é importante Esta atividade identifica o início de um possível gargalo de aprovação. O tempo de espera pela aprovação é um componente essencial do tempo total do ciclo de processamento da fatura. Onde obter Inferido a partir da mudança do campo 'Status de Aprovação' no registro da Fatura para 'Aprovação Pendente'. O timestamp dessa alteração pode ser encontrado na trilha de auditoria das notas do sistema. Captura Inferido a partir da mudança do campo 'Status de Aprovação' registrada nas notas do sistema. Tipo de evento inferred | |||
| Lembrete de Pagamento Emitido | Uma comunicação foi enviada ao cliente referente a um pagamento pendente. Isso é capturado como uma atividade registrada ou e-mail enviado a partir da fatura ou do registro do cliente, muitas vezes por uma solução de cobrança (dunning). | ||
| Por que é importante Essencial para avaliar a eficácia das estratégias de cobrança. Analisar o impacto desta atividade nos pagamentos subsequentes ajuda a otimizar a frequência e o timing dos lembretes. Onde obter Capturado a partir da criação de um registro de e-mail na subaba Comunicação > Mensagens da Fatura ou do registro do Cliente. Soluções de cobrança automatizadas também podem registrá-los como registros personalizados ou tarefas. Captura Registrado como um e-mail ou registro de atividade associado à fatura. Tipo de evento explicit | |||
| Nota de Crédito Criada | Uma transação de memorando de crédito foi criada e aplicada à fatura, reduzindo o saldo devedor. Isso geralmente indica uma devolução de produto, reclamação de serviço ou correção de preço. | ||
| Por que é importante Destaca retrabalho, problemas de qualidade ou disputas com clientes. Ocorrências frequentes podem sinalizar problemas subjacentes e são fundamentais para o dashboard de 'Análise de Retrabalho e Rejeição de Faturas'. Onde obter Capturado a partir da criação de uma transação de Memorando de Crédito. O link para a fatura original é encontrado no campo 'Criado a Partir de' ou na subaba 'Aplicar' do memorando. Captura Criação de um registro de Memorando de Crédito vinculado à fatura original. Tipo de evento explicit | |||
| Pagamento Aplicado à Fatura | O pagamento recebido foi aplicado especificamente contra esta fatura, reduzindo o valor devido. Isso é registrado quando a aplicação é salva no registro de Pagamento do Cliente. | ||
| Por que é importante O elo crucial entre o recebimento e a liquidação da fatura. O tempo entre o pagamento recebido e este evento define o KPI de 'Tempo de Ciclo de Aplicação de Caixa'. Onde obter Capturado das notas do sistema ou trilha de auditoria da transação de Pagamento de Cliente, especificamente quando a aplicação à linha da fatura é salva. O timestamp desta aplicação é a chave. Captura Registrado quando o registro de Pagamento de Cliente é salvo com uma aplicação à fatura. Tipo de evento explicit | |||
Guias de Extração
Etapas
- Acesse o NetSuite: Faça login na sua conta do NetSuite usando um papel (role) com permissões suficientes para criar e executar Buscas Salvas em registros de transação.
- Navegue até Buscas Salvas: Vá em Relatórios > Buscas Salvas > Todas as Buscas Salvas > Novo. Selecione 'Transação' na lista. Essa será a base para criar várias buscas, uma para cada tipo de evento.
- Crie a busca 'Fatura Criada': Esta é a busca principal que captura a criação das faturas.
- Na aba 'Critérios', em 'Padrão', defina o filtro 'Tipo' como 'Fatura'.
- Adicione um filtro para 'Linha Principal' e defina como 'Sim' (true) para obter um registro por fatura.
- Na aba 'Resultados', adicione as colunas necessárias. Use fórmulas para criar campos padronizados como
ActivityName. Por exemplo, adicione um campo 'Fórmula (Texto)' com a fórmula_UTF8'Fatura Criada'.
- Crie buscas para Mudanças de Status (Aprovação, Paga, Estornada, Encerrada): Muitas atividades são mudanças de status. A forma mais confiável de capturar a data/hora exata é pelas Notas do Sistema.
- Crie uma nova Busca Salva de Transação.
- Na aba 'Critérios', defina 'Tipo' como 'Fatura'.
- Na subaba 'Padrão', adicione o filtro 'Notas do Sistema : Campo' e selecione o campo de status relevante, por exemplo, 'Status de Aprovação'.
- Adicione outro filtro 'Notas do Sistema : Novo Valor' e defina como o status desejado, por exemplo, 'Aprovado'.
- Na aba 'Resultados', mapeie 'Notas do Sistema : Data' para
EventTimestampe 'Notas do Sistema : Definido por' paraUser. - Repita esse processo para cada atividade baseada em status: 'Fatura Enviada para Aprovação', 'Fatura Aprovada', 'Fatura Totalmente Paga', 'Fatura Estornada' e 'Fatura Encerrada', ajustando os filtros de campo e valor conforme necessário.
- Crie a busca 'Fatura Enviada ao Cliente': Este evento geralmente é capturado rastreando mensagens de e-mail enviadas a partir do registro da fatura.
- Crie uma nova Busca Salva de Transação com 'Tipo' definido como 'Fatura'.
- Na aba 'Critérios', em 'Registros Relacionados', adicione um filtro para 'Mensagens : Data de Envio' e defina como 'não está vazio'.
- Na aba 'Resultados', mapeie 'Mensagens : Data de Envio' para
EventTimestampe 'Mensagens : Autor' paraUser.
- Crie buscas para Atividades de Pagamento e Memorando de Crédito: Envolvem tipos de transação separados vinculados à fatura.
- Para 'Pagamento de Cliente Recebido', crie uma busca onde 'Tipo' é 'Pagamento de Cliente'. Capture a data de criação como o timestamp do evento.
- Para 'Pagamento Aplicado à Fatura', use a mesma busca de 'Pagamento de Cliente', mas faça o join com os campos 'Aplicado à Transação'. A 'Data de Criação' da transação de pagamento serve como timestamp. Você terá uma linha para cada aplicação em fatura.
- Para 'Memorando de Crédito Criado', crie uma busca onde 'Tipo' é 'Memorando de Crédito' e vincule ao campo 'Criado a Partir de' para obter o número da fatura original.
- Execute e Exporte cada Busca Salva: Execute cada busca salva que você criou. Na página de resultados, clique no ícone de exportação e escolha CSV. Pode ser necessário exportar em lotes se o conjunto de resultados for maior que o limite de exportação do NetSuite.
- Combine e Transforme os Dados: Consolide todos os arquivos CSV exportados em um único arquivo usando uma ferramenta como Excel, um script Python ou uma ferramenta de preparação de dados.
- Gere o evento 'Data de Vencimento Atingida': No seu arquivo de dados combinados, para cada evento de 'Fatura Criada', crie uma nova linha. Defina o
ActivityNamecomo 'Data de Vencimento Atingida', oEventTimestampcomo o valor do campoDueDateda fatura e copie os outros atributos relevantes da fatura. - Finalize o Log de Eventos: Padronize todos os cabeçalhos das colunas para corresponder ao esquema exigido (ex:
InvoiceNumber,ActivityName,EventTimestamp). Garanta que os formatos de data/hora sejam consistentes. Adicione as colunasSourceSystemeLastDataUpdatecom valores estáticos para este lote de extração. Salve o arquivo final consolidado como CSV para upload.
Configuração
- Pré-requisitos: É necessário um papel (role) de usuário com permissões para criar, editar e executar Buscas Salvas (Saved Searches) do tipo 'Transação'. Também é preciso ter acesso para visualizar registros de Fatura (Invoice), Pagamento de Cliente, Memorando de Crédito e Notas do Sistema.
- Tipo de Busca: O tipo de busca principal usado para todas as extrações é 'Transação'. Esse tipo permite o acesso a todos os registros necessários e seus relacionamentos.
- Filtragem por Período: Para gerenciar o desempenho e o volume de dados, aplique um filtro de período em cada busca. Recomenda-se um filtro na 'Data de Criação' para os últimos 3 a 6 meses na análise inicial.
- Filtro de Linha Principal (Main Line): Use o critério 'Linha Principal' definido como 'true' para eventos no nível do cabeçalho do documento, como 'Fatura Criada'. Defina como 'false' quando precisar analisar detalhes dos itens de linha, o que não é necessário para este processo.
- Notas do Sistema: A captura de mudanças de status depende muito das Notas do Sistema. Certifique-se de que a auditoria esteja ativada para campos-chave de transação, como 'Status' e 'Status de Aprovação', na configuração do NetSuite (Configuração > Empresa > Habilitar Recursos > SuiteCloud > SuiteAudit Trail).
- Considerações de Desempenho: Buscas complexas com muitos joins e campos de fórmula em um grande intervalo de datas podem ser lentas na interface do NetSuite. É recomendável executar e exportar essas buscas em horários de pouco movimento. Se uma busca expirar (timeout), reduza o intervalo de datas e exporte os dados em lotes menores.
a Consulta de Exemplo config
/*
This section describes the configuration for multiple NetSuite Saved Searches needed to generate the complete event log. Each block represents a separate Saved Search that must be created in the UI, exported, and then combined externally.
*/
-- Search 1: Invoice Created
Activity Name: 'Invoice Created'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Main Line is true
Results Columns (Mapped to Event Log Attributes):
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Created'
- EventTimestamp: Date Created
- User: Created By
- InvoiceDate: Date
- DueDate: Due Date
- InvoiceTotalAmount: Amount (Gross)
- CustomerName: Name
-- Search 2: Invoice Submitted for Approval
Activity Name: 'Invoice Submitted for Approval'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Approval Status
- System Notes : New Value is [Your 'Pending Approval' status]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Submitted for Approval'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 3: Invoice Approved
Activity Name: 'Invoice Approved'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Approval Status
- System Notes : New Value is [Your 'Approved' status]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Approved'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 4: Invoice Sent to Customer
Activity Name: 'Invoice Sent to Customer'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Messages : Date Sent is not empty
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Sent to Customer'
- EventTimestamp: Messages : Date Sent (use Maximum summary type if multiple)
- User: Messages : Author (use Maximum summary type)
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 5: Payment Reminder Issued
Activity Name: 'Payment Reminder Issued'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- User Notes : Note contains [Your dunning/reminder keyword]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Payment Reminder Issued'
- EventTimestamp: User Notes : Date
- User: User Notes : Author
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 6: Credit Memo Created
Activity Name: 'Credit Memo Created'
Saved Search Type: Transaction
Criteria:
- Type is Credit Memo
- Main Line is true
Results Columns:
- InvoiceNumber: Created From : Document Number
- ActivityName: Formula (Text) = 'Credit Memo Created'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 7: Customer Payment Received
Activity Name: 'Customer Payment Received'
Saved Search Type: Transaction
Criteria:
- Type is Customer Payment
- Main Line is true
Results Columns:
- InvoiceNumber: Applied to Transaction : Document Number
- ActivityName: Formula (Text) = 'Customer Payment Received'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
-- Search 8: Payment Applied To Invoice
Activity Name: 'Payment Applied To Invoice'
Saved Search Type: Transaction
Criteria:
- Type is Customer Payment
- Main Line is false
Results Columns:
- InvoiceNumber: Applied to Transaction : Document Number
- ActivityName: Formula (Text) = 'Payment Applied To Invoice'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
-- Search 9: Invoice Paid In Full
Activity Name: 'Invoice Paid In Full'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Status
- System Notes : New Value is Paid In Full
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Paid In Full'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 10: Invoice Voided
Activity Name: 'Invoice Voided'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Status is Invoice : Voided
- System Notes : Field is Status
- System Notes : New Value is Voided
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Voided'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
-- Search 11: Invoice Closed
Activity Name: 'Invoice Closed'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Status
- System Notes : New Value contains Closed
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Closed'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Event to be Derived Post-Extraction: Payment Due Date Reached
/*
This event is not extracted directly. After combining all other CSVs, create a new row for each unique invoice.
Set ActivityName to 'Payment Due Date Reached'.
Set EventTimestamp to the DueDate value from the 'Invoice Created' event for that invoice.
Copy other attributes like InvoiceNumber, CustomerName, etc.
*/ Etapas
- Pré-requisito: Habilitar o SuiteAnalytics Connect: Verifique se o módulo SuiteAnalytics Connect está licenciado e ativado em sua instância do NetSuite. Isso geralmente é feito por um administrador em Configuração > Empresa > Habilitar Recursos > Analytics.
- Baixar e Configurar o Driver ODBC: Vá para o painel inicial do NetSuite e localize o portlet 'Configurações'. Clique no link 'Configurar SuiteAnalytics Connect' para baixar o driver ODBC adequado para seu sistema operacional. Siga as instruções de instalação do NetSuite, inserindo o host do serviço, porta, ID da conta, ID do papel, e-mail e senha.
- Estabelecer Conexão com o Banco de Dados: Use uma ferramenta de cliente SQL que suporte conexões ODBC, como DBeaver, Tableau ou Power BI. Crie uma nova conexão ODBC usando o driver configurado. Teste a conexão para garantir que você consegue se autenticar e acessar o banco de dados de réplica de leitura do NetSuite.
- Preparar a Consulta SQL: Copie a consulta SQL completa fornecida na seção 'Consulta' deste documento. Esta consulta foi projetada para extrair todas as atividades e atributos necessários para o processo de faturamento no Order to Cash.
- Definir Parâmetros da Consulta: Antes de executar, localize os valores marcadores na consulta. Você deve substituir
'YYYY-MM-DD'pelas datas de início e fim desejadas para o período de extração. Além disso, substitua[Seu ID da Subsidiária]pelo ID interno da subsidiária do NetSuite que deseja analisar. - Executar a Consulta: Execute a consulta modificada no seu cliente SQL. O tempo de execução variará dependendo do intervalo de datas e do volume de transações em sua conta NetSuite.
- Revisar os Resultados: Assim que a consulta for concluída, uma tabela plana representando o log de eventos será retornada. Cada linha corresponde a uma atividade específica no ciclo de vida da fatura. Revise os dados quanto à integridade e precisão.
- Exportar o Log de Eventos: Exporte os resultados da consulta do seu cliente SQL para um arquivo CSV. Certifique-se de que o arquivo esteja codificado em UTF-8 para evitar problemas com caracteres.
- Preparar para o Upload: Antes de carregar em uma ferramenta de Process Mining, confirme se os cabeçalhos das colunas correspondem aos nomes de atributos exigidos, como InvoiceNumber, ActivityName e EventTimestamp. Verifique se os formatos de data e hora estão consistentes.
Configuração
- Licença do SuiteAnalytics Connect: É obrigatória uma licença válida para o módulo SuiteAnalytics Connect para acessar o banco de dados de réplica de leitura do NetSuite. Sem isso, o acesso direto via SQL não é possível.
- Papel e Usuário Dedicados: Recomendamos fortemente a criação de um Papel (Role) exclusivo no NetSuite com as permissões adequadas para o SuiteAnalytics Connect. Esse papel deve ter acesso apenas de leitura aos registros necessários, incluindo Transações, Clientes e Notas do Sistema. Atribua um usuário dedicado a este papel para a extração, garantindo segurança e auditabilidade.
- Filtragem por Período: A consulta fornecida inclui uma cláusula
WHEREna data de criação da fatura (Transaction.TRANDATE). Para extrações iniciais, convém começar com um intervalo menor, como os últimos 3 a 6 meses, para gerenciar o desempenho e o volume de dados. Por exemplo:AND T.TRANDATE BETWEEN '2023-01-01' AND '2023-06-30'. - Filtragem por Subsidiária: Para contas com várias subsidiárias, filtrar pela subsidiária específica é fundamental tanto para o desempenho quanto para a relevância dos dados. A consulta inclui o marcador
WHERE T.SUBSIDIARY_ID = [Seu ID da Subsidiária]que deve ser configurado. - Atualização dos Dados: O banco de dados do SuiteAnalytics Connect é uma réplica de leitura. Os dados costumam ser atualizados várias vezes por hora, mas não em tempo real. Esteja ciente de um possível atraso de algumas horas entre a ocorrência de uma transação no NetSuite e sua exibição no banco de dados Connect.
a Consulta de Exemplo sql
WITH Invoices AS (
SELECT
T.TRANSACTION_ID,
T.TRANID AS InvoiceNumber,
T.TRANDATE AS InvoiceDate,
T.DUEDATE AS DueDate,
T.FOREIGN_TOTAL AS InvoiceTotalAmount,
C.COMPANYNAME AS CustomerName,
BUILTIN.DF(C.LOCATION) AS Region,
T.CREATED_DATE AS InvoiceCreationDate,
CREATOR.FIRST_NAME || ' ' || CREATOR.LAST_NAME AS CreatorUser
FROM
TRANSACTIONS T
JOIN
CUSTOMERS C ON T.ENTITY_ID = C.CUSTOMER_ID
LEFT JOIN
EMPLOYEES CREATOR ON T.CREATED_BY_ID = CREATOR.EMPLOYEE_ID
WHERE
T.TRANSACTION_TYPE = 'Invoice'
AND T.TRANDATE BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD')
-- AND T.SUBSIDIARY_ID = [Your Subsidiary ID] -- Add your subsidiary filter if needed
)
-- 1. Invoice Created
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Invoice Created' AS "ActivityName",
I.InvoiceCreationDate AS "EventTimestamp",
I.InvoiceCreationDate AS "EventEndTime",
I.CreatorUser AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN I.CreatorUser LIKE '%System%' THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
UNION ALL
-- 2. Invoice Submitted for Approval & 3. Invoice Approved
SELECT
I.InvoiceNumber AS "InvoiceNumber",
CASE WHEN SN.NEW_VALUE = 'Pending Approval' THEN 'Invoice Submitted for Approval' ELSE 'Invoice Approved' END AS "ActivityName",
SN.DATE_CREATED AS "EventTimestamp",
SN.DATE_CREATED AS "EventEndTime",
SN_AUTHOR.FIRST_NAME || ' ' || SN_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN SN.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
SYSTEM_NOTES SN ON I.TRANSACTION_ID = SN.TRANSACTION_ID
LEFT JOIN
EMPLOYEES SN_AUTHOR ON SN.AUTHOR_ID = SN_AUTHOR.EMPLOYEE_ID
WHERE
SN.FIELD = 'TRANSACTION.APPROVALSTATUS' AND SN.NEW_VALUE IN ('Pending Approval', 'Approved')
UNION ALL
-- 4. Invoice Sent to Customer
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Invoice Sent to Customer' AS "ActivityName",
M.MESSAGE_DATE AS "EventTimestamp",
M.MESSAGE_DATE AS "EventEndTime",
MSG_AUTHOR.FIRST_NAME || ' ' || MSG_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
MESSAGES M ON I.TRANSACTION_ID = M.TRANSACTION_ID
LEFT JOIN
EMPLOYEES MSG_AUTHOR ON M.AUTHOR_ID = MSG_AUTHOR.EMPLOYEE_ID
WHERE
M.INCOMING = 'F' -- Indicates an outgoing message
UNION ALL
-- 5. Payment Due Date Reached
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Payment Due Date Reached' AS "ActivityName",
I.DueDate AS "EventTimestamp",
I.DueDate AS "EventEndTime",
'System' AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
1 AS "IsAutomated"
FROM
Invoices I
WHERE
I.DueDate IS NOT NULL AND I.DueDate < SYSDATE
UNION ALL
-- 6. Payment Reminder Issued (based on Messages table, requires a specific subject line convention)
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Payment Reminder Issued' AS "ActivityName",
M.MESSAGE_DATE AS "EventTimestamp",
M.MESSAGE_DATE AS "EventEndTime",
MSG_AUTHOR.FIRST_NAME || ' ' || MSG_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN M.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
MESSAGES M ON I.TRANSACTION_ID = M.TRANSACTION_ID
LEFT JOIN
EMPLOYEES MSG_AUTHOR ON M.AUTHOR_ID = MSG_AUTHOR.EMPLOYEE_ID
WHERE
M.INCOMING = 'F' AND UPPER(M.SUBJECT) LIKE '%PAYMENT REMINDER%'
UNION ALL
-- 7. Credit Memo Created & Applied
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Credit Memo Created' AS "ActivityName",
CM.CREATED_DATE AS "EventTimestamp",
CM.CREATED_DATE AS "EventEndTime",
CM_CREATOR.FIRST_NAME || ' ' || CM_CREATOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
TRANSACTION_LINES T_LINES ON I.TRANSACTION_ID = T_LINES.APPLIED_TO_TRANSACTION_ID
JOIN
TRANSACTIONS CM ON T_LINES.TRANSACTION_ID = CM.TRANSACTION_ID
LEFT JOIN
EMPLOYEES CM_CREATOR ON CM.CREATED_BY_ID = CM_CREATOR.EMPLOYEE_ID
WHERE
CM.TRANSACTION_TYPE = 'Credit Memo'
UNION ALL
-- 8. Customer Payment Received & 9. Payment Applied to Invoice
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Customer Payment Received' AS "ActivityName", -- Can also create a separate 'Payment Applied' event if needed
PAYMENT.CREATED_DATE AS "EventTimestamp",
PAYMENT.CREATED_DATE AS "EventEndTime",
PMT_CREATOR.FIRST_NAME || ' ' || PMT_CREATOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
TRANSACTION_LINES T_LINES ON I.TRANSACTION_ID = T_LINES.APPLIED_TO_TRANSACTION_ID
JOIN
TRANSACTIONS PAYMENT ON T_LINES.TRANSACTION_ID = PAYMENT.TRANSACTION_ID
LEFT JOIN
EMPLOYEES PMT_CREATOR ON PAYMENT.CREATED_BY_ID = PMT_CREATOR.EMPLOYEE_ID
WHERE
PAYMENT.TRANSACTION_TYPE = 'Customer Payment'
UNION ALL
-- 10. Invoice Paid In Full, 11. Invoice Voided, 12. Invoice Closed
SELECT
I.InvoiceNumber AS "InvoiceNumber",
CASE
WHEN SN.NEW_VALUE_ID = 'Invoice:B' THEN 'Invoice Paid In Full' -- 'B' is status 'Paid In Full'
WHEN SN.FIELD = 'TRANSACTION.VOIDED' AND SN.NEW_VALUE = 'T' THEN 'Invoice Voided'
WHEN SN.FIELD = 'TRANSACTION.CLOSED' AND SN.NEW_VALUE = 'T' THEN 'Invoice Closed'
END AS "ActivityName",
SN.DATE_CREATED AS "EventTimestamp",
SN.DATE_CREATED AS "EventEndTime",
SN_AUTHOR.FIRST_NAME || ' ' || SN_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN SN.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
SYSTEM_NOTES SN ON I.TRANSACTION_ID = SN.TRANSACTION_ID
LEFT JOIN
EMPLOYEES SN_AUTHOR ON SN.AUTHOR_ID = SN_AUTHOR.EMPLOYEE_ID
WHERE
(SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE_ID = 'Invoice:B')
OR (SN.FIELD = 'TRANSACTION.VOIDED' AND SN.NEW_VALUE = 'T')
OR (SN.FIELD = 'TRANSACTION.CLOSED' AND SN.NEW_VALUE = 'T');