# Sistema de Checkpoint — /rotina-imperatriz

## Por que existe

A skill `/rotina-imperatriz` roda 5 fases sequenciais. Sessão completa do zero leva **45-90 minutos**. Nenhuma mentorada vai conseguir sentar e fazer tudo de uma vez — filho chama, reunião aparece, energia cai.

A skill PRECISA permitir pausar e voltar exatamente onde parou. Sem perder resposta nenhuma. Sem refazer pergunta nenhuma.

Solução: arquivo `.estado.json` dentro da pasta do projeto da mentorada.

---

## Onde o arquivo mora

```
~/Documents/Obsidian Vault/03 - Projetos/Rotina-Imperatriz-[Nome]/
├── .estado.json              ← arquivo de checkpoint (oculto, começa com ponto)
├── .estado.json.backup.20260520  ← versões antigas arquivadas
├── 00-Diagnostico-Inicial.md
├── 01-Sete-Pilares-Score.md
├── ... (resto dos 22 arquivos)
└── index.html
```

O arquivo é **oculto** (prefixo `.`) pra não poluir a visualização no Obsidian/Finder. Mentorada não precisa ver, é uso interno da skill.

---

## Estrutura do JSON

```json
{
  "versao_schema": "1.0",
  "mentorada": {
    "nome": "Carolina Mendes",
    "negocio": "Consultoria nutricional online",
    "data_criacao": "2026-05-20T14:32:18-03:00"
  },
  "fase_atual": 2,
  "subfase": {
    "pilar_atual": "P3-Marketing",
    "etapa_atual": "2.3-Validacao-Eixo",
    "pergunta_atual": 7
  },
  "respostas": {
    "fase_0": {
      "nome_mentorada": "Carolina Mendes",
      "negocio": "Consultoria nutricional online",
      "faturamento_atual_mes": "R$ 8.500",
      "tempo_negocio": "2 anos e 4 meses",
      "tem_diagnostico_anexo": false,
      "tem_eixo_anexo": false
    },
    "fase_1": {
      "P1_Atendimento": {
        "nota": 4,
        "evidencia": "Atende sozinha pelo WhatsApp, sem CRM",
        "principal_dor": "Perde lead porque demora pra responder",
        "tempo_gasto_semanal_horas": 12
      },
      "P2_Vendas": {
        "nota": 6,
        "evidencia": "Fecha 30% dos diagnósticos que faz",
        "principal_dor": "Sem follow-up de quem não fechou",
        "tempo_gasto_semanal_horas": 8
      },
      "P3_Marketing": {
        "nota": 3,
        "evidencia": "Posta no Instagram quando lembra",
        "principal_dor": "Não tem linha editorial, posta no improviso",
        "tempo_gasto_semanal_horas": 6
      }
    },
    "fase_2": {
      "projeto_ancora_candidato_1": "Estruturar linha editorial + 30 posts",
      "projeto_ancora_candidato_2": "CRM no Notion + follow-up automático"
    }
  },
  "pontuacao_imperio_ia": {
    "P1_Atendimento": 4,
    "P2_Vendas": 6,
    "P3_Marketing": 3,
    "P4_Operacao": null,
    "P5_Financeiro": null,
    "P6_Conteudo": null,
    "P7_Lideranca": null,
    "total": null,
    "media": null
  },
  "projeto_ancora": null,
  "nivel": null,
  "urgencia": null,
  "tempo_disponivel_horas_semana": null,
  "compromissos_fixos": [],
  "timestamp": "2026-05-20T15:18:42-03:00",
  "tempo_total_sessao_minutos": 46
}
```

---

## Campos detalhados

### `fase_atual` (obrigatório)

Valor inteiro de 0 a 5:

| Valor | Significado |
|-------|-------------|
| 0 | Abertura — capturando dados básicos da mentorada |
| 1 | Diagnóstico dos 7 Pilares do Império IA |
| 2 | Escolha do Projeto Âncora |
| 3 | Construção da Rotina (urgência, tempo, compromissos) |
| 4 | Mapa do Arsenal + Sistema de Ondas |
| 5 | COMPLETO — todos os 22 arquivos + dashboard + checklist gerados |

### `subfase` (obrigatório quando fase_atual = 1 ou 2)

Permite retomar com precisão cirúrgica dentro do pilar e da pergunta.

- `pilar_atual`: string `"P1-Atendimento"`, `"P2-Vendas"`, ..., `"P7-Lideranca"`
- `etapa_atual`: string descritiva tipo `"2.3-Validacao-Eixo"`
- `pergunta_atual`: inteiro indicando a pergunta dentro da etapa

### `respostas` (cumulativo)

Objeto que vai **crescendo** a cada fase. Nunca apaga respostas antigas — só adiciona. Estrutura espelha as fases:

