{
  "schemaVersion": "1.0",
  "item": {
    "slug": "canonical-data-map",
    "name": "Canonical Data Map",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/satoshistackalotto/canonical-data-map",
    "canonicalUrl": "https://clawhub.ai/satoshistackalotto/canonical-data-map",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/canonical-data-map",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=canonical-data-map",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/canonical-data-map"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/canonical-data-map",
    "agentPageUrl": "https://openagent3.xyz/skills/canonical-data-map/agent",
    "manifestUrl": "https://openagent3.xyz/skills/canonical-data-map/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/canonical-data-map/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Setup",
        "body": "This skill is a reference document — it defines the directory structure and naming conventions used by all other Greek accounting skills. No binaries or credentials required.\n\n# Set the data directory (all skills read this)\nexport OPENCLAW_DATA_DIR=\"/data\"\n\n# Initialize the full directory structure\nmkdir -p $OPENCLAW_DATA_DIR/{incoming/{invoices,receipts,statements,government},processing,clients,compliance/{vat,efka,mydata,e1,e3},banking/{imports/{alpha,nbg,eurobank,piraeus},processing,reconciliation},ocr/{incoming,output},reports,auth,system/{logs,process-locks},backups}\n\nThis document defines the complete file system architecture for the OpenClaw Greek Accounting system. It is the authoritative reference for all path decisions. No skill may introduce a new top-level directory or deviate from the naming conventions defined here without a version update to this document.\n\nv1.1 change: Added /data/memory/ — agent episodic memory, failure logs, pattern store, GitHub proposal queue, and rate-limit state. Owner: memory-feedback (Skill 19, Phase 4). All Phase 3B+ skills must include episode and failure log hooks that write into this tree."
      },
      {
        "title": "Root Structure",
        "body": "/data/\n╔══ incoming/          # All raw input — documents arriving into the system\n╔══ processing/        # Temporary working space — files mid-pipeline\n╔══ clients/           # Canonical client records — the source of truth\n╔══ compliance/        # Government filings and submissions\n╔══ banking/           # Bank statement processing pipeline\n╔══ ocr/               # OCR processing pipeline\n╔══ efka/              # EFKA/social security processing pipeline\n╔══ reports/           # Generated reports for human consumption\n╔══ exports/           # Data exports leaving the system\n╔══ imports/           # Bulk data imports entering the system\n╔══ dashboard/         # Dashboard state, config, cache, history\n╔══ auth/              # Authentication and access control\n╔══ backups/           # Encrypted system backups\n╔══ gdpr-exports/      # GDPR subject access request exports\n╔══ memory/            # Agent episodic memory, failure logs, learning patterns, proposals\n└══ system/            # System-level files: logs, schema versions, locks"
      },
      {
        "title": "1. /data/incoming/ — Raw Input",
        "body": "All documents entering the system land here first, regardless of source (email attachment, manual drop, scanner, bank download). Nothing in /data/incoming/ is processed yet.\n\n/data/incoming/\n╔══ invoices/          # Supplier invoices (PDF, image)\n╔══ receipts/          # Receipts (PDF, image, phone photo)\n╔══ statements/        # Bank statements (PDF, CSV, OFX)\n╔══ government/        # AADE/EFKA notifications and documents\n╔══ payroll/           # Hour sheets, employee documents\n╔══ tax-documents/     # Tax certificates, employer statements (βεβαιώσεις)\n╔══ contracts/         # Contracts and legal documents\n└══ other/             # Uncategorised — routed after classification\n\nNaming convention for incoming files:\nFiles dropped here may arrive with any name. The system must NOT rename them on arrival — the original filename is preserved for audit purposes. The system assigns a canonical name only when moving to /data/processing/."
      },
      {
        "title": "2. /data/processing/ — In-Flight Pipeline",
        "body": "Temporary working space. Files here are mid-pipeline and may be incomplete. No other skill should read from /data/processing/ as a final source — always read from /data/clients/ or /data/compliance/ for canonical data.\n\n/data/processing/\n╔══ ocr/               # OCR in progress\n╚   ╔══ queued/        # Waiting for OCR\n╚   ╔══ enhanced/      # Image pre-processing complete\n╚   ╔══ extracted/     # Text extracted, not yet validated\n╚   └══ validated/     # OCR output validated, ready to route\n╔══ classification/    # Document type identification in progress\n╔══ reconciliation/    # Bank reconciliation working files\n╚   ╔══ matching/      # Transaction matching in progress\n╚   └══ flagged/       # Items needing human review\n╔══ compliance/        # Filing preparation working files\n╚   ╔══ vat/           # VAT return preparation\n╚   ╔══ efka/          # EFKA declaration preparation\n╚   └══ mydata/        # myDATA submission preparation\n└══ imports/           # Bulk import validation in progress\n\nCleanup policy: Files in /data/processing/ are deleted or archived after the pipeline completes successfully. They are never the canonical record."
      },
      {
        "title": "3. /data/clients/ — Client Master Records",
        "body": "The single source of truth for all client data. Every other skill that needs client information reads from here. Only the client-data-management skill writes to this tree.\n\n/data/clients/\n╔══ _index.json                    # Global client index (name, AFM, status, assignee)\n╔══ _audit-log.json                # All access and change events across all clients\n╔══ _schema-version.json           # Current schema version for migration tracking\n└══ {AFM}/                         # One directory per client, keyed by AFM (e.g. EL123456789)\n    ╔══ profile.json               # Master client record\n    ╔══ identifiers.json           # AFM, GEMI, EFKA employer ID, IBANs\n    ╔══ contacts.json              # Contact persons\n    ╔══ notes.json                 # Relationship notes and meeting logs\n    ╔══ compliance/\n    ╚   ╔══ filings.json           # All completed filings (VAT, EFKA, E1, etc.)\n    ╚   ╔══ obligations.json       # Recurring obligation schedule\n    ╚   └══ gaps.json              # Missing/overdue filing log\n    ╔══ documents/\n    ╚   ╔══ registry.json          # Metadata index of all documents for this client\n    ╚   ╔══ pending.json           # Documents awaiting processing or review\n    ╚   └══ archive-index.json     # References to archived documents\n    ╔══ correspondence/\n    ╚   └══ {YYYYMMDD}_{type}_{draft-id}_sent.json  # Immutable sent communication records\n    ╔══ comms-preferences.json     # Client-specific salutation, contact, language overrides\n    ╔══ payroll/\n    ╚   └══ {YYYY-MM}/             # One folder per pay period\n    ╚       ╔══ hours-input.csv    # Raw hours data\n    ╚       ╔══ calculations.json  # Computed payroll data\n    ╚       └══ {employee-slug}_payslip.pdf   # Generated payslips\n    ╔══ financial-statements/\n    ╚   ╔══ index.json             # All generated statements, versions, periods, status\n    ╚   ╔══ {YYYY-MM}_pl_v{N}.json               # P&L machine-readable\n    ╚   ╔══ {YYYY-MM}_balance-sheet_v{N}.json     # Balance sheet machine-readable\n    ╚   ╔══ {YYYY-MM}_cash-flow_v{N}.json         # Cash flow machine-readable\n    ╚   └══ {YYYY-MM}_vat-summary_v{N}.json       # VAT summary machine-readable\n    └══ gdpr/\n        ╔══ consent.json           # Consent records\n        ╔══ retention-policy.json  # Retention schedule for this client\n        └══ deletion-log.json      # Record of any deletions performed\n\nAFM format: Always EL + 9 digits, uppercase. Example: EL123456789. Never store without the EL prefix. Never use the 9-digit-only form as a directory name."
      },
      {
        "title": "4. /data/compliance/ — Government Filings",
        "body": "Stores the actual submission files (XML, PDF) generated for government platforms. The filing record lives in /data/clients/{AFM}/compliance/filings.json — this directory holds the file artefacts themselves.\n\n/data/compliance/\n╔══ vat/\n╚   └══ {AFM}_{YYYY}{MM}_vat_return.xml      # VAT return XML for TAXIS\n╔══ mydata/\n╚   └══ {AFM}_{YYYY}{MM}_{invoice-number}_mydata.xml\n╔══ efka/\n╚   └══ {AFM}_{YYYY}{MM}_efka_declaration.xml\n╔══ e1/\n╚   └══ {AFM}_{YYYY}_e1_form.xml             # Individual tax returns\n╔══ e3/\n╚   └══ {AFM}_{YYYY}_e3_form.xml             # Business activity statements\n╔══ corporate-tax/\n╚   └══ {AFM}_{YYYY}_corporate_tax.xml\n└══ submissions/\n    └══ {AFM}_{YYYY}{MM}_{type}_submission-receipt.json   # Government confirmation receipts\n\nNaming convention: {AFM}_{period}_{type}.{ext} — always lowercase type, always ISO period format (YYYYMM or YYYY), always the full AFM with EL prefix."
      },
      {
        "title": "5. /data/banking/ — Bank Statement Pipeline",
        "body": "/data/banking/\n╔══ imports/\n╚   ╔══ alpha/         # Alpha Bank raw statement files\n╚   ╔══ nbg/           # National Bank of Greece\n╚   ╔══ eurobank/      # Eurobank\n╚   ╔══ piraeus/       # Piraeus Bank\n╚   └══ other/         # Other banks\n╔══ processing/\n╚   ╔══ raw/           # Imported, not yet validated\n╚   ╔══ validated/     # Format validation complete\n╚   ╔══ categorized/   # Transactions categorised\n╚   └══ reconciled/    # Reconciliation complete\n╔══ reconciliation/\n╚   └══ {AFM}_{YYYY-MM}_reconciliation.json  # Per-client reconciliation reports\n└══ exports/\n    └══ {AFM}_{YYYY-MM}_transactions.csv     # Clean transaction exports\n\nNote: /data/alpha-bank/, /data/nbg-statements/, /data/eurobank/, /data/piraeus-bank/ used in earlier skill versions are deprecated. All bank imports go through /data/banking/imports/{bank}/."
      },
      {
        "title": "6. /data/ocr/ — OCR Processing Pipeline",
        "body": "/data/ocr/\n╔══ incoming/\n╚   ╔══ scanned/       # Flatbed scanner input\n╚   ╔══ photos/        # Mobile phone photos of documents\n╚   ╔══ government/    # Government-issued documents (AADE letters, etc.)\n╚   └══ handwritten/   # Handwritten documents requiring special handling\n╔══ preprocessing/\n╚   └══ enhanced/      # Image-enhanced versions awaiting OCR\n╔══ processing/\n╚   ╔══ greek-ocr/     # Greek language OCR in progress\n╚   ╔══ classification/ # Document type being determined\n╚   └══ validation/    # OCR output being validated\n╔══ output/\n╚   ╔══ text-extracted/       # Raw text output from OCR\n╚   ╔══ structured-data/      # Structured JSON extracted from text\n╚   └══ searchable-pdf/       # PDFs with embedded text layer\n└══ accounting-ready/          # Processed output ready for accounting-workflows skill\n\nNote: /data/scanned-documents/ used in earlier skill versions is deprecated. All scanned input goes to /data/ocr/incoming/scanned/."
      },
      {
        "title": "7. /data/efka/ — EFKA Processing Pipeline",
        "body": "/data/efka/\n╔══ employees/\n╚   ╔══ active/        # Current employee records\n╚   ╔══ pending/       # New employees awaiting EFKA registration\n╚   ╔══ terminated/    # Terminated employees (retained per legal requirements)\n╚   ╔══ imports/       # Bulk employee data imports\n╚   ╔══ updates/       # Pending employee record changes\n╚   └══ validated/     # Imports validated, ready to commit\n╔══ contributions/\n╚   ╔══ monthly/       # Monthly contribution calculations by period\n╚   ╔══ quarterly/     # Quarterly summaries\n╚   ╔══ annual/        # Annual totals\n╚   ╔══ calculated/    # Computed contributions awaiting validation\n╚   ╔══ validated/     # Validated, ready to submit\n╚   └══ payments/      # Payment confirmation records\n╔══ payroll/\n╚   ╔══ input/         # Raw hours and salary data\n╚   ╔══ validated/     # Validated input\n╚   ╔══ processed/     # Calculations complete\n╚   └══ ready-submit/  # Ready for EFKA portal submission\n╔══ submissions/\n╚   ╔══ ready/         # Submission files ready to send\n╚   ╔══ efka-portal/   # Submitted to EFKA portal (confirmation pending)\n╚   └══ aade-cross/    # Cross-referenced with AADE for consistency\n╔══ responses/\n╚   ╔══ confirmations/ # EFKA acceptance receipts\n╚   └══ corrections/   # EFKA rejection/correction requests\n╔══ deadlines/\n╚   ╔══ upcoming/      # Deadlines in the next 30 days\n╚   └══ overdue/       # Missed deadlines requiring urgent action\n╔══ audit/\n╚   ╔══ employee-records/    # Audit-ready employee documentation\n╚   └══ contribution-proof/  # Proof of contribution payments\n└══ compliance/\n    └══ monitoring/    # Ongoing compliance status tracking"
      },
      {
        "title": "8. /data/reports/ — Generated Reports",
        "body": "Human-readable reports. These are outputs, not inputs to other skills.\n\n/data/reports/\n╔══ daily/\n╚   └══ {YYYY-MM-DD}_daily_summary.pdf\n╔══ weekly/\n╚   └══ {YYYY-WNN}_weekly_report.pdf\n╔══ monthly/\n╚   └══ {YYYY-MM}_monthly_report.pdf\n╔══ client/\n╚   └══ {AFM}_{YYYY-MM}_{report-type}.pdf\n╔══ compliance/\n╚   └══ {AFM}_{YYYY-MM}_compliance_status.pdf\n╔══ reconciliation/\n╚   └══ {AFM}_{YYYY-MM}_reconciliation_report.pdf\n└══ financial-statements/\n    └══ {AFM}_{YYYY-MM}_financial-pack_v{N}.pdf   # Client-facing PDF statement pack\n\nNote: /data/reports/monthly-expenses.json (used in Skill 1) is deprecated. Expense data belongs in /data/clients/{AFM}/compliance/ or exported via /data/exports/."
      },
      {
        "title": "9. /data/exports/ — Data Leaving the System",
        "body": "Files generated for external consumption (Excel exports, CSV downloads, accounting software imports).\n\n/data/exports/\n╔══ clients/\n╚   └══ {YYYY-MM-DD}_client_export.{xlsx|csv|json}\n╔══ transactions/\n╚   └══ {AFM}_{YYYY-MM}_transactions.{csv|xlsx}\n╔══ compliance/\n╚   └══ {AFM}_{YYYY}_compliance_summary.xlsx\n└══ accounting-software/\n    └══ {AFM}_{YYYY-MM}_{target-system}.{qbx|csv|xlsx}"
      },
      {
        "title": "10. /data/imports/ — Bulk Data Entering the System",
        "body": "Structured bulk imports (spreadsheets of client lists, employee rosters, etc.) — not raw documents (those go to /data/incoming/).\n\n/data/imports/\n╔══ clients/           # Bulk client onboarding files\n╔══ employees/         # Bulk employee roster imports\n└══ historical/        # Historical data migration files"
      },
      {
        "title": "11. /data/dashboard/ — Dashboard State",
        "body": "/data/dashboard/\n╔══ config/\n╚   ╔══ firm-settings.yaml\n╚   ╔══ alert-rules.yaml\n╚   ╔══ report-templates.yaml\n╚   └══ user-preferences/{username}.yaml\n╔══ state/\n╚   ╔══ client-status.json      # Current status snapshot for all clients\n╚   ╔══ current-alerts.json     # Active alerts\n╚   ╔══ deadline-tracker.json   # Upcoming deadlines\n╚   ╔══ task-queue.json         # Pending task list\n╚   └══ system-health.json      # Skill integration health\n╔══ cache/\n╚   ╔══ aade-latest.json\n╚   ╔══ efka-latest.json\n╚   ╔══ bank-feeds-latest.json\n╚   └══ ocr-queue-status.json\n╔══ reports/\n╚   ╔══ daily/\n╚   ╔══ weekly/\n╚   ╔══ monthly/\n╚   └══ client-specific/\n└══ history/\n    ╔══ alerts/\n    ╔══ compliance-scores/\n    └══ performance-metrics/"
      },
      {
        "title": "12. /data/auth/ — Authentication & Access Control",
        "body": "/data/auth/\n╔══ users/\n╚   └══ {username}/\n╚       ╔══ profile.json\n╚       ╔══ credentials.json     # Hashed — never plaintext\n╚       ╔══ permissions.json\n╚       ╔══ 2fa/\n╚       └══ sessions/\n╚           └══ {session-id}.json\n╔══ roles/\n╚   ╔══ senior_accountant.json\n╚   ╔══ accountant.json\n╚   ╔══ assistant.json\n╚   ╔══ viewer.json\n╚   └══ custom/\n╔══ access/\n╚   ╔══ client_assignments.json\n╚   ╔══ policies.json\n╚   └══ ip_whitelist.json\n└══ logs/\n    ╔══ logins/\n    ╔══ access/\n    ╔══ admin/\n    └══ security/"
      },
      {
        "title": "13. /data/backups/ — Encrypted Backups",
        "body": "/data/backups/\n╔══ full_{YYYYMMDD}.tar.enc                        # Full system backup (weekly)\n╔══ incremental_{YYYYMMDD}.tar.enc                 # Incremental backup (daily)\n╔══ clients_{YYYYMMDD}_{HHMMSS}.json.enc           # Client snapshot (event-driven)\n╔══ compliance_{YYYYMMDD}_{HHMMSS}.json.enc        # Compliance snapshot (post-submission)\n╔══ auth_{YYYYMMDD}.json.enc                       # Auth data backup\n╔══ restore-test/                                  # Ephemeral — restore verification workspace\n└══ archives/                                      # Long-term retention archives (post-active)\n\nNaming convention: Always include date and time in backup filename. Always .enc extension for encrypted files. Encryption keys are stored outside /data/ — never adjacent to backup files."
      },
      {
        "title": "14. /data/gdpr-exports/ — GDPR Subject Access Exports",
        "body": "/data/gdpr-exports/\n└══ {AFM}_gdpr_export_{YYYYMMDD}.json"
      },
      {
        "title": "15. /data/system/ — System Files",
        "body": "/data/system/\n╔══ skill-versions.json          # Installed skill versions and checksums\n╔══ migration-log.json           # Schema migration history\n╔══ process-locks/               # Concurrency locks (prevent double-processing)\n╔══ error-log/\n╚   └══ {YYYY-MM-DD}_errors.log\n╔══ migrations/\n╚   └══ v{N.N}_{YYYYMMDD}_{description}.json  # Schema migration definitions\n╔══ integrity/\n╚   ╔══ audit-log.json           # Permanent integrity event log (all checks and results)\n╚   ╔══ hash-registry.json       # SHA256 hashes of all canonical data files\n╚   ╔══ retention-schedule.json  # Active retention schedule configuration\n╚   └══ last-check-results.json  # Most recent integrity check results (dashboard feed)\n╔══ backups/\n╚   └══ backup-manifest.json     # Index of all backup files with metadata and verify status\n╔══ chat-sessions/\n╚   └══ {username}/\n╚       └══ {YYYY-MM-DD}_{session-id}.json   # Conversational assistant session logs\n└══ chat-context/\n    └══ {username}/\n        └══ active-context.json              # Active session context (cleared on session end)"
      },
      {
        "title": "16. /data/memory/ — Agent Memory & Feedback",
        "body": "The agent's episodic memory, failure capture, pattern learning store, GitHub proposal queue, and rate-limit state. Written to by all skills (episode and failure hooks) and managed by the memory-feedback skill (Skill 19). No skill other than memory-feedback reads from this tree for decision-making — it is strictly write-on-event, read-by-Skill-19.\n\n/data/memory/\n╔══ episodes/\n╚   └══ {YYYY-MM-DD}/\n╚       └══ {session-id}_{action-type}.json    # Successful/completed agent actions\n╔══ failures/\n╚   └══ {YYYY-MM-DD}/\n╚       └══ {session-id}_{failure-type}.json   # Failures with structured reflection\n╔══ patterns/\n╚   ╔══ successes/\n╚   ╚   └══ {pattern-id}.json                  # Recurring good outcomes extracted from episodes\n╚   └══ failures/\n╚       └══ {pattern-id}.json                  # Recurring problems extracted from failures\n╔══ corrections/\n╚   └══ {YYYY-MM-DD}_{correction-id}.json      # Human corrections to agent behaviour\n╔══ proposals/\n╚   └══ {YYYY-MM-DD}_{skill-name}_{id}.md      # Draft skill improvements awaiting GitHub PR\n└══ rate-limits/\n    ╔══ current-state.json                      # Live token and storage consumption\n    ╔══ daily-log.json                          # Per-day consumption history\n    └══ config.json                             # Configurable limits (hard floors enforced)\n\nEpisode logging trigger: Any agent action that makes a decision, produces output, or interacts with a government system. Trivial reads are not logged.\n\nFailure logging trigger: Any error, intent misread, missing data condition, or human correction. Always includes what_should_have_happened field.\n\nPattern scan schedule: Once daily at 02:00 Athens time. Never during business hours. Maximum 3 proposals per day. Maximum 2 GitHub PRs per day.\n\nStorage limits (defaults):\n\nEpisodes: 500 MB max — auto-archive after 90 days\nFailures: 200 MB max\nPatterns: 50 MB max\nProposals: 50 MB max\nTotal /data/memory/: 2 GB hard ceiling — system halts memory writes at 90% capacity\n\nGitHub integration: When a failure pattern reaches confidence threshold (≥0.85, ≥3 occurrences), memory-feedback creates a branch on GitHub and opens a pull request against the relevant SKILL.md file. Human must review and merge. Agent never pushes directly to main. Rejected PRs are logged — the same change is never re-proposed.\n\nRate limit tokens: Memory and reflection operations are budgeted separately from accounting operations. Default: 5,000 tokens/day for all memory processes combined."
      },
      {
        "title": "Identifiers",
        "body": "IdentifierFormatExampleNotesAFM (VAT)EL + 9 digitsEL123456789Always uppercase EL prefix. Never 9-digit-only.EFKA employer ID8 digits12345678No prefixGEMI9€“12 digits012345678May have leading zeros — preserve themContact IDC + 3 digitsC001Per-client sequentialFiling ID{type}-{AFM}-{YYYY}-{MM}VAT-EL123456789-2026-01Document IDD + 6 digitsD000123Global sequentialAudit event IDAUD-{YYYYMMDD}-{6digits}AUD-20260218-001234Backup ID{type}_{YYYYMMDD}_{HHMMSS}clients_20260218_143022Episode IDEP-{YYYYMMDD}-{3digits}EP-20260218-001Global sequential per dayFailure IDFAIL-{YYYYMMDD}-{3digits}FAIL-20260218-003Global sequential per dayPattern IDPAT-{YYYYMMDD}-{3digits}PAT-20260218-007Assigned at detectionCorrection IDCOR-{YYYYMMDD}-{3digits}COR-20260218-001Human-assignedSession IDS{YYYYMMDD}-{3digits}S20260218-001Per user session"
      },
      {
        "title": "Date & Time Formats",
        "body": "| Context | Format | Example | Notes |\n| File names | YYYYMMDD | 20260218 | No separators in filenames |\n| File names with time | YYYYMMDD_HHMMSS | 20260218_143022 | |\n| Period references | YYYY-MM | 2026-01 | Monthly periods |\n| ISO timestamps (JSON) | YYYY-MM-DDTHH:MM:SSZ | 2026-02-18T14:30:00Z | Always UTC in storage |\n| Display to users | DD/MM/YYYY | 18/02/2026 | Greek date format |\n| CLI arguments --date | YYYY-MM-DD | 2026-02-18 | ISO for CLI args |\n| CLI arguments --period | YYYY-MM | 2026-01 | |"
      },
      {
        "title": "Currency",
        "body": "| JSON storage | Numeric, 2dp | 12500.00 | Never include € symbol in stored values |\n| File names | No currency | 12500 | Integer amounts only in filenames |\n| Display to users | €XX,XXX.XX | €12,500.00 | Standard EU format |\n| CLI output | EUR XX,XXX.XX | EUR 12,500.00 | ASCII-safe for terminal |"
      },
      {
        "title": "File Naming Pattern",
        "body": "Pattern: {AFM}_{YYYY-MM}_{type}_{optional-detail}.{ext}\n\nExamples:\n\nEL123456789_2026-01_vat_return.xml\nEL123456789_2026-02_reconciliation_report.pdf\nEL123456789_2025_e1_form.xml\nEL123456789_2026-02_payslip_nikos-papadopoulos.pdf\n\nRules:\n\nLowercase type and detail segments\nHyphens within segments (not underscores)\nUnderscores between segments\nNo spaces anywhere in file names\nNo Greek characters in file names — use Latin transliteration for employee names\nNo special characters except hyphens and underscores"
      },
      {
        "title": "Employee Name Slugs (for file names)",
        "body": "Greek names in file names must be transliterated to ASCII lowercase with hyphens:\n\nÎίκος Παπαδόπουλος → nikos-papadopoulos\nΜαÏία Κωνσταντίνου → maria-konstantinou\nΔήμητÏα ΚαλαμαÏά → dimitra-kalamara"
      },
      {
        "title": "Deprecated Paths — Do Not Use",
        "body": "These paths appear in earlier skill versions and must not be used in any new skill. When encountered in existing commands, treat as aliases that redirect to the canonical paths.\n\nDeprecatedCanonical Replacement/data/alpha-bank//data/banking/imports/alpha//data/nbg-statements//data/banking/imports/nbg//data/eurobank//data/banking/imports/eurobank//data/piraeus-bank//data/banking/imports/piraeus//data/bank-imports//data/banking/imports//data/scanned-documents//data/ocr/incoming/scanned//data/email-attachments/data/incoming/ (classified)/data/email-imports//data/incoming//data/invoices/data/incoming/invoices/ (if raw) or /data/clients/{AFM}/documents/ (if processed)/data/processed/invoices//data/clients/{AFM}/documents/ + registry entry/data/processed/receipts//data/clients/{AFM}/documents/ + registry entry/data/processed/E1_2025.pdf/data/compliance/e1/EL{AFM}_2025_e1_form.xml/data/processing/classification/data/processing/classification//data/processing/extraction/data/processing/ocr/extracted//data/processing/validation/data/processing/ocr/validated//data/reports/monthly-expenses.json/data/clients/{AFM}/compliance/ or /data/exports//data/payroll/monthly.xlsx/data/efka/payroll/input/ or /data/clients/{AFM}/payroll//data/export/accounting-software/data/exports/accounting-software//data/aade-downloads//data/incoming/government//data/aade-outputs//data/reports/ or /data/compliance/ (by type)/data/aade-processing//data/processing/compliance//data/compliance-updates//data/incoming/government/"
      },
      {
        "title": "Skill Responsibility Matrix",
        "body": "Which skill owns (writes to) each top-level directory:\n\nDirectoryOwner SkillOther Skills May Read/data/incoming/accounting-workflowsAll skills/data/processing/Pipeline skill handling the jobNone as final source/data/clients/client-data-managementAll skills (read only)/data/compliance/greek-compliance-aadeaade-api-monitor, efka-api-integration, dashboard/data/banking/greek-banking-integrationaccounting-workflows, dashboard/data/ocr/greek-document-ocraccounting-workflows, greek-email-processor/data/efka/efka-api-integrationgreek-compliance-aade, dashboard/data/reports/dashboard-greek-accountingAll skills (read)/data/reports/analytics/analytics-and-advisory-intelligenceconversational-ai-assistant, dashboard-greek-accounting/data/reports/system/system-integrity-and-backupdashboard-greek-accounting (read)/data/clients/{AFM}/financial-statements/greek-financial-statementsconversational-ai-assistant, client-communication-engine, analytics-and-advisory-intelligence/data/clients/{AFM}/correspondence/client-communication-engineconversational-ai-assistant, analytics-and-advisory-intelligence/data/processing/comms/client-communication-engineEphemeral drafts only — cleared after send/data/backups/system-integrity-and-backupAll skills trigger event-driven snapshots via meta-skill/data/system/integrity/system-integrity-and-backupAll skills write hash on canonical file write/data/exports/Any skill (with --export)External consumers/data/imports/client-data-managementefka-api-integration/data/dashboard/dashboard-greek-accountinguser-authentication-system/data/auth/user-authentication-systemAll skills (auth check)/data/gdpr-exports/client-data-managementNone/data/system/OpenClaw systemAll skills (read)/data/memory/memory-feedback (Skill 19)All skills write episode/failure hooks; only Skill 19 reads for analysis"
      },
      {
        "title": "Enforcement Rules for All Skills",
        "body": "Never introduce a new top-level directory under /data/ without updating this document first.\nNever write processed/canonical data to /data/processing/ — it is temporary only.\nNever write client data outside /data/clients/{AFM}/ — client-data-management is the only writer.\nAlways use the full AFM with EL prefix in all paths, filenames, and JSON keys.\nAlways use ISO date format (YYYY-MM-DD or YYYYMMDD) in file names and JSON — never DD/MM/YYYY in stored data.\nNever use Greek characters in file names or directory names — only in JSON values and display output.\nCurrency values in JSON are always numeric — never strings with € symbols.\nAll timestamps in JSON are UTC — display conversion to Europe/Athens happens at the output layer only.\nThe /data/processing/ tree is ephemeral — never reference it as the source of truth from another skill.\nDeprecated paths are read-only legacy — redirect to canonical paths, never create new files at deprecated locations."
      },
      {
        "title": "Unified Audit Event Schema",
        "body": "Every skill must log significant actions using this single JSON schema. Audit events are written to /data/system/logs/audit/ and are the authoritative record for regulatory inspection.\n\n{\n  \"event_id\": \"EVT-20260219-143022-a7b3\",\n  \"timestamp\": \"2026-02-19T14:30:22Z\",\n  \"skill\": \"greek-compliance-aade\",\n  \"action\": \"vat_return_submitted\",\n  \"category\": \"government_submission\",\n  \"user\": {\n    \"username\": \"m.papadopoulou\",\n    \"role\": \"senior_accountant\",\n    \"ip_address\": \"192.168.1.42\"\n  },\n  \"client\": {\n    \"afm\": \"EL123456789\",\n    \"name\": \"ALPHA TRADING AE\"\n  },\n  \"details\": {\n    \"period\": \"2026-01\",\n    \"filing_type\": \"F2_VAT_RETURN\",\n    \"amount\": 3340.00,\n    \"submission_ref\": \"AADE-2026-0142\"\n  },\n  \"before_state\": null,\n  \"after_state\": \"submitted\",\n  \"approval\": {\n    \"prepared_by\": \"a.nikolaou\",\n    \"approved_by\": \"m.papadopoulou\",\n    \"approved_at\": \"2026-02-19T14:28:00Z\"\n  },\n  \"data_classification\": \"confidential\",\n  \"result\": \"success\"\n}\n\nRequired fields for all events: event_id, timestamp, skill, action, category, user.username, user.role, result.\n\nOptional fields: client, details, before_state, after_state, approval, data_classification.\n\nEvent categories:\n\ngovernment_submission — any filing sent to AADE, EFKA, myDATA\ndata_modification — create, update, or delete of client records\naccess_event — login, logout, session activity, access denial\ndocument_processing — OCR, classification, extraction, validation\nfinancial_output — statement generation, amendment, report creation\ncommunication — client correspondence sent\nsystem_operation — backup, integrity check, schema migration\nsecurity_event — lockout, 2FA failure, session revocation, permission change\n\nStorage: /data/system/logs/audit/{YYYY-MM-DD}_audit.jsonl (one JSON object per line, append-only).\n\nRetention: Audit logs are retained for 10 years per Greek tax law and EU regulatory requirements."
      },
      {
        "title": "Encryption-at-Rest Specification",
        "body": "Directories containing sensitive data must be encrypted at rest in production deployments. This is required for GDPR compliance (EU Regulation 2016/679, implemented in Greece by Law 4624/2019)."
      },
      {
        "title": "Directories Requiring Encryption",
        "body": "DirectoryClassificationEncryption RequiredRationale/data/auth/RestrictedMandatoryCredential hashes, session data, 2FA secrets/data/clients/ConfidentialMandatoryFinancial records, PII (names, AFMs, IBANs)/data/compliance/ConfidentialMandatoryTax filings containing financial data/data/efka/ConfidentialMandatoryEmployee PII, salary data, social security numbers/data/banking/ConfidentialRecommendedBank statements, account numbers/data/backups/ConfidentialAlready encryptedAES-256 via Skill 17/data/gdpr-exports/ConfidentialMandatorySubject access request data/data/processing/InternalOptionalEphemeral — deleted after pipeline/data/reports/InternalRecommendedMay contain client financial summaries/data/system/InternalOptionalLogs and operational data"
      },
      {
        "title": "Implementation",
        "body": "Encryption_At_Rest:\n  method: \"AES-256-GCM\"\n  key_management:\n    master_key_source: \"Environment variable OPENCLAW_ENCRYPTION_KEY or hardware security module\"\n    key_rotation: \"Annual, or immediately on suspected compromise\"\n    never: \"Never store the master key inside /data/ or in any SKILL.md file\"\n    \n  options:\n    full_disk: \"Preferred — use LUKS/dm-crypt on the volume hosting /data/\"\n    directory_level: \"Alternative — use fscrypt or gocryptfs per directory\"\n    file_level: \"Minimum — encrypt individual JSON files with per-file keys derived from master\"\n    \n  verification:\n    command: \"openclaw integrity verify-encryption --check-all-sensitive-dirs\"\n    schedule: \"Weekly, as part of system integrity check\""
      },
      {
        "title": "Data Classification Labels",
        "body": "Every JSON record stored in encrypted directories should include a data_classification field:\n\n{\n  \"data_classification\": \"confidential\"\n}\n\nValid values: public, internal, confidential, restricted.\n\nThis field enables rapid scoping during GDPR breach notification (72-hour requirement) — you can quickly determine what classification of data was exposed."
      },
      {
        "title": "Professional Liability Disclaimer Template",
        "body": "Every client-facing document generated by the system must include this disclaimer. Skills that produce client-visible output (Skills 15, 16, 18) must append this to their output templates."
      },
      {
        "title": "Standard Disclaimer (Greek)",
        "body": "Το παρόν έγγραφο συντάχθηκε με τη χρήση αυτοματοποιημένου λογισμικού λογιστικής\nυποβοήθησης. Οι πληροφορίες που περιέχονται δεν αποτελούν επαγγελματική λογιστική\nή φορολογική συμβουλή. Συνιστάται η επανεξέταση από αδειοδοτημένο λογιστή πριν\nαπό τη λήψη οποιασδήποτε απόφασης βάσει αυτού του εγγράφου."
      },
      {
        "title": "Standard Disclaimer (English)",
        "body": "This document was prepared with the assistance of automated accounting software.\nThe information contained herein does not constitute professional accounting or\ntax advice. Review by a licensed accountant is recommended before making any\ndecisions based on this document."
      },
      {
        "title": "Usage Rules",
        "body": "Financial statements (Skill 15): Include both Greek and English disclaimers in PDF footer\nClient correspondence (Skill 16): Include Greek disclaimer in email footer\nAdvisory reports (Skill 18): Include English disclaimer in internal reports, Greek in client-facing\nGovernment submissions: Disclaimer is NOT included in filings sent to AADE/EFKA (these are formal submissions, not advisory documents)"
      },
      {
        "title": "Input Validation Rules",
        "body": "All skills must validate incoming data against these rules before processing. Invalid input must be rejected with a clear error message — never silently accepted."
      },
      {
        "title": "Identifier Validation",
        "body": "Validation_Rules:\n  afm:\n    format: \"EL followed by exactly 9 digits\"\n    regex: \"^EL[0-9]{9}$\"\n    examples_valid: [\"EL123456789\", \"EL000000001\"]\n    examples_invalid: [\"123456789\", \"EL12345\", \"el123456789\", \"GR123456789\"]\n    \n  iban:\n    format: \"GR followed by 25 alphanumeric characters\"\n    regex: \"^GR[0-9]{25}$\"\n    note: \"Validate check digits per ISO 13616\"\n    \n  ama:\n    description: \"EFKA registration number\"\n    format: \"Numeric, variable length up to 12 digits\"\n    regex: \"^[0-9]{1,12}$\"\n    \n  amka:\n    description: \"Social security number\"\n    format: \"Exactly 11 digits (DDMMYY + 5 sequence digits)\"\n    regex: \"^[0-9]{11}$\""
      },
      {
        "title": "Financial Value Validation",
        "body": "Financial_Validation:\n  currency_amounts:\n    type: \"numeric (float or decimal)\"\n    precision: \"2 decimal places\"\n    never: \"Never store as string with euro symbol\"\n    range: \"0.00 to 999,999,999.99 for normal operations\"\n    negative: \"Allowed for credit notes and adjustments — flag if unexpected\"\n    \n  vat_rates:\n    valid_values: [0.24, 0.13, 0.06, 0.0]\n    labels: [\"24% standard\", \"13% reduced\", \"6% super-reduced\", \"0% exempt\"]\n    note: \"Reject any other rate — may indicate data entry error\"\n    \n  periods:\n    monthly: \"YYYY-MM format, e.g. 2026-01\"\n    annual: \"YYYY format, e.g. 2025\"\n    regex_monthly: \"^[0-9]{4}-(0[1-9]|1[0-2])$\"\n    regex_annual: \"^[0-9]{4}$\""
      },
      {
        "title": "Date and Time Validation",
        "body": "Date_Validation:\n  stored_format: \"ISO 8601: YYYY-MM-DD for dates, YYYY-MM-DDTHH:MM:SSZ for timestamps\"\n  display_format: \"DD/MM/YYYY for Greek client output, YYYY-MM-DD for internal\"\n  timezone: \"All stored timestamps in UTC. Convert to Europe/Athens only at display layer.\"\n  never: \"Never store DD/MM/YYYY in JSON — only in display templates\"\n  \n  fiscal_year:\n    default: \"Calendar year (January 1 — December 31)\"\n    alternative: \"Some entities use non-calendar fiscal years — check client profile\""
      },
      {
        "title": "String Validation",
        "body": "String_Validation:\n  client_names:\n    charset: \"Greek Unicode (U+0370-U+03FF) and Latin characters, spaces, hyphens, periods\"\n    max_length: 200\n    note: \"Store in original case — never force uppercase in storage (uppercase for display only)\"\n    \n  file_names:\n    charset: \"Latin alphanumeric, hyphens, underscores, periods only\"\n    never: \"Never use Greek characters, spaces, or special characters in file names\"\n    max_length: 255\n    \n  descriptions:\n    charset: \"Any UTF-8\"\n    max_length: 2000"
      }
    ],
    "body": "Canonical Data Directory Map\nOpenClaw Greek Accounting System — v1.1\nSetup\n\nThis skill is a reference document — it defines the directory structure and naming conventions used by all other Greek accounting skills. No binaries or credentials required.\n\n# Set the data directory (all skills read this)\nexport OPENCLAW_DATA_DIR=\"/data\"\n\n# Initialize the full directory structure\nmkdir -p $OPENCLAW_DATA_DIR/{incoming/{invoices,receipts,statements,government},processing,clients,compliance/{vat,efka,mydata,e1,e3},banking/{imports/{alpha,nbg,eurobank,piraeus},processing,reconciliation},ocr/{incoming,output},reports,auth,system/{logs,process-locks},backups}\n\n\nThis document defines the complete file system architecture for the OpenClaw Greek Accounting system. It is the authoritative reference for all path decisions. No skill may introduce a new top-level directory or deviate from the naming conventions defined here without a version update to this document.\n\nv1.1 change: Added /data/memory/ — agent episodic memory, failure logs, pattern store, GitHub proposal queue, and rate-limit state. Owner: memory-feedback (Skill 19, Phase 4). All Phase 3B+ skills must include episode and failure log hooks that write into this tree.\n\nRoot Structure\n/data/\n╔══ incoming/          # All raw input — documents arriving into the system\n╔══ processing/        # Temporary working space — files mid-pipeline\n╔══ clients/           # Canonical client records — the source of truth\n╔══ compliance/        # Government filings and submissions\n╔══ banking/           # Bank statement processing pipeline\n╔══ ocr/               # OCR processing pipeline\n╔══ efka/              # EFKA/social security processing pipeline\n╔══ reports/           # Generated reports for human consumption\n╔══ exports/           # Data exports leaving the system\n╔══ imports/           # Bulk data imports entering the system\n╔══ dashboard/         # Dashboard state, config, cache, history\n╔══ auth/              # Authentication and access control\n╔══ backups/           # Encrypted system backups\n╔══ gdpr-exports/      # GDPR subject access request exports\n╔══ memory/            # Agent episodic memory, failure logs, learning patterns, proposals\n└══ system/            # System-level files: logs, schema versions, locks\n\n1. /data/incoming/ — Raw Input\n\nAll documents entering the system land here first, regardless of source (email attachment, manual drop, scanner, bank download). Nothing in /data/incoming/ is processed yet.\n\n/data/incoming/\n╔══ invoices/          # Supplier invoices (PDF, image)\n╔══ receipts/          # Receipts (PDF, image, phone photo)\n╔══ statements/        # Bank statements (PDF, CSV, OFX)\n╔══ government/        # AADE/EFKA notifications and documents\n╔══ payroll/           # Hour sheets, employee documents\n╔══ tax-documents/     # Tax certificates, employer statements (βεβαιώσεις)\n╔══ contracts/         # Contracts and legal documents\n└══ other/             # Uncategorised — routed after classification\n\n\nNaming convention for incoming files: Files dropped here may arrive with any name. The system must NOT rename them on arrival — the original filename is preserved for audit purposes. The system assigns a canonical name only when moving to /data/processing/.\n\n2. /data/processing/ — In-Flight Pipeline\n\nTemporary working space. Files here are mid-pipeline and may be incomplete. No other skill should read from /data/processing/ as a final source — always read from /data/clients/ or /data/compliance/ for canonical data.\n\n/data/processing/\n╔══ ocr/               # OCR in progress\n╚   ╔══ queued/        # Waiting for OCR\n╚   ╔══ enhanced/      # Image pre-processing complete\n╚   ╔══ extracted/     # Text extracted, not yet validated\n╚   └══ validated/     # OCR output validated, ready to route\n╔══ classification/    # Document type identification in progress\n╔══ reconciliation/    # Bank reconciliation working files\n╚   ╔══ matching/      # Transaction matching in progress\n╚   └══ flagged/       # Items needing human review\n╔══ compliance/        # Filing preparation working files\n╚   ╔══ vat/           # VAT return preparation\n╚   ╔══ efka/          # EFKA declaration preparation\n╚   └══ mydata/        # myDATA submission preparation\n└══ imports/           # Bulk import validation in progress\n\n\nCleanup policy: Files in /data/processing/ are deleted or archived after the pipeline completes successfully. They are never the canonical record.\n\n3. /data/clients/ — Client Master Records\n\nThe single source of truth for all client data. Every other skill that needs client information reads from here. Only the client-data-management skill writes to this tree.\n\n/data/clients/\n╔══ _index.json                    # Global client index (name, AFM, status, assignee)\n╔══ _audit-log.json                # All access and change events across all clients\n╔══ _schema-version.json           # Current schema version for migration tracking\n└══ {AFM}/                         # One directory per client, keyed by AFM (e.g. EL123456789)\n    ╔══ profile.json               # Master client record\n    ╔══ identifiers.json           # AFM, GEMI, EFKA employer ID, IBANs\n    ╔══ contacts.json              # Contact persons\n    ╔══ notes.json                 # Relationship notes and meeting logs\n    ╔══ compliance/\n    ╚   ╔══ filings.json           # All completed filings (VAT, EFKA, E1, etc.)\n    ╚   ╔══ obligations.json       # Recurring obligation schedule\n    ╚   └══ gaps.json              # Missing/overdue filing log\n    ╔══ documents/\n    ╚   ╔══ registry.json          # Metadata index of all documents for this client\n    ╚   ╔══ pending.json           # Documents awaiting processing or review\n    ╚   └══ archive-index.json     # References to archived documents\n    ╔══ correspondence/\n    ╚   └══ {YYYYMMDD}_{type}_{draft-id}_sent.json  # Immutable sent communication records\n    ╔══ comms-preferences.json     # Client-specific salutation, contact, language overrides\n    ╔══ payroll/\n    ╚   └══ {YYYY-MM}/             # One folder per pay period\n    ╚       ╔══ hours-input.csv    # Raw hours data\n    ╚       ╔══ calculations.json  # Computed payroll data\n    ╚       └══ {employee-slug}_payslip.pdf   # Generated payslips\n    ╔══ financial-statements/\n    ╚   ╔══ index.json             # All generated statements, versions, periods, status\n    ╚   ╔══ {YYYY-MM}_pl_v{N}.json               # P&L machine-readable\n    ╚   ╔══ {YYYY-MM}_balance-sheet_v{N}.json     # Balance sheet machine-readable\n    ╚   ╔══ {YYYY-MM}_cash-flow_v{N}.json         # Cash flow machine-readable\n    ╚   └══ {YYYY-MM}_vat-summary_v{N}.json       # VAT summary machine-readable\n    └══ gdpr/\n        ╔══ consent.json           # Consent records\n        ╔══ retention-policy.json  # Retention schedule for this client\n        └══ deletion-log.json      # Record of any deletions performed\n\n\nAFM format: Always EL + 9 digits, uppercase. Example: EL123456789. Never store without the EL prefix. Never use the 9-digit-only form as a directory name.\n\n4. /data/compliance/ — Government Filings\n\nStores the actual submission files (XML, PDF) generated for government platforms. The filing record lives in /data/clients/{AFM}/compliance/filings.json — this directory holds the file artefacts themselves.\n\n/data/compliance/\n╔══ vat/\n╚   └══ {AFM}_{YYYY}{MM}_vat_return.xml      # VAT return XML for TAXIS\n╔══ mydata/\n╚   └══ {AFM}_{YYYY}{MM}_{invoice-number}_mydata.xml\n╔══ efka/\n╚   └══ {AFM}_{YYYY}{MM}_efka_declaration.xml\n╔══ e1/\n╚   └══ {AFM}_{YYYY}_e1_form.xml             # Individual tax returns\n╔══ e3/\n╚   └══ {AFM}_{YYYY}_e3_form.xml             # Business activity statements\n╔══ corporate-tax/\n╚   └══ {AFM}_{YYYY}_corporate_tax.xml\n└══ submissions/\n    └══ {AFM}_{YYYY}{MM}_{type}_submission-receipt.json   # Government confirmation receipts\n\n\nNaming convention: {AFM}_{period}_{type}.{ext} — always lowercase type, always ISO period format (YYYYMM or YYYY), always the full AFM with EL prefix.\n\n5. /data/banking/ — Bank Statement Pipeline\n/data/banking/\n╔══ imports/\n╚   ╔══ alpha/         # Alpha Bank raw statement files\n╚   ╔══ nbg/           # National Bank of Greece\n╚   ╔══ eurobank/      # Eurobank\n╚   ╔══ piraeus/       # Piraeus Bank\n╚   └══ other/         # Other banks\n╔══ processing/\n╚   ╔══ raw/           # Imported, not yet validated\n╚   ╔══ validated/     # Format validation complete\n╚   ╔══ categorized/   # Transactions categorised\n╚   └══ reconciled/    # Reconciliation complete\n╔══ reconciliation/\n╚   └══ {AFM}_{YYYY-MM}_reconciliation.json  # Per-client reconciliation reports\n└══ exports/\n    └══ {AFM}_{YYYY-MM}_transactions.csv     # Clean transaction exports\n\n\nNote: /data/alpha-bank/, /data/nbg-statements/, /data/eurobank/, /data/piraeus-bank/ used in earlier skill versions are deprecated. All bank imports go through /data/banking/imports/{bank}/.\n\n6. /data/ocr/ — OCR Processing Pipeline\n/data/ocr/\n╔══ incoming/\n╚   ╔══ scanned/       # Flatbed scanner input\n╚   ╔══ photos/        # Mobile phone photos of documents\n╚   ╔══ government/    # Government-issued documents (AADE letters, etc.)\n╚   └══ handwritten/   # Handwritten documents requiring special handling\n╔══ preprocessing/\n╚   └══ enhanced/      # Image-enhanced versions awaiting OCR\n╔══ processing/\n╚   ╔══ greek-ocr/     # Greek language OCR in progress\n╚   ╔══ classification/ # Document type being determined\n╚   └══ validation/    # OCR output being validated\n╔══ output/\n╚   ╔══ text-extracted/       # Raw text output from OCR\n╚   ╔══ structured-data/      # Structured JSON extracted from text\n╚   └══ searchable-pdf/       # PDFs with embedded text layer\n└══ accounting-ready/          # Processed output ready for accounting-workflows skill\n\n\nNote: /data/scanned-documents/ used in earlier skill versions is deprecated. All scanned input goes to /data/ocr/incoming/scanned/.\n\n7. /data/efka/ — EFKA Processing Pipeline\n/data/efka/\n╔══ employees/\n╚   ╔══ active/        # Current employee records\n╚   ╔══ pending/       # New employees awaiting EFKA registration\n╚   ╔══ terminated/    # Terminated employees (retained per legal requirements)\n╚   ╔══ imports/       # Bulk employee data imports\n╚   ╔══ updates/       # Pending employee record changes\n╚   └══ validated/     # Imports validated, ready to commit\n╔══ contributions/\n╚   ╔══ monthly/       # Monthly contribution calculations by period\n╚   ╔══ quarterly/     # Quarterly summaries\n╚   ╔══ annual/        # Annual totals\n╚   ╔══ calculated/    # Computed contributions awaiting validation\n╚   ╔══ validated/     # Validated, ready to submit\n╚   └══ payments/      # Payment confirmation records\n╔══ payroll/\n╚   ╔══ input/         # Raw hours and salary data\n╚   ╔══ validated/     # Validated input\n╚   ╔══ processed/     # Calculations complete\n╚   └══ ready-submit/  # Ready for EFKA portal submission\n╔══ submissions/\n╚   ╔══ ready/         # Submission files ready to send\n╚   ╔══ efka-portal/   # Submitted to EFKA portal (confirmation pending)\n╚   └══ aade-cross/    # Cross-referenced with AADE for consistency\n╔══ responses/\n╚   ╔══ confirmations/ # EFKA acceptance receipts\n╚   └══ corrections/   # EFKA rejection/correction requests\n╔══ deadlines/\n╚   ╔══ upcoming/      # Deadlines in the next 30 days\n╚   └══ overdue/       # Missed deadlines requiring urgent action\n╔══ audit/\n╚   ╔══ employee-records/    # Audit-ready employee documentation\n╚   └══ contribution-proof/  # Proof of contribution payments\n└══ compliance/\n    └══ monitoring/    # Ongoing compliance status tracking\n\n8. /data/reports/ — Generated Reports\n\nHuman-readable reports. These are outputs, not inputs to other skills.\n\n/data/reports/\n╔══ daily/\n╚   └══ {YYYY-MM-DD}_daily_summary.pdf\n╔══ weekly/\n╚   └══ {YYYY-WNN}_weekly_report.pdf\n╔══ monthly/\n╚   └══ {YYYY-MM}_monthly_report.pdf\n╔══ client/\n╚   └══ {AFM}_{YYYY-MM}_{report-type}.pdf\n╔══ compliance/\n╚   └══ {AFM}_{YYYY-MM}_compliance_status.pdf\n╔══ reconciliation/\n╚   └══ {AFM}_{YYYY-MM}_reconciliation_report.pdf\n└══ financial-statements/\n    └══ {AFM}_{YYYY-MM}_financial-pack_v{N}.pdf   # Client-facing PDF statement pack\n\n\nNote: /data/reports/monthly-expenses.json (used in Skill 1) is deprecated. Expense data belongs in /data/clients/{AFM}/compliance/ or exported via /data/exports/.\n\n9. /data/exports/ — Data Leaving the System\n\nFiles generated for external consumption (Excel exports, CSV downloads, accounting software imports).\n\n/data/exports/\n╔══ clients/\n╚   └══ {YYYY-MM-DD}_client_export.{xlsx|csv|json}\n╔══ transactions/\n╚   └══ {AFM}_{YYYY-MM}_transactions.{csv|xlsx}\n╔══ compliance/\n╚   └══ {AFM}_{YYYY}_compliance_summary.xlsx\n└══ accounting-software/\n    └══ {AFM}_{YYYY-MM}_{target-system}.{qbx|csv|xlsx}\n\n10. /data/imports/ — Bulk Data Entering the System\n\nStructured bulk imports (spreadsheets of client lists, employee rosters, etc.) — not raw documents (those go to /data/incoming/).\n\n/data/imports/\n╔══ clients/           # Bulk client onboarding files\n╔══ employees/         # Bulk employee roster imports\n└══ historical/        # Historical data migration files\n\n11. /data/dashboard/ — Dashboard State\n/data/dashboard/\n╔══ config/\n╚   ╔══ firm-settings.yaml\n╚   ╔══ alert-rules.yaml\n╚   ╔══ report-templates.yaml\n╚   └══ user-preferences/{username}.yaml\n╔══ state/\n╚   ╔══ client-status.json      # Current status snapshot for all clients\n╚   ╔══ current-alerts.json     # Active alerts\n╚   ╔══ deadline-tracker.json   # Upcoming deadlines\n╚   ╔══ task-queue.json         # Pending task list\n╚   └══ system-health.json      # Skill integration health\n╔══ cache/\n╚   ╔══ aade-latest.json\n╚   ╔══ efka-latest.json\n╚   ╔══ bank-feeds-latest.json\n╚   └══ ocr-queue-status.json\n╔══ reports/\n╚   ╔══ daily/\n╚   ╔══ weekly/\n╚   ╔══ monthly/\n╚   └══ client-specific/\n└══ history/\n    ╔══ alerts/\n    ╔══ compliance-scores/\n    └══ performance-metrics/\n\n12. /data/auth/ — Authentication & Access Control\n/data/auth/\n╔══ users/\n╚   └══ {username}/\n╚       ╔══ profile.json\n╚       ╔══ credentials.json     # Hashed — never plaintext\n╚       ╔══ permissions.json\n╚       ╔══ 2fa/\n╚       └══ sessions/\n╚           └══ {session-id}.json\n╔══ roles/\n╚   ╔══ senior_accountant.json\n╚   ╔══ accountant.json\n╚   ╔══ assistant.json\n╚   ╔══ viewer.json\n╚   └══ custom/\n╔══ access/\n╚   ╔══ client_assignments.json\n╚   ╔══ policies.json\n╚   └══ ip_whitelist.json\n└══ logs/\n    ╔══ logins/\n    ╔══ access/\n    ╔══ admin/\n    └══ security/\n\n13. /data/backups/ — Encrypted Backups\n/data/backups/\n╔══ full_{YYYYMMDD}.tar.enc                        # Full system backup (weekly)\n╔══ incremental_{YYYYMMDD}.tar.enc                 # Incremental backup (daily)\n╔══ clients_{YYYYMMDD}_{HHMMSS}.json.enc           # Client snapshot (event-driven)\n╔══ compliance_{YYYYMMDD}_{HHMMSS}.json.enc        # Compliance snapshot (post-submission)\n╔══ auth_{YYYYMMDD}.json.enc                       # Auth data backup\n╔══ restore-test/                                  # Ephemeral — restore verification workspace\n└══ archives/                                      # Long-term retention archives (post-active)\n\n\nNaming convention: Always include date and time in backup filename. Always .enc extension for encrypted files. Encryption keys are stored outside /data/ — never adjacent to backup files.\n\n14. /data/gdpr-exports/ — GDPR Subject Access Exports\n/data/gdpr-exports/\n└══ {AFM}_gdpr_export_{YYYYMMDD}.json\n\n15. /data/system/ — System Files\n/data/system/\n╔══ skill-versions.json          # Installed skill versions and checksums\n╔══ migration-log.json           # Schema migration history\n╔══ process-locks/               # Concurrency locks (prevent double-processing)\n╔══ error-log/\n╚   └══ {YYYY-MM-DD}_errors.log\n╔══ migrations/\n╚   └══ v{N.N}_{YYYYMMDD}_{description}.json  # Schema migration definitions\n╔══ integrity/\n╚   ╔══ audit-log.json           # Permanent integrity event log (all checks and results)\n╚   ╔══ hash-registry.json       # SHA256 hashes of all canonical data files\n╚   ╔══ retention-schedule.json  # Active retention schedule configuration\n╚   └══ last-check-results.json  # Most recent integrity check results (dashboard feed)\n╔══ backups/\n╚   └══ backup-manifest.json     # Index of all backup files with metadata and verify status\n╔══ chat-sessions/\n╚   └══ {username}/\n╚       └══ {YYYY-MM-DD}_{session-id}.json   # Conversational assistant session logs\n└══ chat-context/\n    └══ {username}/\n        └══ active-context.json              # Active session context (cleared on session end)\n\n16. /data/memory/ — Agent Memory & Feedback\n\nThe agent's episodic memory, failure capture, pattern learning store, GitHub proposal queue, and rate-limit state. Written to by all skills (episode and failure hooks) and managed by the memory-feedback skill (Skill 19). No skill other than memory-feedback reads from this tree for decision-making — it is strictly write-on-event, read-by-Skill-19.\n\n/data/memory/\n╔══ episodes/\n╚   └══ {YYYY-MM-DD}/\n╚       └══ {session-id}_{action-type}.json    # Successful/completed agent actions\n╔══ failures/\n╚   └══ {YYYY-MM-DD}/\n╚       └══ {session-id}_{failure-type}.json   # Failures with structured reflection\n╔══ patterns/\n╚   ╔══ successes/\n╚   ╚   └══ {pattern-id}.json                  # Recurring good outcomes extracted from episodes\n╚   └══ failures/\n╚       └══ {pattern-id}.json                  # Recurring problems extracted from failures\n╔══ corrections/\n╚   └══ {YYYY-MM-DD}_{correction-id}.json      # Human corrections to agent behaviour\n╔══ proposals/\n╚   └══ {YYYY-MM-DD}_{skill-name}_{id}.md      # Draft skill improvements awaiting GitHub PR\n└══ rate-limits/\n    ╔══ current-state.json                      # Live token and storage consumption\n    ╔══ daily-log.json                          # Per-day consumption history\n    └══ config.json                             # Configurable limits (hard floors enforced)\n\n\nEpisode logging trigger: Any agent action that makes a decision, produces output, or interacts with a government system. Trivial reads are not logged.\n\nFailure logging trigger: Any error, intent misread, missing data condition, or human correction. Always includes what_should_have_happened field.\n\nPattern scan schedule: Once daily at 02:00 Athens time. Never during business hours. Maximum 3 proposals per day. Maximum 2 GitHub PRs per day.\n\nStorage limits (defaults):\n\nEpisodes: 500 MB max — auto-archive after 90 days\nFailures: 200 MB max\nPatterns: 50 MB max\nProposals: 50 MB max\nTotal /data/memory/: 2 GB hard ceiling — system halts memory writes at 90% capacity\n\nGitHub integration: When a failure pattern reaches confidence threshold (≥0.85, ≥3 occurrences), memory-feedback creates a branch on GitHub and opens a pull request against the relevant SKILL.md file. Human must review and merge. Agent never pushes directly to main. Rejected PRs are logged — the same change is never re-proposed.\n\nRate limit tokens: Memory and reflection operations are budgeted separately from accounting operations. Default: 5,000 tokens/day for all memory processes combined.\n\nGlobal Naming Conventions\nIdentifiers\nIdentifier\tFormat\tExample\tNotes\nAFM (VAT)\tEL + 9 digits\tEL123456789\tAlways uppercase EL prefix. Never 9-digit-only.\nEFKA employer ID\t8 digits\t12345678\tNo prefix\nGEMI\t9€“12 digits\t012345678\tMay have leading zeros — preserve them\nContact ID\tC + 3 digits\tC001\tPer-client sequential\nFiling ID\t{type}-{AFM}-{YYYY}-{MM}\tVAT-EL123456789-2026-01\t\nDocument ID\tD + 6 digits\tD000123\tGlobal sequential\nAudit event ID\tAUD-{YYYYMMDD}-{6digits}\tAUD-20260218-001234\t\nBackup ID\t{type}_{YYYYMMDD}_{HHMMSS}\tclients_20260218_143022\t\nEpisode ID\tEP-{YYYYMMDD}-{3digits}\tEP-20260218-001\tGlobal sequential per day\nFailure ID\tFAIL-{YYYYMMDD}-{3digits}\tFAIL-20260218-003\tGlobal sequential per day\nPattern ID\tPAT-{YYYYMMDD}-{3digits}\tPAT-20260218-007\tAssigned at detection\nCorrection ID\tCOR-{YYYYMMDD}-{3digits}\tCOR-20260218-001\tHuman-assigned\nSession ID\tS{YYYYMMDD}-{3digits}\tS20260218-001\tPer user session\nDate & Time Formats\n\n| Context | Format | Example | Notes | | File names | YYYYMMDD | 20260218 | No separators in filenames | | File names with time | YYYYMMDD_HHMMSS | 20260218_143022 | | | Period references | YYYY-MM | 2026-01 | Monthly periods | | ISO timestamps (JSON) | YYYY-MM-DDTHH:MM:SSZ | 2026-02-18T14:30:00Z | Always UTC in storage | | Display to users | DD/MM/YYYY | 18/02/2026 | Greek date format | | CLI arguments --date | YYYY-MM-DD | 2026-02-18 | ISO for CLI args | | CLI arguments --period | YYYY-MM | 2026-01 | |\n\nCurrency\n\n| JSON storage | Numeric, 2dp | 12500.00 | Never include € symbol in stored values | | File names | No currency | 12500 | Integer amounts only in filenames | | Display to users | €XX,XXX.XX | €12,500.00 | Standard EU format | | CLI output | EUR XX,XXX.XX | EUR 12,500.00 | ASCII-safe for terminal |\n\nFile Naming Pattern\n\nPattern: {AFM}_{YYYY-MM}_{type}_{optional-detail}.{ext}\n\nExamples:\n\nEL123456789_2026-01_vat_return.xml\nEL123456789_2026-02_reconciliation_report.pdf\nEL123456789_2025_e1_form.xml\nEL123456789_2026-02_payslip_nikos-papadopoulos.pdf\n\nRules:\n\nLowercase type and detail segments\nHyphens within segments (not underscores)\nUnderscores between segments\nNo spaces anywhere in file names\nNo Greek characters in file names — use Latin transliteration for employee names\nNo special characters except hyphens and underscores\nEmployee Name Slugs (for file names)\n\nGreek names in file names must be transliterated to ASCII lowercase with hyphens:\n\nÎίκος Παπαδόπουλος → nikos-papadopoulos\nΜαÏία Κωνσταντίνου → maria-konstantinou\nΔήμητÏα ΚαλαμαÏά → dimitra-kalamara\nDeprecated Paths — Do Not Use\n\nThese paths appear in earlier skill versions and must not be used in any new skill. When encountered in existing commands, treat as aliases that redirect to the canonical paths.\n\nDeprecated\tCanonical Replacement\n/data/alpha-bank/\t/data/banking/imports/alpha/\n/data/nbg-statements/\t/data/banking/imports/nbg/\n/data/eurobank/\t/data/banking/imports/eurobank/\n/data/piraeus-bank/\t/data/banking/imports/piraeus/\n/data/bank-imports/\t/data/banking/imports/\n/data/scanned-documents/\t/data/ocr/incoming/scanned/\n/data/email-attachments\t/data/incoming/ (classified)\n/data/email-imports/\t/data/incoming/\n/data/invoices\t/data/incoming/invoices/ (if raw) or /data/clients/{AFM}/documents/ (if processed)\n/data/processed/invoices/\t/data/clients/{AFM}/documents/ + registry entry\n/data/processed/receipts/\t/data/clients/{AFM}/documents/ + registry entry\n/data/processed/E1_2025.pdf\t/data/compliance/e1/EL{AFM}_2025_e1_form.xml\n/data/processing/classification\t/data/processing/classification/\n/data/processing/extraction\t/data/processing/ocr/extracted/\n/data/processing/validation\t/data/processing/ocr/validated/\n/data/reports/monthly-expenses.json\t/data/clients/{AFM}/compliance/ or /data/exports/\n/data/payroll/monthly.xlsx\t/data/efka/payroll/input/ or /data/clients/{AFM}/payroll/\n/data/export/accounting-software\t/data/exports/accounting-software/\n/data/aade-downloads/\t/data/incoming/government/\n/data/aade-outputs/\t/data/reports/ or /data/compliance/ (by type)\n/data/aade-processing/\t/data/processing/compliance/\n/data/compliance-updates/\t/data/incoming/government/\nSkill Responsibility Matrix\n\nWhich skill owns (writes to) each top-level directory:\n\nDirectory\tOwner Skill\tOther Skills May Read\n/data/incoming/\taccounting-workflows\tAll skills\n/data/processing/\tPipeline skill handling the job\tNone as final source\n/data/clients/\tclient-data-management\tAll skills (read only)\n/data/compliance/\tgreek-compliance-aade\taade-api-monitor, efka-api-integration, dashboard\n/data/banking/\tgreek-banking-integration\taccounting-workflows, dashboard\n/data/ocr/\tgreek-document-ocr\taccounting-workflows, greek-email-processor\n/data/efka/\tefka-api-integration\tgreek-compliance-aade, dashboard\n/data/reports/\tdashboard-greek-accounting\tAll skills (read)\n/data/reports/analytics/\tanalytics-and-advisory-intelligence\tconversational-ai-assistant, dashboard-greek-accounting\n/data/reports/system/\tsystem-integrity-and-backup\tdashboard-greek-accounting (read)\n/data/clients/{AFM}/financial-statements/\tgreek-financial-statements\tconversational-ai-assistant, client-communication-engine, analytics-and-advisory-intelligence\n/data/clients/{AFM}/correspondence/\tclient-communication-engine\tconversational-ai-assistant, analytics-and-advisory-intelligence\n/data/processing/comms/\tclient-communication-engine\tEphemeral drafts only — cleared after send\n/data/backups/\tsystem-integrity-and-backup\tAll skills trigger event-driven snapshots via meta-skill\n/data/system/integrity/\tsystem-integrity-and-backup\tAll skills write hash on canonical file write\n/data/exports/\tAny skill (with --export)\tExternal consumers\n/data/imports/\tclient-data-management\tefka-api-integration\n/data/dashboard/\tdashboard-greek-accounting\tuser-authentication-system\n/data/auth/\tuser-authentication-system\tAll skills (auth check)\n/data/gdpr-exports/\tclient-data-management\tNone\n/data/system/\tOpenClaw system\tAll skills (read)\n/data/memory/\tmemory-feedback (Skill 19)\tAll skills write episode/failure hooks; only Skill 19 reads for analysis\nEnforcement Rules for All Skills\nNever introduce a new top-level directory under /data/ without updating this document first.\nNever write processed/canonical data to /data/processing/ — it is temporary only.\nNever write client data outside /data/clients/{AFM}/ — client-data-management is the only writer.\nAlways use the full AFM with EL prefix in all paths, filenames, and JSON keys.\nAlways use ISO date format (YYYY-MM-DD or YYYYMMDD) in file names and JSON — never DD/MM/YYYY in stored data.\nNever use Greek characters in file names or directory names — only in JSON values and display output.\nCurrency values in JSON are always numeric — never strings with € symbols.\nAll timestamps in JSON are UTC — display conversion to Europe/Athens happens at the output layer only.\nThe /data/processing/ tree is ephemeral — never reference it as the source of truth from another skill.\nDeprecated paths are read-only legacy — redirect to canonical paths, never create new files at deprecated locations.\nUnified Audit Event Schema\n\nEvery skill must log significant actions using this single JSON schema. Audit events are written to /data/system/logs/audit/ and are the authoritative record for regulatory inspection.\n\n{\n  \"event_id\": \"EVT-20260219-143022-a7b3\",\n  \"timestamp\": \"2026-02-19T14:30:22Z\",\n  \"skill\": \"greek-compliance-aade\",\n  \"action\": \"vat_return_submitted\",\n  \"category\": \"government_submission\",\n  \"user\": {\n    \"username\": \"m.papadopoulou\",\n    \"role\": \"senior_accountant\",\n    \"ip_address\": \"192.168.1.42\"\n  },\n  \"client\": {\n    \"afm\": \"EL123456789\",\n    \"name\": \"ALPHA TRADING AE\"\n  },\n  \"details\": {\n    \"period\": \"2026-01\",\n    \"filing_type\": \"F2_VAT_RETURN\",\n    \"amount\": 3340.00,\n    \"submission_ref\": \"AADE-2026-0142\"\n  },\n  \"before_state\": null,\n  \"after_state\": \"submitted\",\n  \"approval\": {\n    \"prepared_by\": \"a.nikolaou\",\n    \"approved_by\": \"m.papadopoulou\",\n    \"approved_at\": \"2026-02-19T14:28:00Z\"\n  },\n  \"data_classification\": \"confidential\",\n  \"result\": \"success\"\n}\n\n\nRequired fields for all events: event_id, timestamp, skill, action, category, user.username, user.role, result.\n\nOptional fields: client, details, before_state, after_state, approval, data_classification.\n\nEvent categories:\n\ngovernment_submission — any filing sent to AADE, EFKA, myDATA\ndata_modification — create, update, or delete of client records\naccess_event — login, logout, session activity, access denial\ndocument_processing — OCR, classification, extraction, validation\nfinancial_output — statement generation, amendment, report creation\ncommunication — client correspondence sent\nsystem_operation — backup, integrity check, schema migration\nsecurity_event — lockout, 2FA failure, session revocation, permission change\n\nStorage: /data/system/logs/audit/{YYYY-MM-DD}_audit.jsonl (one JSON object per line, append-only).\n\nRetention: Audit logs are retained for 10 years per Greek tax law and EU regulatory requirements.\n\nEncryption-at-Rest Specification\n\nDirectories containing sensitive data must be encrypted at rest in production deployments. This is required for GDPR compliance (EU Regulation 2016/679, implemented in Greece by Law 4624/2019).\n\nDirectories Requiring Encryption\nDirectory\tClassification\tEncryption Required\tRationale\n/data/auth/\tRestricted\tMandatory\tCredential hashes, session data, 2FA secrets\n/data/clients/\tConfidential\tMandatory\tFinancial records, PII (names, AFMs, IBANs)\n/data/compliance/\tConfidential\tMandatory\tTax filings containing financial data\n/data/efka/\tConfidential\tMandatory\tEmployee PII, salary data, social security numbers\n/data/banking/\tConfidential\tRecommended\tBank statements, account numbers\n/data/backups/\tConfidential\tAlready encrypted\tAES-256 via Skill 17\n/data/gdpr-exports/\tConfidential\tMandatory\tSubject access request data\n/data/processing/\tInternal\tOptional\tEphemeral — deleted after pipeline\n/data/reports/\tInternal\tRecommended\tMay contain client financial summaries\n/data/system/\tInternal\tOptional\tLogs and operational data\nImplementation\nEncryption_At_Rest:\n  method: \"AES-256-GCM\"\n  key_management:\n    master_key_source: \"Environment variable OPENCLAW_ENCRYPTION_KEY or hardware security module\"\n    key_rotation: \"Annual, or immediately on suspected compromise\"\n    never: \"Never store the master key inside /data/ or in any SKILL.md file\"\n    \n  options:\n    full_disk: \"Preferred — use LUKS/dm-crypt on the volume hosting /data/\"\n    directory_level: \"Alternative — use fscrypt or gocryptfs per directory\"\n    file_level: \"Minimum — encrypt individual JSON files with per-file keys derived from master\"\n    \n  verification:\n    command: \"openclaw integrity verify-encryption --check-all-sensitive-dirs\"\n    schedule: \"Weekly, as part of system integrity check\"\n\nData Classification Labels\n\nEvery JSON record stored in encrypted directories should include a data_classification field:\n\n{\n  \"data_classification\": \"confidential\"\n}\n\n\nValid values: public, internal, confidential, restricted.\n\nThis field enables rapid scoping during GDPR breach notification (72-hour requirement) — you can quickly determine what classification of data was exposed.\n\nProfessional Liability Disclaimer Template\n\nEvery client-facing document generated by the system must include this disclaimer. Skills that produce client-visible output (Skills 15, 16, 18) must append this to their output templates.\n\nStandard Disclaimer (Greek)\nΤο παρόν έγγραφο συντάχθηκε με τη χρήση αυτοματοποιημένου λογισμικού λογιστικής\nυποβοήθησης. Οι πληροφορίες που περιέχονται δεν αποτελούν επαγγελματική λογιστική\nή φορολογική συμβουλή. Συνιστάται η επανεξέταση από αδειοδοτημένο λογιστή πριν\nαπό τη λήψη οποιασδήποτε απόφασης βάσει αυτού του εγγράφου.\n\nStandard Disclaimer (English)\nThis document was prepared with the assistance of automated accounting software.\nThe information contained herein does not constitute professional accounting or\ntax advice. Review by a licensed accountant is recommended before making any\ndecisions based on this document.\n\nUsage Rules\nFinancial statements (Skill 15): Include both Greek and English disclaimers in PDF footer\nClient correspondence (Skill 16): Include Greek disclaimer in email footer\nAdvisory reports (Skill 18): Include English disclaimer in internal reports, Greek in client-facing\nGovernment submissions: Disclaimer is NOT included in filings sent to AADE/EFKA (these are formal submissions, not advisory documents)\nInput Validation Rules\n\nAll skills must validate incoming data against these rules before processing. Invalid input must be rejected with a clear error message — never silently accepted.\n\nIdentifier Validation\nValidation_Rules:\n  afm:\n    format: \"EL followed by exactly 9 digits\"\n    regex: \"^EL[0-9]{9}$\"\n    examples_valid: [\"EL123456789\", \"EL000000001\"]\n    examples_invalid: [\"123456789\", \"EL12345\", \"el123456789\", \"GR123456789\"]\n    \n  iban:\n    format: \"GR followed by 25 alphanumeric characters\"\n    regex: \"^GR[0-9]{25}$\"\n    note: \"Validate check digits per ISO 13616\"\n    \n  ama:\n    description: \"EFKA registration number\"\n    format: \"Numeric, variable length up to 12 digits\"\n    regex: \"^[0-9]{1,12}$\"\n    \n  amka:\n    description: \"Social security number\"\n    format: \"Exactly 11 digits (DDMMYY + 5 sequence digits)\"\n    regex: \"^[0-9]{11}$\"\n\nFinancial Value Validation\nFinancial_Validation:\n  currency_amounts:\n    type: \"numeric (float or decimal)\"\n    precision: \"2 decimal places\"\n    never: \"Never store as string with euro symbol\"\n    range: \"0.00 to 999,999,999.99 for normal operations\"\n    negative: \"Allowed for credit notes and adjustments — flag if unexpected\"\n    \n  vat_rates:\n    valid_values: [0.24, 0.13, 0.06, 0.0]\n    labels: [\"24% standard\", \"13% reduced\", \"6% super-reduced\", \"0% exempt\"]\n    note: \"Reject any other rate — may indicate data entry error\"\n    \n  periods:\n    monthly: \"YYYY-MM format, e.g. 2026-01\"\n    annual: \"YYYY format, e.g. 2025\"\n    regex_monthly: \"^[0-9]{4}-(0[1-9]|1[0-2])$\"\n    regex_annual: \"^[0-9]{4}$\"\n\nDate and Time Validation\nDate_Validation:\n  stored_format: \"ISO 8601: YYYY-MM-DD for dates, YYYY-MM-DDTHH:MM:SSZ for timestamps\"\n  display_format: \"DD/MM/YYYY for Greek client output, YYYY-MM-DD for internal\"\n  timezone: \"All stored timestamps in UTC. Convert to Europe/Athens only at display layer.\"\n  never: \"Never store DD/MM/YYYY in JSON — only in display templates\"\n  \n  fiscal_year:\n    default: \"Calendar year (January 1 — December 31)\"\n    alternative: \"Some entities use non-calendar fiscal years — check client profile\"\n\nString Validation\nString_Validation:\n  client_names:\n    charset: \"Greek Unicode (U+0370-U+03FF) and Latin characters, spaces, hyphens, periods\"\n    max_length: 200\n    note: \"Store in original case — never force uppercase in storage (uppercase for display only)\"\n    \n  file_names:\n    charset: \"Latin alphanumeric, hyphens, underscores, periods only\"\n    never: \"Never use Greek characters, spaces, or special characters in file names\"\n    max_length: 255\n    \n  descriptions:\n    charset: \"Any UTF-8\"\n    max_length: 2000"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/satoshistackalotto/canonical-data-map",
    "publisherUrl": "https://clawhub.ai/satoshistackalotto/canonical-data-map",
    "owner": "satoshistackalotto",
    "version": "0.1.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/canonical-data-map",
    "downloadUrl": "https://openagent3.xyz/downloads/canonical-data-map",
    "agentUrl": "https://openagent3.xyz/skills/canonical-data-map/agent",
    "manifestUrl": "https://openagent3.xyz/skills/canonical-data-map/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/canonical-data-map/agent.md"
  }
}