Entende o contexto
Lê a operação, o cliente e o histórico antes de propor qualquer coisa.
Vendas, marketing, atendimento, operação, financeiro e inteligência trabalhando sobre o mesmo contexto — para sua empresa ganhar escala sem perder controle.
Sua empresa inteira. Uma operação. IA trabalhando.
Para empresas de qualquer setor que querem crescer com estrutura, controle e inteligência.
Painel ilustrativo do Sistema Centriu com sete frentes trabalhando: atendimento, comercial, operação, agentes, inteligência, conteúdo e marketing. Cada frente mostra o trabalho concluído ou o próximo passo.
Representação ilustrativa do trabalho em execução
Não é falta de ferramenta. É que cada ferramenta resolve um pedaço, e ninguém é dono do todo. O custo disso não aparece numa fatura — aparece no mês seguinte.
Sistemas que não se falam
O mesmo dado é digitado de novo — e cada cópia conta uma história diferente.
Dados duplicados
Ninguém sabe qual versão é a verdadeira na hora de decidir.
Conversas perdidas
O cliente repete o contexto a cada canal e a cada pessoa.
Tarefas espalhadas
O trabalho vive em planilhas, mensagens e na memória de alguém.
Decisões sem contexto
A escolha é feita com o recorte que estava à mão, não com o que importava.
Automações desconectadas
Cada ferramenta automatiza um pedaço e ninguém enxerga o todo.
Nenhum desses problemas se resolve comprando mais um software. Eles se resolvem quando a operação inteira passa a trabalhar sobre o mesmo contexto.
A Centriu não é uma coleção de produtos. É uma plataforma em que clientes, áreas e agentes leem e escrevem no mesmo lugar.
Cliente 360
Um contexto, não vários cadastros
Cada conversa, tarefa, campanha, cobrança e decisão fica ligada ao cliente e à operação — não a um sistema isolado.
As áreas abaixo são partes da mesma operação, não produtos separados. Elas compartilham conta, permissões e histórico.
A inteligência artificial da Centriu participa da operação: entende contexto, prepara trabalho, executa rotinas e pede aprovação quando importa.
Lê a operação, o cliente e o histórico antes de propor qualquer coisa.
Redige, organiza, calcula e deixa pronto para revisão humana.
Roda o que é repetitivo dentro dos limites definidos pela empresa.
Cruza áreas, identifica prioridade e mostra o motivo da recomendação.
O que é sensível passa por uma pessoa antes de valer. Sem exceção silenciosa.
Registra o que aconteceu e usa o resultado para melhorar a próxima decisão.
Uma plataforma, várias frentes de trabalho. Tudo no mesmo contexto, com a IA participando do que dá para acelerar.
CRM, pipeline, oportunidades, propostas, follow-up e automações.
WhatsApp, Instagram, Messenger, chat do site e e-mail no mesmo contexto.
Tarefas, responsáveis, prazos, aprovações, agenda e capacidade.
Contas, cobranças, caixa, fiscal, margem, IR, orçamento e inteligência econômica.
Planejar, produzir, aprovar, publicar e medir conteúdo e campanhas.
Painéis, alertas, previsões, recomendações e leitura executiva.
Rotinas executadas continuamente pela IA com controle e aprovação.
Diagnóstico, estratégia, transformação, acompanhamento e especialistas.
A Centriu faz sentido quando o volume aumenta e a estrutura precisa acompanhar. Não é sobre setor nem tamanho: é sobre a operação conseguir sustentar o próximo estágio.
As vendas crescem, mas o processo não acompanha.
As áreas trabalham separadas e o cliente sente.
A operação depende de pessoas específicas.
O financeiro ficou complexo e o caixa perde visibilidade.
O atendimento cresce em volume e em canais.
A IA entra sem contexto, controle ou histórico.
Se a empresa ainda não começou a crescer, a Centriu também ajuda a preparar a estrutura para o primeiro salto.
Ver a Centriu funcionandoA Centriu combina tecnologia, inteligência, método e acompanhamento. A consultoria diagnostica, desenha, implanta e acompanha — com evidências, não com apresentação.
Diagnóstico e imersão na operação
Estratégia e prioridades
Roadmap de transformação
Desenho da arquitetura operacional
Implantação conduzida
Acompanhamento com evidências
Benchmarking e leitura de mercado
Especialistas, rede e inteligência coletiva
Uma conversa para entender onde a sua operação perde tempo, dinheiro ou capacidade — e o que a Centriu faria primeiro.
problema
Centriu Axis's client-approvals table has carried a column recording exactly who responded to an approval decision. It has its own dedicated database index. This index was built to look answers up by it. This has been true for as long as the table itself has existed. Every one of the three independent code paths that ever wrote a decision to that table left that column empty every single time. These paths were the approval screen's own direct write, the calendar and deliverables edge function, and the batch-planning service. None of them ever set it. A column purpose-built, and specifically indexed, to answer "who approved this" had structurally never been able to answer it. The same investigation found the decision itself was never atomic. Approving or rejecting a single post ran as an unprotected sequence of up to six separate reads and writes across two tables. There was no database transaction and no row lock holding any of it together beyond a single conditional update. The fix replaces that sequence with one locked, transactional function per decision type. It takes a lock on the row before evaluating anything. It performs every related write as a single all-or-nothing transaction. As part of that same write, it finally stamps who responded. This closes a gap in a column that had been sitting there, indexed and unused, the whole time.