```json
{
  "fase_0": { ... },
  "fase_1": {
    "P1_Atendimento": { ... },
    "P2_Vendas": { ... },
    ...
  },
  "fase_2": { ... },
  "fase_3": { ... },
  "fase_4": { ... }
}
```

### `pontuacao_imperio_ia` (preenchido ao fim da Fase 1)

```json
{
  "P1_Atendimento": 4,
  "P2_Vendas": 6,
  "P3_Marketing": 3,
  "P4_Operacao": 5,
  "P5_Financeiro": 7,
  "P6_Conteudo": 4,
  "P7_Lideranca": 6,
  "total": 35,
  "media": 5.0
}
```

Notas de 0 a 10. `total` e `media` calculados pela skill.

### `projeto_ancora` (preenchido ao fim da Fase 2)

String descrevendo o projeto escolhido. Ex: `"Estruturar linha editorial + 30 posts pros próximos 30 dias"`

### `nivel` (calculado pela skill após Fase 1)

Um de quatro valores fixos baseado na média dos 7 pilares:

| Nível | Faixa de média |
|-------|----------------|
| `"Sobrevivente"` | 0.0 – 3.9 |
| `"Tatico"` | 4.0 – 6.4 |
| `"Inteligente"` | 6.5 – 8.4 |
| `"Imperio"` | 8.5 – 10.0 |

### `urgencia` (Fase 3)

String controlada:
- `"baixa"` — sem prazo crítico, ritmo confortável
- `"media"` — meta dos próximos 90 dias
- `"alta"` — fogo nas calças, próximos 30 dias
- `"critica"` — risco de fechar negócio, agora

### `tempo_disponivel_horas_semana` (Fase 3)

Inteiro. Quantas horas a mentorada tem por semana pra dedicar ao projeto âncora.

### `compromissos_fixos` (Fase 3)

Array de objetos:

```json
[
  {
    "nome": "Buscar filho na escola",
    "dias": ["segunda", "terca", "quarta", "quinta", "sexta"],
    "horario_inicio": "11:30",
    "horario_fim": "12:30",
    "tipo": "familiar_inegociavel"
  },
  {
    "nome": "Atendimento clínica presencial",
    "dias": ["terca", "quinta"],
    "horario_inicio": "14:00",
    "horario_fim": "18:00",
    "tipo": "trabalho_inegociavel"
  }
]
```

Esses compromissos viram **blocos travados** na rotina semanal. A skill encaixa o resto ao redor deles, nunca por cima.

### `timestamp`

ISO 8601 com timezone. Atualizado a cada checkpoint salvo.

### `tempo_total_sessao_minutos`

Soma dos minutos gastos em todas as vezes que a mentorada retomou a sessão. Útil pra skill saber se ela tá levando muito tempo numa fase e oferecer pausa.

---

## Fluxo de leitura ao iniciar a skill

```
1. Skill é invocada com `/rotina-imperatriz`
2. Verifica se mentorada tem pasta `Rotina-Imperatriz-[Nome]/` no vault
   ├── NÃO → começa do zero, cria a pasta, cria `.estado.json` com fase_atual=0
   └── SIM → procura `.estado.json` dentro
       ├── NÃO existe → começa do zero (algo deu errado antes, registra log)
       └── EXISTE → lê e verifica `fase_atual`
           ├── fase_atual == 5 → "Você já completou sua Rotina Imperatriz em [DATA].
           │   Quer:
           │     1) Ver a rotina atual (abre dashboard)
           │     2) Rodar o /rotina-imperatriz pulso pra checkar a semana
           │     3) Rodar o /rotina-imperatriz revisar pra recalibrar (90 dias depois)
           │     4) Começar uma rotina nova do zero (arquiva a anterior)
           │   "
           └── fase_atual < 5 → "Você parou na [Fase X — Pilar Y — Etapa Z]
                   em [TIMESTAMP]. Foram [N] minutos de sessão até agora.
                   Quer:
                     1) Retomar daí (recomendado)
                     2) Voltar uma fase pra revisar
                     3) Começar do zero (arquiva o que já fez)
                   "
```

---

## Comportamento ao RETOMAR

Quando a mentorada escolhe retomar (opção 1):

1. Skill **pula tudo** até a fase/subfase/pergunta indicada
2. Mostra resumo: *"Você já respondeu sobre P1, P2 e P3. Próxima pergunta é sobre P3 — Marketing, pergunta 7 de 12: [pergunta]"*
3. Continua dali sem repetir nada
4. A cada resposta nova, atualiza `.estado.json` (escrita atômica — escreve em `.estado.json.tmp` e renomeia)

---

## Comportamento ao COMEÇAR DO ZERO (com estado existente)

Quando a mentorada escolhe começar do zero (opção 3):

