--- 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.