nordabiz/SCRIPTS_INDEX.md
Maciej Pienczyn 69bb6b839a docs: Fix incorrect SQLite references - DEV uses PostgreSQL via Docker
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>
2026-01-09 03:40:50 +01:00

193 lines
5.4 KiB
Markdown

# 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 <script_name>.py
```
### Z output redirection
```bash
python3 <script_name>.py > output.log 2>&1
```
### Sprawdzenie przed uruchomieniem (DEV via Docker)
```bash
docker exec nordabiz-postgres psql -U nordabiz_app -d nordabiz -c "SELECT COUNT(*) FROM companies;"
```
### Backup przed uruchomieniem (DEV via Docker)
```bash
docker exec nordabiz-postgres pg_dump -U nordabiz_app nordabiz > nordabiz_backup_before_<operation>.sql
```
## 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`.