Building a dedicated database index for a specific column is not a neutral, cost-free decision. It is a deliberate signal that someone expects that column to be queried, looked up, filtered, or reported on later. They are willing to pay the ongoing cost of maintaining that index to make those future queries fast. An index on an empty column is a promise nobody kept. The infrastructure to answer a question was built and maintained. But the one thing that would let it actually answer that question — a value ever being written into the column at all — never happened.
Building a dedicated database index for a specific column is not a neutral, cost-free decision. It is a deliberate signal that someone expects that column to be queried, looked up, filtered, or reported on later. They are willing to pay the ongoing cost of maintaining that index to make those future queries fast. An index on an empty column is a promise nobody kept. The infrastructure to answer a question was built and maintained. But the one thing that would let it actually answer that question — a value ever being written into the column at all — never happened.
The client-approvals table's own schema has carried a column recording who responded to a given decision. This schema is captured in a dedicated reference snapshot. This is because the table itself predates the project's migration history. The column has its own purpose-built index. This has been true for the table's entire life. Confirming whether that column was actually ever populated meant checking every place that ever wrote a decision into the table. It meant not assuming the most obviously relevant one had it covered. These places were the approval screen's own direct database write, which set only the decision's status and the time it was made. Another was the edge function handling calendar and deliverable decisions. This was thirteen hundred lines, searched directly for the column's own name — zero matches. The third was the separate service handling batch planning-day approvals. This was searched the same way — zero matches. Three independently written, independently maintained code paths, spanning years of the table's use, all wrote decisions into the identical table. Not one of them had ever set the one column specifically built and indexed to record who made the decision.
The same investigation traced exactly how a single approve or reject action actually executed. It found the decision itself was never a single atomic operation. Approving one post ran as an ordered sequence of database calls from application code. It read the approval record to find the related task. It wrote the approval as approved. This was protected only by a check that it was still pending at the time. It read the workspace's own configured service-stage name. It read the related task's own details. It wrote the task's stage and status. Separately, and as a best-effort, it inserted a notification for the internal team. This was six steps and two tables. Zero of it was wrapped in a shared database transaction. No row lock was held across any of it beyond the single conditional update in step two. That specific update genuinely protected against the one race it was built for. This was two people deciding the same item within the same instant. But nothing protected the OTHER five steps from running inconsistently with each other if any one of them behaved unexpectedly.
The fix addresses both findings with the same structural change. This is one dedicated, security-scoped database function per decision type. Examples are a standalone post, a planning day, a batch of planning days, a finished deliverable, an internal review. Each function opens by taking an explicit lock on the specific approval row before evaluating anything else. Nothing else can act on that same row until the function finishes. Every related write for that one decision happens inside that same function. This includes the approval's own status, the connected task or content item, and now the identity of whoever actually made the call. It happens as a single transaction. It either all commits together, or none of it does. This closes the six-step, two-table sequence into one atomic unit. The responding identity is available directly, inside the database. This is at the exact moment the decision is being recorded. So, the column that had sat indexed and empty since the table's own creation is finally set. This is not a separate afterthought bolted onto the old flow. It is one more field written by the same atomic operation that decides everything else.
A dedicated database function per decision type performs the ENTIRE decision. This includes status change, connected record updates, and who-responded. It does this as one atomic transaction.
Each function takes an explicit row lock before evaluating or changing anything. This closes the exposure window that previously existed. That window was across a six-step, un-transacted sequence run from application code.
The column recording who responded to a decision is now set by every decision path. This is for the first time in the column's own lifetime. This column was present in the table's schema, with its own dedicated index, since before this fix.
A batch decision runs as a single request. This is for approving every remaining planning day in a month in one action. It evaluates each item through the identical per-item function. It skips anything already decided. It does not fail the whole batch on one already-answered item.
An approver can now leave a written comment as part of approving an item. This is a new column added by the same migration. The previous schema had no field to hold this at all.
The frontend no longer performs any of the multi-step orchestration itself. It calls the appropriate decision function once. It reads back a structured result. It does not sequence reads and writes across two tables from application code.
Every client approval decision in Centriu Axis now runs as a single, row-locked, all-or-nothing transaction. This is instead of an unprotected multi-step sequence across two tables. As part of that same write, a column is finally set on every decision going forward. This column had been present and indexed on the approvals table since before this fix. But it was never once populated by any of its three independent write paths.
Every client approval decision in Centriu Axis now runs as a single, row-locked, all-or-nothing transaction. This is instead of an unprotected multi-step sequence across two tables. As part of that same write, a column is finally set on every decision going forward. This column had been present and indexed on the approvals table since before this fix. But it was never once populated by any of its three independent write paths.
A team lead reviews a client's approval history. This is to understand a recent dispute over who signed off on a specific post. The approval record clearly shows the item was approved, and when. The column built specifically to record who is sitting right there. It is indexed for exactly this kind of lookup. It is empty. It has been empty for every decision ever recorded in that table. This is regardless of which of the three code paths made it. This is because none of them had ever set it. After the fix, the identical lookup on a new decision returns a real answer. This is because the column is now set by the same atomic operation that records everything else about the decision.

