Schema
| Campo | Tipo | Descrição |
|---|
leadOrganizationId | string | PK — partition key. FK para LeadOrganization |
memoryTypeKey | string | SK — sort key. Formato: "purchase#product:whey_1kg" |
memoryType | enum | FACT, PREFERENCE, INTEREST, PURCHASE, SUPPORT, BEHAVIORAL, CAMPAIGN, FORM |
key | string | Chave da memória dentro do tipo, max 255. Ex: product:whey_1kg, ticket:T-456 |
value | JSON | Dados estruturados |
confidence | number | 0.0 a 1.0. Grau de certeza do sistema |
source | enum | AGENT_INFERRED, USER_DECLARED, SYSTEM_COMPUTED, EVENT_DERIVED |
sourceEventIds | list | IDs dos Events que geraram/atualizaram esta memória |
createdAt | datetime | Timestamp de criação |
updatedAt | datetime | Timestamp da última atualização |
expiresAt | number? | TTL em epoch seconds. DynamoDB auto-deleta itens expirados |
Banco de dados: DynamoDB. Memórias vivem no DynamoDB pela flexibilidade do schema (cada tipo de memória tem um value JSON diferente) e pelo padrão de acesso por partition key (todas as memórias de um lead em uma única query).
Memórias substituem a necessidade de tabelas específicas por fonte (transactions, form_responses, etc.) — todos os dados enriquecidos são armazenados como memórias com value JSON estruturado. Se uma memória estiver corrompida ou a lógica de derivação mudar, os eventos podem ser reprocessados para reconstruir todas as memórias.
Padrões de Acesso
| Padrão | Query |
|---|
| Buscar todas as memórias | Query PK = leadOrganizationId |
| Buscar por tipo | Query PK = leadOrganizationId, SK begins_with("purchase#") |
| Buscar item específico | GetItem PK = leadOrganizationId, SK = "purchase#last_transaction" |
| Upsert | PutItem com PK + SK (sobrescreve se existir) |
| Auto-expiração | DynamoDB TTL em expiresAt |
Tipos de Memória
| Tipo | Descrição | Exemplos de key |
|---|
FACT | Informação factual, declarada ou verificada | family, location, occupation |
PREFERENCE | Preferências comportamentais ou de comunicação | price_sensitivity, payment_method |
INTEREST | Interesse em um produto ou categoria | category:supplements, product:creatina |
PURCHASE | Histórico e padrões de compra | last_transaction, product:whey_1kg |
SUPPORT | Histórico de suporte | ticket:T-456 |
BEHAVIORAL | Padrões de comportamento observados | last_conversation, response_pattern |
CAMPAIGN | Histórico de interação com campanhas | campaign:camp_whey_recompra |
FORM | Respostas de formulários | pesq_sat_2026:como_nos_conheceu |
Regras de Negócio
- Unique em
(leadOrganizationId, memoryType, key) via PK + SK — permite upsert sem duplicatas
confidence varia de 0.0 a 1.0. USER_DECLARED = 1.0, AGENT_INFERRED pode ser menor
- Memórias são derivadas de Events pelo Memory Updater Lambda
sourceEventIds garante rastreabilidade: memórias que sobrescrevem (ex: last_transaction) contêm um único event ID; memórias que agregam (ex: product:whey_1kg) contêm todos os event IDs contribuintes
- Se uma memória estiver corrompida ou a lógica de derivação mudar, eventos podem ser reprocessados para reconstruir todas as memórias
expiresAt habilita memórias temporárias. DynamoDB TTL deleta automaticamente itens expirados
- Memórias substituem a necessidade de tabelas específicas por fonte (transactions, form_responses, etc.) — todos os dados enriquecidos são armazenados como memórias com
value JSON estruturado
Exemplo
[
{
"PK": "ORG#org_01HX#LEAD#lead_01HX",
"SK": "MEM#preference#preferred_channel",
"memoryType": "preference",
"key": "preferred_channel",
"value": { "channel": "WHATSAPP", "confidence": 0.92 },
"sourceEventIds": ["evt_01HX", "evt_02HX"]
},
{
"PK": "ORG#org_01HX#LEAD#lead_01HX",
"SK": "MEM#fact#company_size",
"memoryType": "fact",
"key": "company_size",
"value": { "employees": 150, "tier": "mid-market" }
}
]