๐ฎ GOD-MOD
๐ Contexto do Sistema
MABUS Analytics รฉ um sistema de inteligรชncia para licitaรงรตes pรบblicas que integra dados do Nextcloud Deck para anรกlise estratรฉgica de oportunidades B2G (Business-to-Government).
๐ Fluxo de Dados
โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ
โ Nextcloud Deck โโโโโโถโ JSON Export โโโโโโถโ MABUS Import โ
โ (Kanban Board) โ โ (Manual/API) โ โ (DeckImporter) โ
โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โผ โ
โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ Boards โโโโถโ Stacks โโโโถโ Cards โโโโถโ Card Labels โ โCustom Tagsโ โ
โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ โ
โ POSTGRESQL DATABASE โ ASSIGNED USERS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ โ Dashboard โ โ Cards CRUD โ โ Analytics โ โ GOD-MOD โ โ
โ โ (Stats/KPI) โ โ (List/Edit) โ โ (Graphs) โ โ (You Are Here)โ โ
โ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ LARAVEL APPLICATION LAYER โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ฏ Objetivos do Sistema
- Sincronizar: Importar cards do Nextcloud Deck preservando hierarquia e metadados
- Analisar: Calcular mรฉtricas IPM (Viabilidade, Complexidade, Lucratividade, Chance, Risco)
- Rastrear: Acompanhar status de licitaรงรตes (Pendente โ Acompanhando โ Ganho/Perdido)
- Reportar: Gerar anรกlises de win rate, volume por portal, tendรชncias
๐ Diagrama de Relacionamento (ER)
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ BOARDS โโโโโโถโ STACKS โโโโโโถโ CARDS โ
โโโโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ id โ โ id โ โ id (PK) โ
โ deck_board_id โ โ board_id (FK) โ โ deck_card_id (UK) โ
โ title โ โ deck_stack_id โ โ title, description โ
โ owner โ โ title โ โ analyst, user_status, defeat_reason โ
โ color โ โ stack_order โ โ viabilidade_tatica, complexidade... โ
โ archived โ โโโโโโโโโโโโโโโโโโโ โ portal, orgao, valor_estimado โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ
โ โ
โโโโโโโโโโโโโโผโโโ โโโโโโโผโโโโโโโโโโโโโโ
โ ASSIGNED_USERSโ โ CARD_LABELS โ
โโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโค
โ card_id (FK) โ โ card_id (FK) โ
โ uid โ โ category, value โ
โ displayname โ โ raw_label, color โ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโผโโโ
โ CUSTOM_TAGS โ
โโโโโโโโโโโโโโโโโค
โ card_id (FK) โ
โ tag_name โ
โ tag_value โ
โโโโโโโโโโโโโโโโโ
๐ Cardinalidades
boardsโstacks: 1:N (Um board tem vรกrias colunas)stacksโcards: 1:N (Uma coluna tem vรกrios cards)cardsโassigned_users: 1:N (Card pode ter mรบltiplos responsรกveis)cardsโcard_labels: 1:N (Card pode ter mรบltiplas labels)cardsโcustom_tags: 1:N (Tags personalizadas)
๐ Ciclo de Vida do Card
โโโโโโโโโโโโโโโ
โ IMPORT โ
โ (via JSON) โ
โโโโโโโโฌโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโ
โโโโโโโโโถโ PENDING โโโโโโโโโโ Status inicial
โ โโโโโโโโฌโโโโโโโ
โ โ
โ Anรกlise โ Analista avalia
โ necessรกria โ viabilidade
โ โผ
โ โโโโโโโโโโโโโโโ
โ โ TRACKING โโโโโโโโโโ Acompanhando licitaรงรฃo
โ โโโโโโโโฌโโโโโโโ
โ โ
โ โ Resultado do pregรฃo
โ โ
โโโโโโโโดโโโโโโโ โโโโโโผโโโโโ
โ โ โ โ
โผ โผ โผ โผ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ WON โ โ LOST โ
โ โ
Ganho โ โ โ Perdido โ
โโโโโโโโโโโโโโโ โโโโโโโโฌโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโ
โdefeat_reasonโ โโโโโ Motivo registrado
โ (obrigatรณrio)โ
โโโโโโโโโโโโโโโ
๐ Mรฉtricas IPM (รndice de Priorizaรงรฃo MABUS)
Viabilidade Tรกtica
Capacidade de atender os requisitos tรฉcnicos
Complexidade Operacional
Dificuldade de execuรงรฃo/entrega
Lucratividade Potencial
Margem esperada do contrato
Chance de Vitรณria
Probabilidade de ganhar a licitaรงรฃo
Risco Operacional
Riscos associados ร execuรงรฃo
๐ฅ Fluxo de Importaรงรฃo
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DECK IMPORTER SERVICE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ โผ โผ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Parse JSON โ โ Upsert Board โ โ Process Stacks โ
โ - Validate โโโโโโโโโโถโ - deck_board_idโโโโโโโโโโถโ - Per board โ
โ - Extract data โ โ - Title/Owner โ โ - Order โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Process Cards โ โ Parse Labels โ โ Extract IPM โ
โ - deck_card_id โโโโโโโโโโถโ - Normalize โโโโโโโโโโถโ - 5 mรฉtricas โ
โ - All fields โ โ - Category โ โ - Score final โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโโโโ
โ Assign Users โ
โ - Multi-assign โ
โ - Displayname โ
โโโโโโโโโโโโโโโโโโโ
๐ Estratรฉgia de Deduplicaรงรฃo
O sistema usa deck_card_id como chave รบnica para evitar duplicatas:
Card::updateOrCreate(
['deck_card_id' => $cardData['deck_card_id']],
[...$allCardFields]
);
๐ Dicionรกrio de Dados
๐ cards Principal
| Campo | Tipo | Descriรงรฃo | Uso em IA/Grรกficos |
|---|---|---|---|
id |
bigint | Chave primรกria | Identificador รบnico |
deck_card_id |
bigint | ID original do Nextcloud Deck | Deduplicaรงรฃo na sincronizaรงรฃo |
title |
varchar(500) | Tรญtulo da licitaรงรฃo | Busca textual, NLP |
description |
longText | Descriรงรฃo completa (markdown) | Extraรงรฃo de contexto por IA |
analyst |
varchar(100) | Analista responsรกvel | ๐ GROUP BY analyst |
user_status |
enum | pending / tracking / won / lost | ๐ GROUP BY user_status |
defeat_reason |
text | Motivo da derrota | Anรกlise de padrรตes de perda |
valor_estimado |
decimal(15,2) | Valor do pregรฃo | ๐ SUM(), AVG() por perรญodo |
viabilidade_tatica |
varchar(20) | Alta / Mรฉdia / Baixa | Score IPM estratรฉgico |
complexidade_operacional |
varchar(20) | Alta / Mรฉdia / Baixa | Score IPM operacional |
lucratividade_potencial |
varchar(20) | Alta / Mรฉdia / Baixa | Score IPM financeiro |
chance_vitoria |
varchar(20) | Alta / Mรฉdia / Baixa | Score IPM probabilidade |
risco_operacional |
varchar(20) | Alta / Mรฉdia / Baixa | Score IPM risco |
ipm_score |
varchar(20) | Score final IPM | Decisรฃo estratรฉgica final |
portal |
varchar(100) | Portal de origem | ๐ GROUP BY portal |
orgao |
varchar(255) | รrgรฃo pรบblico | Filtro geogrรกfico/institucional |
extracted_date |
date | Data de extraรงรฃo | ๐ Timeline, tendรชncias |
due_date |
date | Prazo limite | Alertas de vencimento |
board_name |
varchar(255) | Nome do board original | Segmentaรงรฃo por board |
๐ข boards
| Campo | Tipo | Descriรงรฃo |
|---|---|---|
id |
bigint | PK |
deck_board_id |
bigint | ID รบnico do Deck |
title |
varchar | Nome do board |
owner |
varchar | Proprietรกrio |
archived |
boolean | Status de arquivamento |
๐ stacks
| Campo | Tipo | Descriรงรฃo |
|---|---|---|
id |
bigint | PK |
board_id |
bigint | FK โ boards |
deck_stack_id |
bigint | ID รบnico do Deck |
title |
varchar | Nome da coluna |
stack_order |
int | Ordem de exibiรงรฃo |
๐ฅ assigned_users
| Campo | Tipo | Descriรงรฃo |
|---|---|---|
id |
bigint | PK |
card_id |
bigint | FK โ cards |
uid |
varchar | ID do usuรกrio |
displayname |
varchar | Nome de exibiรงรฃo |
๐ท๏ธ card_labels
| Campo | Tipo | Descriรงรฃo |
|---|---|---|
id |
bigint | PK |
card_id |
bigint | FK โ cards |
category |
varchar | Categoria normalizada |
value |
varchar | Valor normalizado |
raw_label |
varchar | Label original |
๐ custom_tags
| Campo | Tipo | Descriรงรฃo |
|---|---|---|
id |
bigint | PK |
card_id |
bigint | FK โ cards |
tag_name |
varchar | Nome da tag |
tag_value |
varchar | Valor da tag |
๐ฏ Receitas de Cruzamento
Copie e use para gerar grรกficos! Clique no cรณdigo para copiar.
๐ Cards por Status
Distribuiรงรฃo do funil de vendas
SELECT user_status, COUNT(*) as total
FROM cards
GROUP BY user_status
ORDER BY total DESC;
Eloquent:
Card::groupBy('user_status')->selectRaw('user_status, COUNT(*) as total')->get()
๐ Win Rate por Analista
Performance individual
SELECT
analyst,
SUM(CASE WHEN user_status='won' THEN 1 ELSE 0 END) as won,
SUM(CASE WHEN user_status='lost' THEN 1 ELSE 0 END) as lost,
ROUND(SUM(CASE WHEN user_status='won' THEN 1 ELSE 0 END) * 100.0 /
NULLIF(SUM(CASE WHEN user_status IN ('won','lost') THEN 1 ELSE 0 END), 0), 2) as win_rate
FROM cards
WHERE analyst IS NOT NULL
GROUP BY analyst;
๐ Valor por Portal
Volume financeiro por origem
SELECT
portal,
COUNT(*) as total_cards,
SUM(valor_estimado) as valor_total,
AVG(valor_estimado) as valor_medio
FROM cards
WHERE portal IS NOT NULL
GROUP BY portal
ORDER BY valor_total DESC;
๐ Tendรชncia Mensal
Volume ao longo do tempo
SELECT
DATE_FORMAT(extracted_date, '%Y-%m') as mes,
COUNT(*) as total,
SUM(CASE WHEN user_status='won' THEN 1 ELSE 0 END) as ganhos,
SUM(CASE WHEN user_status='lost' THEN 1 ELSE 0 END) as perdidos
FROM cards
WHERE extracted_date IS NOT NULL
GROUP BY mes
ORDER BY mes DESC
LIMIT 12;
๐ Distribuiรงรฃo IPM
Score estratรฉgico
SELECT
viabilidade_tatica,
COUNT(*) as total,
ROUND(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM cards WHERE viabilidade_tatica IS NOT NULL), 2) as percentual
FROM cards
WHERE viabilidade_tatica IS NOT NULL
GROUP BY viabilidade_tatica;
๐ Motivos de Derrota
Anรกlise de padrรตes de perda
SELECT
defeat_reason,
COUNT(*) as ocorrencias
FROM cards
WHERE user_status = 'lost'
AND defeat_reason IS NOT NULL
AND defeat_reason != ''
GROUP BY defeat_reason
ORDER BY ocorrencias DESC
LIMIT 10;
โก Eloquent Quick Reference
Card::with(['labels', 'customTags'])->get()
Carregar com relacionamentos
Card::where('user_status', 'won')->count()
Contar ganhos
Card::whereNotNull('analyst')->distinct('analyst')->pluck('analyst')
Lista de analistas รบnicos
Card::whereBetween('extracted_date', [$start, $end])->get()
Filtrar por perรญodo
Card::where('valor_estimado', '>', 100000)->sum('valor_estimado')
Soma de valores altos
$card->labels()->where('category', 'status')->first()
Label especรญfica de um card
Card::selectRaw('analyst, COUNT(*) as total')->groupBy('analyst')->orderByDesc('total')->get()
Top analistas por volume
Board::with(['stacks.cards'])->get()
Hierarquia completa
๐ Endpoints da API
| Mรฉtodo | Endpoint | Descriรงรฃo |
|---|---|---|
| GET | /cards |
Listar cards com filtros |
| GET | /cards/create |
Form de criaรงรฃo |
| POST | /cards |
Criar novo card |
| GET | /cards/{id}/edit |
Form de ediรงรฃo |
| PUT | /cards/{id} |
Atualizar card |
| DELETE | /cards/{id} |
Excluir card |
| GET | /api/cards/{id} |
Detalhes JSON |
| PATCH | /api/cards/{id} |
Update parcial (inline edit) |
| GET | /api/cards/{id}/tags |
Listar tags |
| POST | /api/cards/{id}/tags |
Adicionar tag |
| DELETE | /api/tags/{id} |
Remover tag |