# Indeks Skryptów - NORDA BIZNES HUB ## Skrypty Główne ### app.py **Główna aplikacja Flask** - Routing i widoki - Czat AI (Gemini) - Logowanie użytkowników - Port: 5001 ### database.py **Modele bazy danych** - Company model (24 pola) - Category model - User model - SessionLocal factory ## Skrypty Importu Danych ### import_norda_batch4.py **Batch 4 - 10 firm** - SIM Rumia, TTM, VENCODE, VINDOR, VOLTRIM TRADE - WDX, Wejherplast, Pucka Gospodarka Komunalna - PHU S&K TOBACCO, PHU U Witka **Status:** ✅ Wykonany (9 zaimportowanych, 1 skip) ### import_norda_batch5.py **Batch 5 - 10 firm** - GRAAL, Green House Systems, Hebel Masiak i Wspólnicy - Kancelaria Radcy Prawnego Łukasz Gilewicz, KORNIX - Lenap Hale, P&P, Pixlab Softwarehouse - Radio Norda FM, Autotest Polska **Status:** ✅ Wykonany (8 zaimportowanych, 2 skip) ## Skrypty Naprawcze ### fix_norda_database.py **Kompleksowa naprawa bazy** **3 kroki:** 1. Usunięcie Autotest Polska (nie jest członkiem NORDA) 2. Aktualizacja 9 nazw firm (zgodność z listą NORDA) 3. Import 4 brakujących firm (Batch 6): - Stalpunkt (NIP: 9571169754) - CoolAir (NIP: 9581678322) - MKonsult (NIP: 5882044171) - Portal (NIP: 5881830157) **Status:** ✅ Wykonany **Rezultat:** 78 unikalnych firm → 78 firm ### split_ttm_companies.py **Podział TTM na 3 osobne wpisy** **Operacje:** 1. Usunięcie UNIQUE constraint z kolumny NIP 2. Stworzenie 3 osobnych firm: - Nadmorski24.pl (slug: nadmorski24pl) - Radio Norda FM (slug: radio-norda-fm) - TTM (slug: ttm) 3. Usunięcie starego połączonego wpisu "TTM / Nadmorski24.pl" **Wspólne dane (NIP: 5882285147):** - Legal name: Twoja Telewizja Morska sp. z o.o. - REGON: 220659444 - KRS: 0000311636 **Status:** ✅ Wykonany **Rezultat:** 78 firm → 80 firm (100% pokrycie listy NORDA) ### update_ttm.py **Aktualizacja danych TTM** (przed splitem) - Dodanie REGON: 220659444 - Zmiana nazwy: "Nadmorski24.pl" → "TTM / Nadmorski24.pl" - Aktualizacja opisów **Status:** ✅ Wykonany (później zastąpione przez split_ttm_companies.py) ### remove_test_companies.py **Usunięcie 10 firm testowych** - Kryteria: ID <= 10 AND NIP like '567%' - Firmy testowe stworzone podczas development **Status:** ✅ Wykonany **Rezultat:** 68 firm → 58 firm ## Skrypty Weryfikacyjne ### verify_norda_list.py (do stworzenia) **Weryfikacja zgodności z listą NORDA** - Porównanie bazy z https://norda-biznes.info/czlonkowie - Znajdowanie rozbieżności - Export raportu ## Funkcje Pomocnicze (w każdym skrypcie importu) ### create_slug(name: str) -> str ```python def create_slug(name: str) -> str: """Create URL-friendly slug from company name""" slug = name.lower() replacements = { 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', 'ź': 'z', 'ż': 'z', '&': 'i', ' ': '-', '/': '-', ',': '', '.': '', '(': '', ')': '', '"': '', "'": '' } for old, new in replacements.items(): slug = slug.replace(old, new) slug = re.sub(r'[^a-z0-9-]', '', slug) slug = re.sub(r'-+', '-', slug) slug = slug.strip('-') return slug ``` ### parse_address(address: str) -> dict ```python def parse_address(address: str) -> dict: """Parse address into components""" postal_match = re.search(r'(\d{2}-\d{3})\s+([A-ZĄĆĘŁŃÓŚŹŻ][a-ząćęłńóśźż\s]+)', address) if postal_match: postal = postal_match.group(1) city = postal_match.group(2).strip() street = address.split(postal)[0].strip().replace('ul.', '').strip() return { 'street': street if street else None, 'city': city, 'postal': postal, 'full': address } else: return { 'street': None, 'city': 'Wejherowo', 'postal': None, 'full': address } ``` ## Kolejność Wykonywania Skryptów (historia) ``` 1. remove_test_companies.py → Usunięto 10 testowych firm 2. import_norda_batch4.py → +9 firm (67 total) 3. update_ttm.py → Aktualizacja TTM 4. import_norda_batch5.py → +8 firm (75 total) 5. fix_norda_database.py → -1 firma, +4 firmy, ~9 nazw (78 total) 6. split_ttm_companies.py → -1 wpis, +3 wpisy (80 total) ``` ## Uruchamianie Skryptów ### Standard ```bash python3 .py ``` ### Z output redirection ```bash python3 .py > output.log 2>&1 ``` ### Sprawdzenie przed uruchomieniem ```bash sqlite3 nordabiz_local.db "SELECT COUNT(*) FROM companies;" ``` ### Backup przed uruchomieniem ```bash cp nordabiz_local.db nordabiz_local.db.backup_before_ ``` ## Wskazówki 1. **Zawsze** sprawdź stan bazy przed uruchomieniem skryptu 2. **Zawsze** zrób backup przed operacjami modyfikującymi 3. **Nigdy** nie uruchamiaj tego samego skryptu importu dwa razy (sprawdza NIP) 4. Skrypty importu są **idempotentne** - można bezpiecznie uruchomić ponownie 5. Dla operacji modyfikujących schemat (jak split_ttm_companies.py) - uruchom **tylko raz** ## Status Bazy Danych **Aktualny stan:** 80 firm ✅ **Jakość danych:** Enhanced **Ostatnia modyfikacja:** 2025-11-24 (split_ttm_companies.py) --- **Uwaga:** Wszystkie skrypty importu używają `SessionLocal()` z database.py i automatycznie zamykają połączenie w bloku `finally`.