Monthly close kickoff — initiates the month-end closing process with a checklist, simplified P&L (Stripe + Omie + Evo Academy), pending reconciliations, receivables, payables, and action items for the finance team. Trigger when user says 'monthly close', 'start closing', 'closing kickoff', or on the 1st of each month.
Monthly routine that initiates the closing process: generates a checklist, simplified income statement, pending items, and action items for the finance team.
Always respond in English.
IMPORTANT: This routine runs on the 1st of each month and refers to the PREVIOUS month's close.
Use /int-stripe:
Use /int-omie:
Call GET /api/v1/analytics/summary?period=30d (env: $EVO_ACADEMY_BASE_URL, auth: Bearer $EVO_ACADEMY_API_KEY):
revenue.total → receita bruta do mêsorders.completed / pending / refunded → contagem por statussubscriptions.active / cancelled → base e churn do mêsFetch todos os orders do mês: GET /api/v1/analytics/orders?status=completed&created_after=YYYY-MM-01&created_before=YYYY-MM-31&per_page=100
has_more=falseamount → receita total do mêsis_renewal=true) vs novos clientesFetch assinaturas ativas no fim do mês: GET /api/v1/analytics/subscriptions?status=active&per_page=100
plan.price das ativasworkspace/finance/reports/monthly/ if it existsStructure the income statement with:
| Account | Actual | Prior Month | Variance |
|---|---|---|---|
| Gross Revenue (Stripe) | |||
| Gross Revenue (Evo Academy) | |||
| Gross Revenue (Omie/Services) | |||
| (-) Taxes | |||
| Net Revenue | |||
| (-) Personnel | |||
| (-) Infrastructure | |||
| (-) Third-party Services | |||
| (-) Marketing | |||
| (-) Other | |||
| Total Expenses | |||
| Operating Result | |||
| Margin |
Generate a checklist with initial status for each item:
Possible statuses:
done (checkmark) — already completed automaticallypending (circle) — needs to be doneblocked (x) — depends on something externalna (dash) — not applicable this monthList in clear bullets what the finance team needs to handle:
Relevant notes:
Badge:
Read the template at .claude/templates/html/custom/monthly-close.html and replace ALL {{PLACEHOLDER}}.
For checklist:
<div class="checklist-item">
<div class="check-icon done/pending/blocked/na">checkmark/circle/x/dash</div>
<div class="checklist-text">
<div class="cl-title">Item name</div>
<div class="cl-detail">Detail or observation</div>
</div>
<div class="checklist-owner">Finance / Admin / Auto</div>
</div>
For income statement:
<tr>
<td>Account name</td>
<td class="right">R$ X,XXX.XX</td>
<td class="right">R$ X,XXX.XX</td>
<td class="right var-positive/var-negative">+X% / -X%</td>
</tr>
Total rows use class="total":
<tr class="total">
<td>Operating Result</td>
<td class="right">R$ X,XXX.XX</td>
<td class="right">R$ X,XXX.XX</td>
<td class="right var-positive">+X%</td>
</tr>
Values in Brazilian format: R$ 1.234,56
Save to:
workspace/finance/reports/monthly/[C] YYYY-MM-monthly-close.html
Create the directory workspace/finance/reports/monthly/ if it does not exist.
## Monthly Close Kickoff generated
**File:** workspace/finance/reports/monthly/[C] YYYY-MM-monthly-close.html
**Month:** {reference month}
**Revenue:** R$ X,XXX | **Expenses:** R$ X,XXX | **Result:** R$ X,XXX
**Checklist:** X/10 completed
**Finance team pending items:** {N} items
Upon completion, send a short summary via Telegram to the user:
reply(chat_id="YOUR_CHAT_ID", text="...")