It was confirmed directly by searching each of the three independent code paths that ever wrote a decision into the table for the column's own name. There were zero matches in any of them. This is despite the column and its own dedicated index existing on the table the whole time.
A dedicated index is an ongoing cost. This cost is paid on every write to the table. It is specifically so that column can be looked up quickly later. Paying that cost while the column is never actually filled means the underlying question it was built to answer could never be answered.
Approving or rejecting a single post ran as up to six separate database reads and writes across two tables from application code. There was no shared transaction. There was no row lock protecting the sequence beyond a single conditional update.
One dedicated database function per decision type now locks the relevant row. It performs every related write as a single all-or-nothing transaction. It records who responded as part of that same write.
No. Decisions made before this fix have no responding identity to recover. The column is populated going forward. This starts with decisions made after the fix.
It is sold by subscription with a published starting price. Exact current values are on the central pricing page.
Centriu Axis's client-approvals table has carried a column recording exactly who responded to an approval decision. It has its own dedicated database index. This index was built specifically to look answers up by it. This has been true for as long as the table itself has existed. Every one of the three independent code paths that ever wrote a decision to that table left that column empty every single time. These paths were the approval screen's own direct write, the calendar and deliverables edge function, and the batch-planning service. None of them ever set it. A column purpose-built, and specifically indexed, to answer "who approved this" had structurally never been able to answer it. The same investigation found the decision itself was never atomic. Approving or rejecting a single post ran as an unprotected sequence of up to six separate reads and writes across two tables. There was no database transaction and no row lock holding any of it together beyond a single conditional update. The fix replaces that sequence with one locked, transactional function per decision type. It takes a lock on the row before evaluating anything. It performs every related write as a single all-or-nothing transaction. As part of that same write, it finally stamps who responded. This closes a gap in a column that had been sitting there, indexed and unused, the whole time.