client-data-management
Secure client database for Greek accounting firms.
Client Data Management
This skill provides a secure, file-based client database for Greek accounting firms operating through OpenClaw. It manages all client master data, compliance history, document metadata, and relationship records while enforcing encryption, access control, and GDPR requirements for Greek business operations.
Setup
export OPENCLAW_DATA_DIR="/data"
which jq || sudo apt install jq
mkdir -p $OPENCLAW_DATA_DIR/clients
No external credentials required. Manages client records as JSON files in the local filesystem. Handles GDPR data lifecycle locally.
Core Philosophy
- File-Based Security: Encrypted JSON files managed through OpenClaw, no external database required
- Greek Business Focus: Built around AFM (VAT numbers), EFKA employer IDs, GEMI numbers, and Greek regulatory identifiers
- GDPR by Default: All personal data handled with consent tracking, retention policies, and deletion workflows
- Audit Everything: Every read, write, and delete of client data is logged with user identity and timestamp
- Assistant-Friendly: English interface with structured commands for non-technical accounting assistants
- Integration Hub: Client records link to all other skills — compliance, banking, EFKA, deadlines, OCR
OpenClaw Commands
Client Registration & Profile Management
# Register new client
openclaw clients add --name "ALPHA TRADING AE" --afm EL123456789 --legal-form AE --sector retail
openclaw clients add --name "BETA SERVICES OE" --afm EL987654321 --legal-form OE --sector services --gemi 012345678
# Update client profile
openclaw clients update --afm EL123456789 --field registered-address --value "Οδός Αθηνών 45, Αθήνα 10431"
openclaw clients update --afm EL123456789 --field contact-email --value "info@alphatrading.gr"
openclaw clients update --afm EL123456789 --field accountant-assigned --value "maria.g"
# View client profile
openclaw clients view --afm EL123456789 --full-profile
openclaw clients view --afm EL123456789 --compliance-summary
openclaw clients view --name "ALPHA TRADING AE" --format table
# Deactivate / archive client
openclaw clients deactivate --afm EL123456789 --reason "ceased-trading" --archive-data
openclaw clients reactivate --afm EL123456789 --effective-date 2026-03-01
Client Search & Listing
# Search and filter
openclaw clients list --all --format table
openclaw clients list --sector retail --active-only
openclaw clients list --legal-form AE --missing-documents
openclaw clients list --assigned-to "maria.g" --compliance-risk high
# Search by various identifiers
openclaw clients search --query "ALPHA" --field name
openclaw clients search --afm EL123456789
openclaw clients search --efka-id 12345678
openclaw clients search --gemi 012345678
# Portfolio views
openclaw clients portfolio --summary --by-sector
openclaw clients portfolio --compliance-scores --rank-by risk
openclaw clients portfolio --workload-estimate --by-assignee
Compliance History & Filing Records
# Log a completed filing
openclaw clients log-filing --afm EL123456789 --type VAT-monthly --period 2026-01 --status submitted --ref-number "AAΔ-123456"
openclaw clients log-filing --afm EL123456789 --type EFKA-monthly --period 2026-01 --status paid --amount 4250.00
# View compliance history
openclaw clients compliance-history --afm EL123456789 --type VAT --last 12-months
openclaw clients compliance-history --afm EL123456789 --all-types --format report
openclaw clients compliance-gaps --afm EL123456789 --flag-missing
openclaw clients compliance-gaps --all-clients --period 2025 --export csv
# Upcoming obligations
openclaw clients obligations --afm EL123456789 --next 30-days
openclaw clients obligations --all-clients --due-this-week --prioritize
Document Registry
# Register a document against a client
openclaw clients doc-register --afm EL123456789 --type invoice --file /data/ocr/output/accounting-ready/inv_001.pdf --date 2026-02-01 --amount 5400.00
openclaw clients doc-register --afm EL123456789 --type tax-return --file /data/compliance/e1/EL123456789_2025_e1_form.xml --tax-year 2025
# Query document registry
openclaw clients doc-list --afm EL123456789 --type invoice --period 2026-01
openclaw clients doc-list --afm EL123456789 --missing --type bank-statement
openclaw clients doc-find --afm EL123456789 --filename "E1_2025"
openclaw clients doc-summary --afm EL123456789 --by-type --count
# Document status tracking
openclaw clients doc-status --afm EL123456789 --awaiting-review
openclaw clients doc-status --all-clients --unprocessed --flag-urgent
Contact & Relationship Management
# Manage client contacts
openclaw clients contact-add --afm EL123456789 --name "ΓιώÏγος Παπαδόπουλος" --role "CEO" --email "gp@alphatrading.gr" --phone "+30 210 1234567"
openclaw clients contact-update --afm EL123456789 --contact-id C001 --field phone --value "+30 6944 123456"
openclaw clients contact-list --afm EL123456789 --format table
openclaw clients contact-primary --afm EL123456789 --set C001
# Notes and relationship log
openclaw clients note-add --afm EL123456789 --note "Client prefers PDF reports by email end of month"
openclaw clients note-add --afm EL123456789 --type meeting --date 2026-02-15 --summary "Discussed Q1 tax planning"
openclaw clients notes-view --afm EL123456789 --last 10 --type all
GDPR & Data Privacy
# Consent management
openclaw clients gdpr-consent --afm EL123456789 --record --type data-processing --granted-by "ΓιώÏγος Παπαδόπουλος" --date 2026-01-01
openclaw clients gdpr-consent --afm EL123456789 --status
# Data subject requests
openclaw clients gdpr-export --afm EL123456789 --format json --output /data/gdpr-exports/
openclaw clients gdpr-delete --afm EL123456789 --confirm --reason "client-request" --retention-override
# Retention management
openclaw clients retention-check --all-clients --flag-expired
openclaw clients retention-archive --afm EL123456789 --older-than 7-years --type financial-records
openclaw clients gdpr-audit --period last-year --report
Data Import & Export
# Bulk import from spreadsheet
openclaw clients import --file /data/imports/client_list.xlsx --validate-afm --dry-run
openclaw clients import --file /data/imports/client_list.xlsx --execute --skip-duplicates
# Export client data
openclaw clients export --all --format xlsx --output /data/exports/all_clients.xlsx
openclaw clients export --afm EL123456789 --format json --include-history
openclaw clients export --filter active --fields name,afm,sector,assignee --format csv
Database Maintenance & Health
# Validation and integrity
openclaw clients validate-afm --all --flag-invalid
openclaw clients check-duplicates --by afm --report
openclaw clients integrity-check --cross-reference compliance-history
openclaw clients health-report --summary
# Backup and restore
openclaw clients backup --output /data/backups/clients_$(date +%Y%m%d).json --encrypt
openclaw clients backup-list --last 10
openclaw clients restore --backup /data/backups/clients_20260201.json --dry-run
# Audit log access
openclaw clients audit-log --afm EL123456789 --last 30-days
openclaw clients audit-log --all --action delete --period last-week
openclaw clients audit-log --user "maria.g" --period last-month
File System Architecture
Client_Data_File_Structure:
client_profiles:
- /data/clients/{afm}/profile.json # Master client record
- /data/clients/{afm}/contacts.json # Contact persons
- /data/clients/{afm}/identifiers.json # AFM, EFKA, GEMI, other IDs
- /data/clients/{afm}/notes.json # Relationship notes and history
compliance_records:
- /data/clients/{afm}/compliance/filings.json # All filing history
- /data/clients/{afm}/compliance/obligations.json # Recurring obligations
- /data/clients/{afm}/compliance/gaps.json # Missing filings log
document_registry:
- /data/clients/{afm}/documents/registry.json # Document metadata index
- /data/clients/{afm}/documents/pending.json # Awaiting processing
- /data/clients/{afm}/documents/archive-index.json # Archived doc references
gdpr_records:
- /data/clients/{afm}/gdpr/consent.json # Consent records
- /data/clients/{afm}/gdpr/retention-policy.json # Retention schedule
- /data/clients/{afm}/gdpr/deletion-log.json # Deletion audit trail
system_files:
- /data/clients/_index.json # Global client index (unencrypted metadata)
- /data/clients/_audit-log.json # All access/change events
- /data/clients/_schema-version.json # Schema version for migrations
- /data/backups/ # Encrypted backup directory
Client Record Schema
Master Profile (profile.json)
Client_Profile:
# Identity
afm: "EL123456789" # Greek VAT number (primary key)
name: "ALPHA TRADING AE" # Registered business name (Greek)
name_latin: "Alpha Trading AE" # Latin transliteration
legal_form: "AE" # ΑΕ, ΕΠΕ, ΟΕ, ΕΕ, ΘΚΕ, ΑΤΟΜΘΚΔ, etc.
gemi: "012345678" # Business registry number
efka_employer_id: "12345678" # EFKA employer identifier
# Classification
sector: "retail" # Business sector
activity_code: "4711" # ΚΑΔ (Greek activity code)
activity_description: "Retail general merchandise"
vat_regime: "normal" # normal | simplified | exempt | agricultural
vat_period: "monthly" # monthly | quarterly
# Registration
registered_address: "Οδός Αθηνών 45, Αθήνα 10431"
tax_office: "Α' ΑΘΔÎΩÎ" # ΑÏμόδια ΔΟΥ
municipality: "ΑΘΔÎΑ"
# Status
status: "active" # active | inactive | archived | ceased
client_since: "2022-01-15"
ceased_date: null
cease_reason: null
# Internal management
assigned_accountant: "yannis.k"
assigned_assistant: "maria.g"
priority: "normal" # low | normal | high | vip
billing_tier: "standard"
# Metadata
created_at: "2022-01-15T09:00:00Z"
updated_at: "2026-02-01T14:30:00Z"
created_by: "yannis.k"
last_modified_by: "maria.g"
Identifiers Record (identifiers.json)
Client_Identifiers:
afm: "EL123456789"
gemi: "012345678"
efka_employer_id: "12345678"
doy_code: "A1" # Tax office code
municipal_id: "ATH-2022-045123" # Municipality business registration
insurance_class: "B" # EFKA insurance class
mydata_branch_id: null # myDATA branch identifier if applicable
bank_accounts:
- iban: "GR1601101250000000012300695"
bank: "Alpha Bank"
primary: true
- iban: "GR7601402010540540002502139"
bank: "National Bank of Greece"
primary: false
Filing Record Schema (filings.json entries)
Filing_Record:
filing_id: "VAT-EL123456789-2026-01"
afm: "EL123456789"
type: "VAT-monthly" # Filing type
period: "2026-01" # Period covered
due_date: "2026-02-28"
submitted_date: "2026-02-20"
status: "submitted" # pending | submitted | accepted | rejected | paid | overdue
reference_number: "ΑΑΔ-123456" # Government reference
amount_declared: 12500.00
amount_paid: 12500.00
payment_date: "2026-02-20"
submitted_by: "yannis.k"
notes: null
created_at: "2026-02-20T10:15:00Z"
Greek Business Entity Types
Legal_Forms:
AE:
full_name: "Ανώνυμη ΕταιÏεία"
english: "Société Anonyme / Public Ltd"
min_capital: 25000
gemi_required: true
efka_required: true
EPE:
full_name: "ΕταιÏεία ΠεÏιοÏισμένης ΕυθÏνης"
english: "Limited Liability Company"
min_capital: 1
gemi_required: true
IKE:
full_name: "Θδιωτική Κεφαλαιουχική ΕταιÏεία"
english: "Private Capital Company"
min_capital: 0
gemi_required: true
OE:
full_name: "ΟμόÏÏυθμη ΕταιÏεία"
english: "General Partnership"
gemi_required: true
EE:
full_name: "ΕτεÏόÏÏυθμη ΕταιÏεία"
english: "Limited Partnership"
gemi_required: true
ATOMIKI:
full_name: "Ατομική ΕπιχείÏηση"
english: "Sole Trader"
gemi_required: false
Compliance Obligation Templates
Obligation_Templates:
VAT_monthly:
trigger: "legal_form in [AE, EPE, IKE] AND revenue > 1500000"
frequency: monthly
due_day: "last day of following month"
skill_link: "greek-compliance-aade"
VAT_quarterly:
trigger: "vat_regime = normal AND revenue <= 1500000"
frequency: quarterly
due_day: "last day of month following quarter end"
skill_link: "greek-compliance-aade"
EFKA_monthly:
trigger: "efka_employer_id IS NOT NULL"
frequency: monthly
due_day: "last day of following month"
skill_link: "efka-api-integration"
myDATA_continuous:
trigger: "all active businesses"
frequency: continuous
note: "invoices must be submitted within legal timeframe"
skill_link: "aade-api-monitor"
corporate_tax_annual:
trigger: "legal_form in [AE, EPE, IKE, OE, EE]"
frequency: annual
due_month: "June"
skill_link: "greek-compliance-aade"
E3_annual:
trigger: "all active businesses"
frequency: annual
due_month: "June"
skill_link: "accounting-workflows"
Security & Encryption
Encryption Configuration
Encryption:
algorithm: "AES-256-GCM"
key_management: "OpenClaw key vault"
encrypted_fields:
- bank_account_numbers
- contact_personal_data
- gdpr_consent_records
- financial_amounts_in_history
unencrypted_fields:
- afm (required for indexing)
- client_name (required for search)
- status
- sector
key_rotation: "annual"
backup_encryption: "separate key"
Access Control Integration
Data_Access_Rules:
senior_accountant:
read: "all clients"
write: "all clients"
delete: "with confirmation"
gdpr_operations: true
export_all: true
accountant:
read: "assigned clients only"
write: "assigned clients only"
delete: false
gdpr_operations: false
export: "assigned clients only"
assistant:
read: "assigned clients — profile, contacts, document list"
write: "notes, document registry entries"
delete: false
sensitive_fields: "hidden (bank accounts, full financials)"
export: false
viewer:
read: "assigned clients — name, status, next deadline only"
write: false
delete: false
Integration with Other Skills
Skill_Integration:
dashboard_greek_accounting:
provides: ["client list", "compliance scores", "portfolio metrics"]
consumes: ["dashboard requests for client data"]
commands: "openclaw clients portfolio-summary → dashboard aggregation"
greek_compliance_aade:
provides: ["filing records for compliance history"]
consumes: ["client AFM, VAT regime, filing obligations"]
sync: "openclaw clients log-filing after each aade compliance action"
efka_api_integration:
provides: ["EFKA contribution records"]
consumes: ["client EFKA employer ID, employee roster"]
sync: "openclaw clients log-filing --type EFKA after submissions"
cli_deadline_monitor:
provides: ["upcoming deadlines per client"]
consumes: ["client obligation schedule from compliance templates"]
sync: "openclaw clients obligations feeds deadline monitoring"
greek_banking_integration:
provides: ["bank feed status per client"]
consumes: ["client IBAN list from identifiers.json"]
sync: "banking reconciliation references client record"
greek_document_ocr:
provides: ["extracted document data for registry"]
consumes: ["client AFM to tag processed documents"]
sync: "openclaw clients doc-register after OCR completes"
user_authentication_system:
provides: ["user identity and role for access decisions"]
consumes: ["client assignment data for per-client authorization"]
enforcement: "every client data operation checks auth before executing"
Usage Examples
Example 1: Onboarding a New Client
Command: openclaw clients add --name "GAMMA IMPORT OE" --afm EL555444333 --legal-form OE --sector imports --gemi 098765432
System:
1. Validates AFM format (EL + 9 digits)
2. Creates /data/clients/EL555444333/ directory structure
3. Writes profile.json with provided data
4. Generates obligation template based on legal form + sector
5. Creates empty filings.json, contacts.json, documents/registry.json
6. Adds entry to /data/clients/_index.json
7. Logs creation event to audit trail
8. Output: "Client EL555444333 created. 4 recurring obligations configured. Assign accountant: openclaw clients update --afm EL555444333 --field accountant-assigned --value [username]"
Example 2: Monthly Compliance Check
Command: openclaw clients compliance-gaps --all-clients --period 2026-01
System:
1. Reads obligation templates for every active client
2. Cross-references against filings.json for period 2026-01
3. Identifies: 3 clients missing VAT submission, 1 client missing EFKA
4. Checks due dates — 2 are overdue, 2 due within 5 days
5. Output: Formatted table with client name, AFM, missing filing type, due date, assigned accountant
6. Optionally: openclaw clients compliance-gaps --all-clients --period 2026-01 --alert-assignees
Example 3: GDPR Data Export Request
Command: openclaw clients gdpr-export --afm EL123456789 --format json --output /data/gdpr-exports/
System:
1. Collects all data held: profile, contacts, filings, document registry, notes, audit log entries
2. Decrypts encrypted fields for export (requires senior_accountant role)
3. Formats as structured JSON with data categories labeled
4. Writes to /data/gdpr-exports/EL123456789_gdpr_export_20260218.json
5. Logs export event with requesting user and timestamp
6. Output: "GDPR export complete. File: EL123456789_gdpr_export_20260218.json (47 records, 12 categories)"
Example 4: Document Registration After OCR
Command: openclaw clients doc-register --afm EL123456789 --type invoice --file /data/ocr/output/accounting-ready/inv_2026_001.pdf --date 2026-02-10 --amount 3200.00 --vendor "DELTA SUPPLIES AE"
System:
1. Validates client exists and user has write access
2. Checks for duplicate (same file path not already registered)
3. Appends entry to /data/clients/EL123456789/documents/registry.json
4. Updates document count in client index
5. Logs registration to audit trail
6. Output: "Document registered: inv_2026_001.pdf → EL123456789. Registry now contains 23 documents for this client."
Error Handling
# Common validation errors and resolution commands
openclaw clients validate-afm --afm EL99999999 # Invalid format → shows correct format
openclaw clients check-duplicates --afm EL123456789 # Duplicate check before add
openclaw clients repair-index # Rebuild _index.json from individual profiles
openclaw clients schema-migrate --to-version 2 # Apply schema updates across all records
openclaw clients integrity-report # Full cross-reference check across all data
Audit Log Format
Audit_Event:
event_id: "AUD-20260218-001234"
timestamp: "2026-02-18T10:30:00Z"
user: "maria.g"
role: "assistant"
action: "read" # read | write | delete | export | gdpr
resource: "client_profile"
afm: "EL123456789"
client_name: "ALPHA TRADING AE"
fields_accessed: ["name", "status", "next_deadline"]
ip_address: "192.168.1.45"
result: "success"
notes: null
Safety & Compliance Guidelines
Data Handling Principles
- Never store raw bank credentials or passwords — only IBANs and account references
- All personal contact data (natural persons) is encrypted at rest
- Client financial history is retained for minimum 10 years per Greek law (Law 4308/2014)
- GDPR Article 17 deletion requests must preserve data required by Greek tax law for retention period
- Separation between clients is absolute — no cross-client data access or reporting without explicit multi-client permission
GDPR Retention Schedule
Retention_Periods:
financial_records: "10 years (Greek accounting law)"
tax_filings: "10 years (tax authority requirement)"
contact_data: "duration of engagement + 3 years"
audit_logs: "5 years"
gdpr_consent_records: "duration of processing + 3 years"
deleted_client_data: "immediately purged except legally mandated retention"
Remember: This skill is the single source of truth for all client master data. Every other skill references client records here. Data quality, completeness, and security in this skill directly determines the quality of all other skill outputs across the entire OpenClaw Greek Accounting system.