8d9fd22bdc
German practice software (INDAMED MEDICAL OFFICE) stores free text in ISO 8859-15, an 8-bit code. Pasting our cleaned document there rendered typographic Unicode the LLM emits — en-/em-dashes, curly quotes, ellipses, fraction slashes — as replacement boxes, while umlauts, the micro sign, guillemets and the euro sign (all within 8859-15) pasted fine. The KBV xDT data standard confirms ISO 8859-15 as the canonical charset for German practice systems. Add `analyze::charset::fold_to_iso8859_15`, applied in the worker right after the gazetteer and before `content_md` is persisted: representable chars pass through verbatim, the residual is transliterated via the `deunicode` table (en-dash -> '-', ellipsis -> '...', '1/2' -> "1/2"), and unmapped chars are left untouched rather than dropped. Because representable chars never reach deunicode, its ASCII-only nature does not flatten umlauts or the micro sign. refs #13
58 lines
1.6 KiB
TOML
58 lines
1.6 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
|
|
[workspace.package]
|
|
edition = "2024"
|
|
version = "0.1.0"
|
|
|
|
[workspace.dependencies]
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
uuid = { version = "1", features = ["v4", "serde"] }
|
|
time = { version = "0.3.47", features = ["local-offset", "parsing", "formatting", "macros"] }
|
|
tokio = { version = "1", features = ["full"] }
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "multipart", "rustls-tls"] }
|
|
tracing = "0.1"
|
|
toml = "0.8"
|
|
|
|
[package]
|
|
name = "doctate-server"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
default-run = "doctate-server"
|
|
|
|
[dependencies]
|
|
doctate-common = { path = "../common" }
|
|
axum = { version = "0.8", features = ["multipart"] }
|
|
tokio.workspace = true
|
|
reqwest.workspace = true
|
|
tempfile = "3"
|
|
askama = "0.12"
|
|
tracing.workspace = true
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
tracing-appender = "0.2"
|
|
dotenvy = "0.15"
|
|
uuid.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
toml.workspace = true
|
|
tower-http = { version = "0.6", features = ["limit", "trace", "set-header"] }
|
|
tokio-stream = { version = "0.1", features = ["sync"] }
|
|
futures-util = "0.3"
|
|
rand = "0.8"
|
|
bcrypt = "0.15"
|
|
axum-extra = { version = "0.12", features = ["cookie", "form"] }
|
|
time.workspace = true
|
|
toml_edit = "0.25.11"
|
|
rpassword = "7.4.0"
|
|
pulldown-cmark = { version = "0.13", default-features = false, features = ["html"] }
|
|
strsim = "0.11"
|
|
spellbook = "0.4.0"
|
|
subtle = "2"
|
|
deunicode = "1.6.2"
|
|
|
|
[dev-dependencies]
|
|
tower = { version = "0.5", features = ["util"] }
|
|
wiremock = "0.6"
|
|
filetime = "0.2"
|