US Conflicts DB
Výzkumná databázová aplikace pro strukturovanou evidenci amerických konfliktů a intervencí, zdrojů, právních tagů, TIME/FIRE vrstvy a profilově řízeného automatického vyhodnocení; obsahuje vícezdrojový asynchronní enrichment a lossless konsolidaci.
Co projekt řeší
Výzkumná databázová aplikace pro strukturovanou evidenci amerických konfliktů a intervencí, zdrojů, právních tagů, TIME/FIRE vrstvy a profilově řízeného automatického vyhodnocení; obsahuje vícezdrojový asynchronní enrichment a lossless konsolidaci.
Typické použití
- Evidence konfliktů a intervencí s dohledatelnými zdroji
- Hromadný vícezdrojový enrichment bez blokování grafické rozhraní
- Lossless konsolidace duplicit bez ztráty zdrojů
- Profilově řízená evidence/criteria analýza
- Export a další výzkumné zpracování databáze
Jak aplikace funguje a k čemu slouží
Přehled
US_Conflicts_DB je monolitická, cross-platform grafické rozhraní aplikace pro správu a analýzu amerických vojenských konfliktů a intervencí od roku ~1900 do současnosti.
Primární cíle:
- Evidence a katalogizace US vojenských operací
- Import historických dat z Excel/CSV zdrojů
- Deduplikace a čištění dat pomocí fuzzy matchingu
- Webové obohacování záznamů (Wikipedia, Wikimedia, US archivy)
- Vyhledávání nových konfliktů přes Wikidata (discovery mode)
- Pokročilé filtrování a analýza podle času, regionu, aktérů
- Export pro další zpracování (CSV, XLSX, JSON)
Klíčové aspekty:
- ✓ Intuitivní grafické rozhraní bez učební křivky
- ✓ SQLite backend bez externího serveru
- ✓ Plná lokalizace (CZ, EN)
- ✓ Podpora legacy databází s automatickou migrací
- ✓ Fuzzy matching pro detekci duplikátů (RapidFuzz)
- ✓ Multi-threaded obohacování bez zamrzávání UI
- ✓ Offline režim (práce bez internetu)
- ✓ Session-based logování pro debugging
Klíčové Vlastnosti a Funkce
🗄️ Správa Databáze
- SQLite3 backend s moderním schématem (22 sloupců)
- Automatická inicializace DB při prvním spuštění
- First-run detection s auto-importem bundled datových sad
- Backup a restore strategie (Save DB As)
- Integrity check & repair
- Statistiky DB (počet záznamů, poslední aktualizace)
📥 Import & Export
- XLSX import s inteligentním mapováním sloupců
- CSV import (drag & drop i menu)
- Drag & Drop interface (Excel, CSV, DB)
- Legacy DB migrace (starý formát → nový)
- Bundled datasety (USA_intervence_*.xlsx)
- CSV export (kompletní nebo filtrované)
- XLSX export (s formatováním a formulemi)
- JSON export (pro inetegraci s dalšími systémy)
🔍 Filtrování & Vyhledávání
- Fulltext search (slova v názvu, poznámce, aktérech)
- Filtr podle země (dropdown s ISO2 kódy)
- Filtr podle regionu (Afrika, Asie, Evropa, Karibik, atd.)
- Filtr podle roků (od–do range)
- Advanced: kombinované filtry s AND/OR logikou
- Uložené vyhledávací dotazy (search history)
- Real-time refresh (okamžitý výsledek)
🧹 Deduplikace (RapidFuzz Fuzzy Matching)
- Token_set_ratio fuzzy string matching
- Konfigurabilní threshold (50–99%)
- Interaktivní dialog s náhledem párů
- Sloučení záznamů (merge sources)
- Smazání duplicit (keep one, delete others)
- Batch deduplikace (všechny záznamy najednou)
💎 Obohacování (Multi-Source Enrichment)
- Wikipedia EN/CZ (první výsledek, snippet)
- Wikimedia Commons (media, fotky)
- US Government archives (state.gov, cia.gov, archives.gov)
- Google search (volitelný, rate-limited)
- DuckDuckGo search (fallback)
- Relevance scoring (filtrování irelevantních výsledků)
- Status summary (new/supplemented/updated/unchanged/failed)
- Background processing (non-blocking UI)
- Progress bar s runtime/ETA
🔎 Discovery Mód (Wikidata)
- Vyhledání NOVÝCH konfliktů přes Wikidata API
- Globální běh (celý svět) + regionální filtr
- Automatická detekce nového konfliktu (dedup check)
- Vložení do DB s kompletními metadaty
- Scheduling a automatizovaný běh na pozadí
🎨 UI & UX
- Splash screen se skip tlačítkem + verze
- Tabelární přehled s sortováním sloupců
- Detailní panel pro jednotlivý záznam
- Dynamické barevné zvýraznění regionů
- Rotující vlajky států (WEBP/GIF/PNG formato)
- Language buttons (8 jazyků přepínání)
- Font size změna (Shift+Wheel na tabulce)
- Column visibility persistence
- Centralizované nastavení v dialogu se záložkami
UI & Workflow
Hlavní okno (MainWindow)
- Horní bar: Menu (File, Edit, Tools, Help) + Language buttons (8 jazyků)
- Levý panel: Filtry (země, region, roky, fulltext search)
- Střed: QTableWidget s názvy konfliktů, roky, zmínami
- Pravý panel: Detail zobrazení záznamů + flag (obrázek státu)
- Dolů: Status bar (počet záznamů, poslední byla akce)
Typické workflow (uživatel)
- Filtrování: Vybrat zemi, region, roky
- Vyhledávání: Zadat text v search field
- Detailní prohlídka: Kliknout na řádek tabulky → vidět detail na pravě
- Úprava: (pokud implementováno) Edit button → dialog s form poli
- Obohacování: Menu Tools > Enrich selected → progress bar
- Export: File > Export as CSV/XLSX
Dynamické zvýraznění regionů
Tabulka používá barevné kódy pro jednotivé regiony:
Rotující vlajky
- Aplikace zobrazuje vlajku státu v detail panelu
- Formáty: WEBP (preferováno), GIF, PNG
- Fallback: Používá QTimer pro animaci (refresh 100ms)
- Multi-state: Pokud záznam obsahuje více zemí, vlajky rotují
Import XLSX/CSV
XLSX Import s mapováním sloupců
Workflow:
- Uživatel vybere XLSX soubor (File > Import XLSX)
- App otevře první list a načte sloupce
- Dialog s mapováním: Pro každý cílový sloupec v DB vybrat zdrojový ze XLSX
- Preview: Zobrazit prvních N řádků po mapování
- Duplikáty: Kontrola dedup check (fuzzy match na nazev)
- Vložení: Insert do `conflicts` tabulky
CSV Import
- Drag & drop CSV na hlavní okno NEBO File > Import CSV
- Autodetekce separátoru (comma, semicolon, tab)
- Stejné mapování sloupců jako XLSX
- Import do DB
Bundled datasety
Při prvním spuštění (first-run) app hledá tyto XLSX soubory v aktuálním dir:
- USA_intervence_20251212.xlsx
- USA_intervence_ALL_REGIONS_CZ_DETAILED_20250823.xlsx
- conflicts.xlsx
- dataset.xlsx
- Jakýkoli *.xlsx v adresáři
Pokud nalezne, nabídne automatický import.
Parsování zemí
Funkce extrahuje ISO2 kódy z textu:
Drag & Drop interface
Aplikace přijímá drag & drop:
- .xlsx (Excel import)
- .csv (CSV import)
- .db, .sqlite, .sqlite3 (legacy DB import)
Filtrování & Vyhledávání
Fulltext search (LIKE operator)
Filtry v UI
- Search field: Fulltext across name, actors, description
- Country dropdown: Filtr podle ISO2 (US, GB, FR, ...)
- Region combobox: Afrika, Asie, Evropa, Karibik, Severní Amerika, Jižní Amerika, Oceánie
- Year range (spinbox): od_roku—do_roku
- Advanced (pokud implementováno): AND/OR/NOT kombinace filtrů
Kombinovaný filtr (SQL WHERE)
Real-time refresh
- Každá změna filtru (search, country, region, años) => instant query
- QTableWidget se refreshuje s novými řádky
- Status bar zobrazuje počet matching záznamů
Search history
(Pokud implementováno) QComboBox uchovává posledních 20 vyhledávacích dotazů
Klávesové Zkratky
| Zkratka | Funkce |
|---|---|
| F5 | Reload tabulky (refresh z DB) |
| Shift+Wheel (na tabulce) | Změna velikosti fontu (zoom) |
| Ctrl+A | Vybrat všechny řádky (select all) |
| Ctrl+C | Kopírovat vybraný text (standard) |
| Ctrl+F | Focus na search field (pokud implementováno) |
| Ctrl+E | Enrich selected (Tools menu) |
| Ctrl+D | Duplicate detection (Tools menu) |
| Ctrl+I | Import dialog (File menu) |
| Ctrl+O | Open DB dialog (File menu) |
| Ctrl+S | Save DB (pokud se dělají změny) |
| Alt+F4 | Zavřít aplikaci (exit) |
Troubleshooting
PROBLÉM: "ModuleNotFoundError: No module named ''"
Příčina: není nainstalován
Řešení:
PROBLÉM: "Database locked"
Příčina: DB je otevřena v jiné aplikaci nebo procesu
Řešení:
- Zavřít app a ostatní procesy s US_Conflicts_DB.sqlite3
- Smazat files: US_Conflicts_DB.sqlite3-shm, US_Conflicts_DB.sqlite3-wal (dočasné)
- Restartovat aplikaci
PROBLÉM: "Enrichment nefunguje, v UI nic"
Příčina: Chyba v web requestu nebo bez internetu
Řešení:
- Zkontroluj internet connection
- Zjisti IP a zkus ping example.com
- Podívej se na logs/ obsah (detailní error message)
- Zkontroluj firewall (DuckDuckGo, Wikipedia mohou být blocked)
PROBLÉM: "Deduplikace nefunguje"
Příčina: RapidFuzz není nainstalován
Řešení:
PROBLÉM: "UI se nezměnila po nastavení (settings)"
Příčina: JSON persistence se čte jen při startu
Řešení: Restartuj aplikaci
FAQ (Často Kladené Otázky)
Q: Kolik záznamů déže aplikace zvládnout?
A: SQLite je testován až na 100k+ záznamů bez problému. UI tabulka si drží všechny záznamy v paměti (QTableWidget), takže doporučuji limit 10–50k pro plynulou UI. Pokud potřebuješ víc, použij filtery abys zobrazil jen relevantní podmnožinu.
Q: Mohu exportovat do Google Sheets?
A: Aplikace sama ne, ale exportuješ do CSV/XLSX a pak nahraješ do Google Sheets ručně. Možní budoucího integraci přes Google Drive API.
Q: Jsou data šifrovaná?
A: SQLite je nešifrovaný (plain text). Pokud chceš šifrování, použij SQLCipher nebo šifruj celý soubor externě (bitlocker, veracrypt).
Q: Jakou verzi Pythonu potřebuji?
A: Python 3.10+. Ověřeno na 3.10, 3.11, 3.12.
Q: Mohu aplikaci přenášet na Linux/macOS?
A: Ano, je cross-platform. Soubory s cestami (flags, GFX) mohou vyžadovat drobné úpravy pro Windows-specific cesty.
Q: Jak se provádí backup?
A: Menu File > Save DB As → vybrat nové jméno/umístění. Ručně kopíruješ US_Conflicts_DB.sqlite3 do bezpečného místa.
Q: Co když chci přispívat?
A: GitHub Issues s bugreporty, feature requests. Pull requests se přijímají s podmínkou, že jsou testované a dokumentované.
Release 0.2.0.11 · stav 19. 9. 2026
Aktuální profil odpovídá větvi 0.2.0.11. Databáze obsahuje 593 aktivních záznamů a používá SQLite3 jako hlavní strukturovanou datovou vrstvu. Konfigurace a další persistentní stav jsou ukládány v JSON tam, kde to dává smysl; starší popisy uložená nastavení a souboru us_conflicts.db už nejsou autoritativní.
Normativní engine 1.2 pracuje s konfigurovatelnými kritérii odděleně od samotných faktických dat. TIME/FIRE vizualizace umožňuje sledovat překryv více konfliktů v čase. Zdrojový registry obsahuje 65 položek a aplikace podporuje osm lokalizací. Release validation pro 0.2.0.11 skončila 62/62 PASS.
Projekt důsledně rozlišuje zdrojový záznam, odvozené vyhodnocení a uživatelskou poznámku. U sporných událostí má být provenance dohledatelná a protichůdné zdroje se nemají „slít“ do jednoho neověřitelného tvrzení.