1. Skill renomeia `.estado.json` pra `.estado.json.backup.YYYYMMDD-HHMMSS`
2. Se já existir um backup do mesmo dia, vira `...backup.YYYYMMDD-HHMMSS-v2`
3. Cria `.estado.json` novo com `fase_atual=0`
4. **Não apaga os 22 arquivos `.md`** — eles também são arquivados pra pasta `_arquivo-[DATA]/` dentro do projeto
5. Confirma com mentorada: *"Sessão anterior arquivada em `_arquivo-2026-05-20/`. Recomeçando do zero."*

---

## Escrita atômica (anti-corrupção)

Pra evitar arquivo corrompido se a skill travar no meio da escrita:

```
1. Skill escreve estado novo em `.estado.json.tmp`
2. Faz fsync (força gravar no disco)
3. Renomeia `.estado.json.tmp` pra `.estado.json` (operação atômica no filesystem)
```

Se travar entre passos 1 e 3, o `.estado.json` antigo continua válido.

---

## Quando salvar checkpoint

A skill salva o `.estado.json` em **5 momentos**:

1. **Início de cada fase** (atualiza `fase_atual`)
2. **Fim de cada pilar** dentro da Fase 1 (P1 concluído → salva; P2 concluído → salva; etc)
3. **A cada 5 perguntas respondidas** (limite de quanto a mentorada perde se travar)
4. **Antes de qualquer cálculo pesado** (ex: antes de gerar os 22 arquivos finais)
5. **Após gerar cada arquivo final** (assim se travar gerando o arquivo 15, ela retoma do 16)

---

## Exemplo de JSON em 3 momentos da jornada

### Momento A — mentorada acabou de começar (fim da Fase 0)

```json
{
  "versao_schema": "1.0",
  "mentorada": {
    "nome": "Carolina Mendes",
    "negocio": "Consultoria nutricional online",
    "data_criacao": "2026-05-20T14:32:18-03:00"
  },
  "fase_atual": 1,
  "subfase": {
    "pilar_atual": "P1-Atendimento",
    "etapa_atual": "1.1-Nota-Inicial",
    "pergunta_atual": 1
  },
  "respostas": {
    "fase_0": {
      "nome_mentorada": "Carolina Mendes",
      "negocio": "Consultoria nutricional online",
      "faturamento_atual_mes": "R$ 8.500",
      "tempo_negocio": "2 anos e 4 meses",
      "tem_diagnostico_anexo": false,
      "tem_eixo_anexo": false
    }
  },
  "pontuacao_imperio_ia": {
    "P1_Atendimento": null, "P2_Vendas": null, "P3_Marketing": null,
    "P4_Operacao": null, "P5_Financeiro": null, "P6_Conteudo": null,
    "P7_Lideranca": null, "total": null, "media": null
  },
  "projeto_ancora": null,
  "nivel": null,
  "urgencia": null,
  "tempo_disponivel_horas_semana": null,
  "compromissos_fixos": [],
  "timestamp": "2026-05-20T14:38:02-03:00",
  "tempo_total_sessao_minutos": 6
}
```

### Momento B — mentorada pausou no meio da Fase 1 (P4 em andamento)

```json
{
  "versao_schema": "1.0",
  "mentorada": {
    "nome": "Carolina Mendes",
    "negocio": "Consultoria nutricional online",
    "data_criacao": "2026-05-20T14:32:18-03:00"
  },
  "fase_atual": 1,
  "subfase": {
    "pilar_atual": "P4-Operacao",
    "etapa_atual": "1.4-Tempo-Gasto",
    "pergunta_atual": 3
  },
  "respostas": {
    "fase_0": { "...": "..." },
    "fase_1": {
      "P1_Atendimento": { "nota": 4, "evidencia": "...", "principal_dor": "...", "tempo_gasto_semanal_horas": 12 },
      "P2_Vendas":      { "nota": 6, "evidencia": "...", "principal_dor": "...", "tempo_gasto_semanal_horas": 8 },
      "P3_Marketing":   { "nota": 3, "evidencia": "...", "principal_dor": "...", "tempo_gasto_semanal_horas": 6 },
      "P4_Operacao":    { "nota": 5, "evidencia": "Tem planilha de clientes mas atualiza manual", "principal_dor": null, "tempo_gasto_semanal_horas": null }
    }
  },
  "pontuacao_imperio_ia": {
    "P1_Atendimento": 4, "P2_Vendas": 6, "P3_Marketing": 3,
    "P4_Operacao": null, "P5_Financeiro": null, "P6_Conteudo": null,
    "P7_Lideranca": null, "total": null, "media": null
  },
  "projeto_ancora": null,
  "nivel": null,
  "urgencia": null,
  "tempo_disponivel_horas_semana": null,
  "compromissos_fixos": [],
  "timestamp": "2026-05-20T15:18:42-03:00",
  "tempo_total_sessao_minutos": 46
}
```

### Momento C — sessão COMPLETA

