Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:37:17 +08:00
commit ccb6e73621
13 changed files with 4816 additions and 0 deletions

View File

@@ -0,0 +1,730 @@
---
name: regulatory-templates-setup
description: |
Initial setup sub-skill - handles template selection and context initialization
for the 3-gate regulatory workflow.
trigger: |
- Called by regulatory-templates orchestrator at workflow start
- Need to select template type and initialize context
skip_when: |
- Not in regulatory-templates workflow
- Setup already completed for current template
sequence:
after: [regulatory-templates]
before: [regulatory-templates-gate1]
---
# Regulatory Templates - Initial Setup
## Overview
**This sub-skill handles the initial setup phase for regulatory template creation, including template selection and context initialization.**
**Parent skill:** `regulatory-templates`
**Output:** Complete initial context object with all selections and configurations
---
## Foundational Principle
**Setup initializes the foundation - errors here propagate through all 3 gates.**
Setup is not "just configuration" - it's critical validation:
- **Template selection**: Wrong template = entire workflow on wrong regulatory spec (hours wasted)
- **Context initialization**: Incomplete context = gates fail mysteriously downstream
- **Dictionary status check**: Skipped check = lost automation, unnecessary interactive validation
- **User awareness**: No alert about validation mode = poor UX, blocked progress
**Skipping setup steps means:**
- Hard-coded context bypasses validation (typos, wrong versions)
- Missing values cause gate failures (debugging waste)
- Silent dictionary check = user unprepared for interactive validation
- No audit trail of selections (compliance gap)
**Setup is the contract between user intent and gate execution. Get it wrong = everything downstream breaks.**
---
## When to Use
**Called by:** `regulatory-templates` skill at the beginning of the workflow
**Purpose:** Gather all user selections and initialize the context object that will flow through all gates
---
## NO EXCEPTIONS - Setup Requirements Are Mandatory
**Setup requirements have ZERO exceptions.** Foundation errors compound through all gates.
### Common Pressures You Must Resist
| Pressure | Your Thought | Reality |
|----------|--------------|---------|
| **Ceremony** | "User said CADOC 4010, skip selection" | Validation confirms, prevents typos, initializes full context |
| **Speed** | "Hard-code context, skip AskUserQuestion" | Bypasses validation, loses audit trail, breaks contract |
| **Simplicity** | "Dictionary check is file I/O ceremony" | Check determines validation mode (auto vs interactive 40 min difference) |
| **Efficiency** | "Skip user alert, they'll see validation later" | Poor UX, unprepared user, blocked progress |
### Setup Requirements (Non-Negotiable)
**Template Selection:**
- ✅ REQUIRED: Use AskUserQuestion for authority and template selection
- ❌ FORBIDDEN: Hard-code based on user message, skip selection dialog
- Why: Validation confirms correct template, prevents typos, establishes audit trail
**Dictionary Status Check:**
- ✅ REQUIRED: Check ~/.claude/docs/regulatory/dictionaries/ for template dictionary
- ❌ FORBIDDEN: Skip check, assume no dictionary exists
- Why: Determines validation mode (automatic vs interactive = 40 min time difference)
**User Alert:**
- ✅ REQUIRED: Alert user if interactive validation required (no dictionary)
- ❌ FORBIDDEN: "They'll figure it out in Gate 1"
- Why: User preparedness, UX, informed consent for 40-min validation process
**Complete Context:**
- ✅ REQUIRED: Initialize ALL context fields (authority, template_code, template_name, dictionary_status, documentation_path)
- ❌ FORBIDDEN: Minimal context, "gates will add details later"
- Why: Incomplete context causes mysterious gate failures
### The Bottom Line
**Setup shortcuts = silent failures in all downstream gates.**
Setup is foundation. Wrong template selection wastes hours on wrong spec. Missing context breaks gates mysteriously. Skipped checks lose automation.
**If tempted to skip setup, ask: Am I willing to debug gate failures from incomplete initialization?**
---
## Rationalization Table
| Excuse | Why It's Wrong | Correct Response |
|--------|---------------|------------------|
| "User already said CADOC 4010" | Validation confirms, prevents typos (4010 vs 4020) | Run selection |
| "Hard-code context is faster" | Bypasses validation, loses audit trail | Use AskUserQuestion |
| "Dictionary check is ceremony" | Determines 40-min validation mode difference | Check dictionary |
| "They'll see validation in Gate 1" | Poor UX, unprepared user | Alert if interactive |
| "Just pass minimal context" | Incomplete causes mysterious gate failures | Initialize ALL fields |
| "Setup is just config" | Foundation errors compound through 3 gates | Setup is validation |
### If You Find Yourself Making These Excuses
**STOP. You are rationalizing.**
Setup appears simple but errors propagate through 4-6 hours of gate execution. Foundation correctness prevents downstream waste.
---
## Setup Steps
### Step 1: Regulatory Authority Selection
Use `AskUserQuestion` tool to present regulatory authority selection:
```javascript
AskUserQuestion({
questions: [
{
question: "Which regulatory authority template do you want to create?",
header: "Authority",
multiSelect: false,
options: [
{
label: "CADOC",
description: "BACEN - Cadastro de Clientes do SFN (select specific document next)"
},
{
label: "e-Financeira",
description: "RFB - SPED e-Financeira (select specific event next)"
},
{
label: "DIMP",
description: "RFB - Declaração de Informações sobre Movimentação Patrimonial"
},
{
label: "APIX",
description: "BACEN - Open Banking API (select specific API next)"
}
]
}
]
})
```
---
### Step 1.1: Template Selection (Conditional by Authority)
**Based on authority selected, show specific template options:**
#### If "CADOC" selected:
```javascript
AskUserQuestion({
questions: [
{
question: "Which CADOC document do you want to create?",
header: "CADOC",
multiSelect: false,
options: [
{
label: "4010",
description: "Informações de Cadastro - Cadastral Information"
},
{
label: "4016",
description: "Informações de Operações de Crédito - Credit Operations"
},
{
label: "4111",
description: "Operações de Câmbio - Foreign Exchange Operations"
}
]
}
]
})
```
**CADOC Template Details:**
| Code | Name | Description | Frequency |
|------|------|-------------|-----------|
| 4010 | Informações de Cadastro | Client cadastral data | Monthly |
| 4016 | Operações de Crédito | Credit operation details | Monthly |
| 4111 | Operações de Câmbio | Foreign exchange operations | Daily |
---
#### If "e-Financeira" selected:
```javascript
AskUserQuestion({
questions: [
{
question: "Which e-Financeira event do you want to create?",
header: "Event",
multiSelect: false,
options: [
{
label: "evtCadDeclarante",
description: "Cadastro do Declarante - Entity registration (GIIN, FATCA/CRS)"
},
{
label: "evtAberturaeFinanceira",
description: "Abertura e-Financeira - Opens reporting period (semester)"
},
{
label: "evtFechamentoeFinanceira",
description: "Fechamento e-Financeira - Closes period and consolidates totals"
},
{
label: "evtMovOpFin",
description: "Movimento de Operações Financeiras - Semestral financial movements"
}
]
}
]
})
// If user selects "Other", show remaining events:
AskUserQuestion({
questions: [
{
question: "Select additional e-Financeira event type:",
header: "Event",
multiSelect: false,
options: [
{
label: "evtMovPP",
description: "Movimento de Previdência Privada - Private pension (PGBL, VGBL)"
},
{
label: "evtMovOpFinAnual",
description: "Movimento de Operações Financeiras Anual - Annual consolidated"
}
]
}
]
})
```
**e-Financeira Event Details:**
| Event Code | Event Name | Module | Frequency |
|------------|------------|--------|-----------|
| evtCadDeclarante | Cadastro do Declarante | Structural | Per Period |
| evtAberturaeFinanceira | Abertura e-Financeira | Structural | Semestral |
| evtFechamentoeFinanceira | Fechamento e-Financeira | Structural | Semestral |
| evtMovOpFin | Mov. Operações Financeiras | Financial Operations | Semestral |
| evtMovPP | Mov. Previdência Privada | Private Pension | Semestral |
| evtMovOpFinAnual | Mov. Operações Fin. Anual | Financial Operations | Annual |
---
#### If "DIMP" selected:
```javascript
AskUserQuestion({
questions: [
{
question: "Which DIMP version do you want to create?",
header: "DIMP",
multiSelect: false,
options: [
{
label: "v10",
description: "DIMP Versão 10 - Current version (Movimentação Patrimonial)"
}
]
}
]
})
```
**DIMP Template Details:**
| Version | Name | Description | Frequency |
|---------|------|-------------|-----------|
| v10 | DIMP v10 | Declaração de Informações sobre Movimentação Patrimonial | Annual |
---
#### If "APIX" selected:
```javascript
AskUserQuestion({
questions: [
{
question: "Which APIX (Open Banking) API do you want to create?",
header: "APIX",
multiSelect: false,
options: [
{
label: "001",
description: "Dados Cadastrais - Registration/Customer Data API"
},
{
label: "002",
description: "Contas e Transações - Accounts & Transactions API"
}
]
}
]
})
```
**APIX Template Details:**
| Code | Name | Description | Type |
|------|------|-------------|------|
| 001 | Dados Cadastrais | Customer registration data | REST API |
| 002 | Contas e Transações | Account balances and transactions | REST API |
---
### Selection Flow Diagram
```
┌─────────────────────────────────────┐
│ Step 1: Select Authority │
│ ○ CADOC (BACEN) │
│ ○ e-Financeira (RFB) │
│ ○ DIMP (RFB) │
│ ○ APIX (BACEN) │
└──────────────┬──────────────────────┘
┌──────────┼──────────┬───────────┐
▼ ▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ CADOC │ │e-Financ│ │ DIMP │ │ APIX │
│────────│ │────────│ │────────│ │────────│
│○ 4010 │ │○ evtCad│ │○ v10 │ │○ 001 │
│○ 4016 │ │○ evtAbe│ │ │ │○ 002 │
│○ 4111 │ │○ evtFec│ │ │ │ │
│ │ │○ evtMov│ │ │ │ │
│ │ │○ evtPP │ │ │ │ │
│ │ │○ evtAnu│ │ │ │ │
└────────┘ └────────┘ └────────┘ └────────┘
```
**Capture and extract:**
- Authority (BACEN, RFB)
- Template category (CADOC, e-Financeira, DIMP, APIX)
- Template code (e.g., "4010", "evtMovOpFin", "v10", "001")
- Template name (full descriptive name)
- Additional metadata based on template type
### Step 2: Optional Deadline Input
If not provided by user, use standard deadline for the template type.
### Step 3: Check Dictionary Status and Alert User
**CRITICAL: Before initializing context, check if template has a data dictionary:**
```javascript
// Dictionary status check - MANDATORY
// STANDARDIZED DICTIONARY PATH
const DICTIONARY_BASE_PATH = "~/.claude/docs/regulatory/dictionaries";
const TEMPLATES_WITH_DICTIONARY = {
"CADOC_4010": `${DICTIONARY_BASE_PATH}/cadoc-4010.yaml`,
"CADOC_4016": `${DICTIONARY_BASE_PATH}/cadoc-4016.yaml`,
"APIX_001": `${DICTIONARY_BASE_PATH}/apix-001.yaml`,
"EFINANCEIRA_evtCadDeclarante": `${DICTIONARY_BASE_PATH}/efinanceira-evtCadDeclarante.yaml`
};
const TEMPLATES_WITHOUT_DICTIONARY = [
"CADOC_4111",
"APIX_002",
"EFINANCEIRA_evtAberturaeFinanceira",
"EFINANCEIRA_evtFechamentoeFinanceira",
"EFINANCEIRA_evtMovOpFin",
"EFINANCEIRA_evtMovPP",
"EFINANCEIRA_evtMovOpFinAnual",
"DIMP_v10"
];
function checkDictionaryStatus(templateKey) {
if (TEMPLATES_WITH_DICTIONARY[templateKey]) {
return {
has_dictionary: true,
dictionary_path: TEMPLATES_WITH_DICTIONARY[templateKey],
validation_mode: "automatic"
};
} else {
return {
has_dictionary: false,
dictionary_path: null,
validation_mode: "interactive"
};
}
}
```
**If template has NO dictionary, alert user with AskUserQuestion:**
```javascript
// Alert user about interactive validation requirement
if (!dictionaryStatus.has_dictionary) {
await AskUserQuestion({
questions: [{
question: `⚠️ Template '${templateSelected}' does NOT have a pre-configured data dictionary.\n\n` +
`This means you will need to MANUALLY VALIDATE each field mapping in Gate 1.\n\n` +
`The process will:\n` +
`1. Query API schemas (Midaz, CRM)\n` +
`2. Suggest mappings for each regulatory field\n` +
`3. Ask YOUR APPROVAL via selection boxes or custom typing\n` +
`4. Save approved mappings as new dictionary for future use\n\n` +
`Do you want to proceed?`,
header: "Dictionary",
multiSelect: false,
options: [
{
label: "Proceed with interactive validation",
description: "I'll validate each field mapping manually"
},
{
label: "Choose different template",
description: "Select a template that has pre-configured dictionary"
}
]
}]
});
}
```
---
### Step 4: Initialize Context Object
Create and return the complete initial context based on selections:
```javascript
// Base context structure (common to all templates)
let context = {
// From Step 1 - Authority selection
authority: "BACEN", // or "RFB"
template_category: "CADOC", // or "e-Financeira", "DIMP", "APIX"
// From Step 1.1 - Template selection
template_code: "4010", // specific code selected
template_name: "Informações de Cadastro", // full name
// Computed fields
template_selected: "CADOC 4010", // combined identifier
// Dictionary status (CRITICAL - determines validation mode)
// STANDARDIZED PATH: ~/.claude/docs/regulatory/dictionaries/
dictionary_status: {
has_dictionary: true/false,
dictionary_path: "~/.claude/docs/regulatory/dictionaries/cadoc-4010.yaml" or null,
validation_mode: "automatic" or "interactive"
},
// Documentation reference (auto-resolved)
documentation_path: ".claude/docs/regulatory/templates/BACEN/CADOC/cadoc-4010-4016.md",
// Optional user input
deadline: "2025-12-31", // or ask if needed
// Gates (to be populated by subsequent sub-skills)
gate1: null,
gate2: null,
gate3: null
};
```
---
### Template-Specific Context Extensions
#### CADOC Context
```javascript
const cadocContext = {
...baseContext,
authority: "BACEN",
template_category: "CADOC",
template_code: "4010", // or "4016", "4111"
template_name: "Informações de Cadastro",
template_selected: "CADOC 4010",
documentation_path: ".claude/docs/regulatory/templates/BACEN/CADOC/cadoc-4010-4016.md",
format: "XML",
frequency: "monthly" // or "daily" for 4111
};
```
#### e-Financeira Context
```javascript
const efinanceiraContext = {
...baseContext,
authority: "RFB",
template_category: "e-Financeira",
template_code: "evtMovOpFin", // event code selected
template_name: "Movimento de Operações Financeiras",
template_selected: "e-Financeira evtMovOpFin",
documentation_path: ".claude/docs/regulatory/templates/RFB/EFINANCEIRA/efinanceira.md",
format: "XML",
// e-Financeira specific fields
event_module: "financial_operations", // or "private_pension", "structural"
event_category: "movement", // or "structural"
event_frequency: "semestral", // or "annual", "per_period"
fatca_applicable: true,
crs_applicable: true
};
```
#### DIMP Context
```javascript
const dimpContext = {
...baseContext,
authority: "RFB",
template_category: "DIMP",
template_code: "v10",
template_name: "DIMP Versão 10",
template_selected: "DIMP v10",
documentation_path: ".claude/docs/regulatory/templates/RFB/DIMP/dimp-v10-manual.md",
format: "XML",
frequency: "annual"
};
```
#### APIX Context
```javascript
const apixContext = {
...baseContext,
authority: "BACEN",
template_category: "APIX",
template_code: "001", // or "002"
template_name: "Dados Cadastrais",
template_selected: "APIX 001",
documentation_path: ".claude/docs/regulatory/templates/BACEN/APIX/001/",
format: "JSON",
api_type: "REST"
};
```
---
### Template Mapping Reference
```javascript
const TEMPLATE_REGISTRY = {
// CADOC Templates (BACEN)
CADOC: {
authority: "BACEN",
templates: {
"4010": {
name: "Informações de Cadastro",
description: "Client cadastral data",
frequency: "monthly",
format: "XML",
documentation: ".claude/docs/regulatory/templates/BACEN/CADOC/cadoc-4010-4016.md"
},
"4016": {
name: "Operações de Crédito",
description: "Credit operation details",
frequency: "monthly",
format: "XML",
documentation: ".claude/docs/regulatory/templates/BACEN/CADOC/cadoc-4010-4016.md"
},
"4111": {
name: "Operações de Câmbio",
description: "Foreign exchange operations",
frequency: "daily",
format: "XML",
documentation: ".claude/docs/regulatory/templates/BACEN/CADOC/cadoc-4010-4016.md"
}
}
},
// e-Financeira Templates (RFB)
"e-Financeira": {
authority: "RFB",
templates: {
evtCadDeclarante: {
name: "Cadastro do Declarante",
module: "structural",
category: "structural",
frequency: "per_period",
format: "XML",
fatca_applicable: true,
crs_applicable: true,
description: "Entity registration with GIIN, FATCA/CRS categories",
documentation: ".claude/docs/regulatory/templates/RFB/EFINANCEIRA/efinanceira.md"
},
evtAberturaeFinanceira: {
name: "Abertura e-Financeira",
module: "structural",
category: "structural",
frequency: "semestral",
format: "XML",
fatca_applicable: false,
crs_applicable: false,
description: "Opens reporting period (dtIni/dtFim)",
documentation: ".claude/docs/regulatory/templates/RFB/EFINANCEIRA/efinanceira.md"
},
evtFechamentoeFinanceira: {
name: "Fechamento e-Financeira",
module: "structural",
category: "structural",
frequency: "semestral",
format: "XML",
fatca_applicable: true,
crs_applicable: true,
description: "Closes period, consolidates PP/OpFin/OpFinAnual totals",
documentation: ".claude/docs/regulatory/templates/RFB/EFINANCEIRA/efinanceira.md"
},
evtMovOpFin: {
name: "Movimento de Operações Financeiras",
module: "financial_operations",
category: "movement",
frequency: "semestral",
format: "XML",
fatca_applicable: true,
crs_applicable: true,
description: "Financial movements - accounts, balances, income",
documentation: ".claude/docs/regulatory/templates/RFB/EFINANCEIRA/efinanceira.md"
},
evtMovPP: {
name: "Movimento de Previdência Privada",
module: "private_pension",
category: "movement",
frequency: "semestral",
format: "XML",
fatca_applicable: false,
crs_applicable: false,
description: "Private pension movements - PGBL, VGBL, etc.",
documentation: ".claude/docs/regulatory/templates/RFB/EFINANCEIRA/efinanceira.md"
},
evtMovOpFinAnual: {
name: "Movimento de Operações Financeiras Anual",
module: "financial_operations",
category: "movement",
frequency: "annual",
format: "XML",
fatca_applicable: true,
crs_applicable: true,
description: "Annual consolidated financial movements",
documentation: ".claude/docs/regulatory/templates/RFB/EFINANCEIRA/efinanceira.md"
}
}
},
// DIMP Templates (RFB)
DIMP: {
authority: "RFB",
templates: {
v10: {
name: "DIMP Versão 10",
description: "Declaração de Informações sobre Movimentação Patrimonial",
frequency: "annual",
format: "XML",
documentation: ".claude/docs/regulatory/templates/RFB/DIMP/dimp-v10-manual.md"
}
}
},
// APIX Templates (BACEN - Open Banking)
APIX: {
authority: "BACEN",
templates: {
"001": {
name: "Dados Cadastrais",
description: "Customer registration data API",
api_type: "REST",
format: "JSON",
documentation: ".claude/docs/regulatory/templates/BACEN/APIX/001/"
},
"002": {
name: "Contas e Transações",
description: "Account balances and transactions API",
api_type: "REST",
format: "JSON",
documentation: ".claude/docs/regulatory/templates/BACEN/APIX/002/"
}
}
}
};
```
---
## State Tracking Output
After completing setup, output:
```
SKILL: regulatory-templates-setup
STATUS: COMPLETE
TEMPLATE: {context.template_selected}
DEADLINE: {context.deadline}
NEXT: → Gate 1: Regulatory Compliance Analysis
```
---
## Success Criteria
Setup is complete when:
- ✅ Template selected and validated
- ✅ Deadline established (input or default)
- ✅ Context object initialized with all values
- ✅ Documentation URL identified for selected template
---
## Output
Return the complete `context` object to the parent skill for use in subsequent gates.