# khxmarka/2csv_converter architecture

> Architecture diagram of the GitHub repository khxmarka/2csv_converter, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/khxmarka/2csv_converter
- Repository: https://github.com/khxmarka/2csv_converter

## Overview

2csv is a command-line converter that recursively scans a selected root, filters and converts SQL or Excel inputs into sibling CSV files, and splits oversized CSV/TXT files. The graph includes the documented completion-state and logging behavior. Some worker and conversion internals are unsampled, so uncertain internal call links are omitted.

Main entry points: [`internal/app/app.go`](https://github.com/khxmarka/2csv_converter/blob/main/internal/app/app.go) (Run orchestration), [`internal/app/workers.go`](https://github.com/khxmarka/2csv_converter/blob/main/internal/app/workers.go) (Worker pool), [`internal/convert/convert.go`](https://github.com/khxmarka/2csv_converter/blob/main/internal/convert/convert.go) (SQL conversion), [`internal/csvout/registry.go`](https://github.com/khxmarka/2csv_converter/blob/main/internal/csvout/registry.go) (Output registry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry and orchestration"]
  node_cli["CLI prompt<br/>[cli.go]"]
  node_app["Run orchestration<br/>[app.go]"]
  node_workers["Worker pool<br/>[workers.go]"]
end

subgraph group_discovery["Discovery and state"]
  node_scanner["Recursive scan<br/>[scan.go]"]
  node_marks["Completion lists<br/>[marks.go]"]
  node_config["Root selection<br/>[config.go]"]
end

subgraph group_conversion["Input conversion"]
  node_sql_convert["SQL conversion<br/>[convert.go]"]
  node_sql_schedule["SQL scheduling<br/>[schedule.go]"]
  node_insert_parser["INSERT parser<br/>[parse.go]"]
  node_pii_filter["PII matching<br/>[pii.go]"]
  node_table_convert["Table dump reader<br/>[table.go]"]
  node_excel_convert["Excel conversion<br/>[xlsconv.go]"]
end

subgraph group_output["CSV output"]
  node_csv_writer["CSV writer<br/>[writer.go]"]
  node_csv_registry["Output registry<br/>[registry.go]"]
  node_csv_split["File splitting<br/>[split.go]"]
end

subgraph group_runtime["Runtime support"]
  node_root_lock["Root lock<br/>[rootlock.go]"]
  node_logger["Progress and log<br/>[logx.go]"]
end

node_operator(("Operator"))
node_source_root["Selected files"]
node_output_files["Sibling CSV files"]

node_operator -->|"chooses root"| node_cli
node_cli -->|"resolves root"| node_config
node_cli -->|"starts run"| node_app
node_app -->|"finds files"| node_scanner
node_source_root -->|"scans"| node_scanner
node_app -->|"reads state"| node_marks
node_app -->|"locks root"| node_root_lock
node_app -->|"dispatches files"| node_workers
node_workers -->|"schedules SQL"| node_sql_schedule
node_sql_schedule -->|"converts SQL"| node_sql_convert
node_sql_convert -->|"parses INSERTs"| node_insert_parser
node_sql_convert -->|"filters PII"| node_pii_filter
node_sql_convert -->|"reads table dumps"| node_table_convert
node_workers -->|"converts workbooks"| node_excel_convert
node_sql_convert -->|"creates outputs"| node_csv_registry
node_table_convert -->|"creates outputs"| node_csv_registry
node_excel_convert -->|"creates outputs"| node_csv_registry
node_csv_registry -->|"opens writer"| node_csv_writer
node_csv_writer -->|"writes CSV"| node_output_files
node_workers -->|"splits oversized files"| node_csv_split
node_csv_split -->|"publishes parts"| node_output_files
node_workers -->|"records completion"| node_marks
node_app -->|"logs run"| node_logger
node_workers -->|"reports progress"| node_logger

click node_cli "https://github.com/khxmarka/2csv_converter/blob/main/internal/cli/cli.go"
click node_app "https://github.com/khxmarka/2csv_converter/blob/main/internal/app/app.go"
click node_workers "https://github.com/khxmarka/2csv_converter/blob/main/internal/app/workers.go"
click node_scanner "https://github.com/khxmarka/2csv_converter/blob/main/internal/scan/scan.go"
click node_marks "https://github.com/khxmarka/2csv_converter/blob/main/internal/marks/marks.go"
click node_config "https://github.com/khxmarka/2csv_converter/blob/main/internal/config/config.go"
click node_sql_convert "https://github.com/khxmarka/2csv_converter/blob/main/internal/convert/convert.go"
click node_sql_schedule "https://github.com/khxmarka/2csv_converter/blob/main/internal/convert/schedule.go"
click node_insert_parser "https://github.com/khxmarka/2csv_converter/blob/main/internal/insert/parse.go"
click node_pii_filter "https://github.com/khxmarka/2csv_converter/blob/main/internal/pii/pii.go"
click node_table_convert "https://github.com/khxmarka/2csv_converter/blob/main/internal/convert/table.go"
click node_excel_convert "https://github.com/khxmarka/2csv_converter/blob/main/internal/xlsconv/xlsconv.go"
click node_csv_writer "https://github.com/khxmarka/2csv_converter/blob/main/internal/csvout/writer.go"
click node_csv_registry "https://github.com/khxmarka/2csv_converter/blob/main/internal/csvout/registry.go"
click node_csv_split "https://github.com/khxmarka/2csv_converter/blob/main/internal/csvout/split.go"
click node_root_lock "https://github.com/khxmarka/2csv_converter/blob/main/internal/app/rootlock.go"
click node_logger "https://github.com/khxmarka/2csv_converter/blob/main/internal/logx/logx.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_app,node_workers toneBlue
class node_scanner,node_marks,node_config toneAmber
class node_sql_convert,node_sql_schedule,node_insert_parser,node_pii_filter,node_table_convert,node_excel_convert toneMint
class node_csv_writer,node_csv_registry,node_csv_split toneRose
class node_root_lock,node_logger,node_operator,node_source_root,node_output_files toneIndigo
```

## Components

### Entry and orchestration

- [CLI prompt](https://github.com/khxmarka/2csv_converter/blob/main/internal/cli/cli.go): `internal/cli/cli.go`
- [Run orchestration](https://github.com/khxmarka/2csv_converter/blob/main/internal/app/app.go): `internal/app/app.go`
- [Worker pool](https://github.com/khxmarka/2csv_converter/blob/main/internal/app/workers.go): `internal/app/workers.go`

### Discovery and state

- [Recursive scan](https://github.com/khxmarka/2csv_converter/blob/main/internal/scan/scan.go): `internal/scan/scan.go`
- [Completion lists](https://github.com/khxmarka/2csv_converter/blob/main/internal/marks/marks.go): `internal/marks/marks.go`
- [Root selection](https://github.com/khxmarka/2csv_converter/blob/main/internal/config/config.go): `internal/config/config.go`

### Input conversion

- [SQL conversion](https://github.com/khxmarka/2csv_converter/blob/main/internal/convert/convert.go): `internal/convert/convert.go`
- [SQL scheduling](https://github.com/khxmarka/2csv_converter/blob/main/internal/convert/schedule.go): `internal/convert/schedule.go`
- [INSERT parser](https://github.com/khxmarka/2csv_converter/blob/main/internal/insert/parse.go): `internal/insert/parse.go`
- [PII matching](https://github.com/khxmarka/2csv_converter/blob/main/internal/pii/pii.go): `internal/pii/pii.go`
- [Table dump reader](https://github.com/khxmarka/2csv_converter/blob/main/internal/convert/table.go): `internal/convert/table.go`
- [Excel conversion](https://github.com/khxmarka/2csv_converter/blob/main/internal/xlsconv/xlsconv.go): `internal/xlsconv/xlsconv.go`

### CSV output

- [CSV writer](https://github.com/khxmarka/2csv_converter/blob/main/internal/csvout/writer.go): `internal/csvout/writer.go`
- [Output registry](https://github.com/khxmarka/2csv_converter/blob/main/internal/csvout/registry.go): `internal/csvout/registry.go`
- [File splitting](https://github.com/khxmarka/2csv_converter/blob/main/internal/csvout/split.go): `internal/csvout/split.go`

### Runtime support

- [Root lock](https://github.com/khxmarka/2csv_converter/blob/main/internal/app/rootlock.go): `internal/app/rootlock.go`
- [Progress and log](https://github.com/khxmarka/2csv_converter/blob/main/internal/logx/logx.go): `internal/logx/logx.go`

### Other components

- **Operator**
- **Selected files**
- **Sibling CSV files**

## Connections

- Operator → CLI prompt: chooses root
- CLI prompt → Root selection: resolves root
- CLI prompt → Run orchestration: starts run
- Run orchestration → Recursive scan: finds files
- Selected files → Recursive scan: scans
- Run orchestration → Completion lists: reads state
- Run orchestration → Root lock: locks root
- Run orchestration → Worker pool: dispatches files
- Worker pool → SQL scheduling: schedules SQL
- SQL scheduling → SQL conversion: converts SQL
- SQL conversion → INSERT parser: parses INSERTs
- SQL conversion → PII matching: filters PII
- SQL conversion → Table dump reader: reads table dumps
- Worker pool → Excel conversion: converts workbooks
- SQL conversion → Output registry: creates outputs
- Table dump reader → Output registry: creates outputs
- Excel conversion → Output registry: creates outputs
- Output registry → CSV writer: opens writer
- CSV writer → Sibling CSV files: writes CSV
- Worker pool → File splitting: splits oversized files
- File splitting → Sibling CSV files: publishes parts
- Worker pool → Completion lists: records completion
- Run orchestration → Progress and log: logs run
- Worker pool → Progress and log: reports progress