```json
{
  "versao_schema": "1.0",
  "mentorada": {
    "nome": "Carolina Mendes",
    "negocio": "Consultoria nutricional online",
    "data_criacao": "2026-05-20T14:32:18-03:00",
    "data_conclusao": "2026-05-20T16:24:11-03:00"
  },
  "fase_atual": 5,
  "subfase": null,
  "respostas": { "fase_0": { "..." : "..." }, "fase_1": { "..." : "..." }, "fase_2": { "..." : "..." }, "fase_3": { "..." : "..." }, "fase_4": { "..." : "..." } },
  "pontuacao_imperio_ia": {
    "P1_Atendimento": 4, "P2_Vendas": 6, "P3_Marketing": 3,
    "P4_Operacao": 5, "P5_Financeiro": 7, "P6_Conteudo": 4,
    "P7_Lideranca": 6, "total": 35, "media": 5.0
  },
  "projeto_ancora": "Estruturar linha editorial + 30 posts pros próximos 30 dias",
  "nivel": "Tatico",
  "urgencia": "media",
  "tempo_disponivel_horas_semana": 18,
  "compromissos_fixos": [
    { "nome": "Buscar filho na escola", "dias": ["segunda","terca","quarta","quinta","sexta"], "horario_inicio": "11:30", "horario_fim": "12:30", "tipo": "familiar_inegociavel" },
    { "nome": "Atendimento clínica presencial", "dias": ["terca","quinta"], "horario_inicio": "14:00", "horario_fim": "18:00", "tipo": "trabalho_inegociavel" }
  ],
  "arquivos_gerados": [
    "00-Diagnostico-Inicial.md", "01-Sete-Pilares-Score.md", "02-Projeto-Ancora.md",
    "03-Rotina-Diaria.md", "04-Rotina-Semanal.md", "05-Compromissos-Fixos.md",
    "06-Mapa-do-Arsenal.md", "07-Sistema-de-Ondas.md", "08-Pulso-Imperatriz-Roteiro.md",
    "09-Calibrador-Esforco.md", "10-Tres-Principios.md", "11-Indicadores-Semanais.md",
    "12-Bloqueios-Antecipados.md", "13-Volume-Por-Pilar.md", "14-Receita-Domingo-Sagrado.md",
    "15-Recompensa-Por-Fase.md", "16-Plano-90-Dias.md", "17-Reposicionamento-Trimestral.md",
    "18-Mantras-Imperatriz.md", "19-Bandeiras-Vermelhas.md", "20-Index-Mestre.md", "21-Apresentacao-Final.md"
  ],
  "dashboard_gerado": true,
  "checklist_a4_gerado": true,
  "timestamp": "2026-05-20T16:24:11-03:00",
  "tempo_total_sessao_minutos": 112
}
```

---

## Mensagens da skill ao retomar (literais)

### Cenário: parou no meio da Fase 1

> Oi de novo, Carolina. Vi aqui que a gente parou no **Pilar 4 — Operação**, na pergunta 3 (sobre quantas horas por semana você gasta com tarefas operacionais).
>
> Já temos suas notas dos Pilares 1, 2 e 3 salvas. Foram 46 minutos de sessão até agora.
>
> Quer:
> 1. **Retomar daí** — continuamos do Pilar 4, pergunta 3 (recomendado)
> 2. **Voltar pra revisar** — reabrimos um pilar que você já respondeu
> 3. **Começar do zero** — arquivo o que já fez e recomeçamos
>
> Digita 1, 2 ou 3.

### Cenário: parou na Fase 2 (escolha do Projeto Âncora)

> Carolina, a gente tava na **Fase 2 — Projeto Âncora**. Você já me deu duas opções candidatas:
> - Estruturar linha editorial + 30 posts
> - CRM no Notion + follow-up automático
>
> Faltava você escolher qual vira o âncora. Pronto pra decidir agora?

### Cenário: sessão JÁ COMPLETA (volta semanas depois)

> Sua Rotina Imperatriz foi concluída em **20 de maio de 2026** (3 dias atrás).
>
> O que você quer fazer agora?
> 1. **Ver a rotina** — abre o dashboard
> 2. **Pulso de domingo** — checkar a semana (45min) → `/rotina-imperatriz pulso`
> 3. **Recalibrar** — refazer parte do diagnóstico (recomendado a cada 90 dias) → `/rotina-imperatriz revisar`
> 4. **Começar do zero** — arquivo a anterior e crio uma rotina nova

---

## Por que isso é Imperatriz e não improviso

Mentorada não pode perder 46 minutos de resposta porque o iPhone descarregou ou o filho chamou. A skill **respeita o tempo dela**. Cada pergunta respondida é gravada. Cada pilar fechado é salvo. Cada pausa é digna.

Isso é o que diferencia um produto Imperatriz de um chatbot qualquer.
