The documentation incorrectly stated that DEV environment uses SQLite when it actually uses PostgreSQL via Docker on localhost:5433. Updated files: - CLAUDE.md - main project instructions - PROJECT_INFO.md - environment documentation - deployment_checklist.md - deployment procedures - SCRIPTS_INDEX.md - script usage commands - .claude/commands/*.md - all slash command definitions - tests/test_admin_seo_dashboard.py - test database URL DEV environment: - PostgreSQL via Docker: localhost:5433 - Container: nordabiz-postgres - Database: nordabiz - User: nordabiz_app PROD environment: - PostgreSQL: 10.22.68.249:5432 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.4 KiB
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:
- Usunięcie Autotest Polska (nie jest członkiem NORDA)
- Aktualizacja 9 nazw firm (zgodność z listą NORDA)
- 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:
- Usunięcie UNIQUE constraint z kolumny NIP
- Stworzenie 3 osobnych firm:
- Nadmorski24.pl (slug: nadmorski24pl)
- Radio Norda FM (slug: radio-norda-fm)
- TTM (slug: ttm)
- 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
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
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
python3 <script_name>.py
Z output redirection
python3 <script_name>.py > output.log 2>&1
Sprawdzenie przed uruchomieniem (DEV via Docker)
docker exec nordabiz-postgres psql -U nordabiz_app -d nordabiz -c "SELECT COUNT(*) FROM companies;"
Backup przed uruchomieniem (DEV via Docker)
docker exec nordabiz-postgres pg_dump -U nordabiz_app nordabiz > nordabiz_backup_before_<operation>.sql
Wskazówki
- Zawsze sprawdź stan bazy przed uruchomieniem skryptu
- Zawsze zrób backup przed operacjami modyfikującymi
- Nigdy nie uruchamiaj tego samego skryptu importu dwa razy (sprawdza NIP)
- Skrypty importu są idempotentne - można bezpiecznie uruchomić ponownie
- 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.