nordabiz/scripts
Maciej Pienczyn c9985ba51a
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
feat(notifications): D.2+D.3 — forum, broadcasty Izby, wydarzenia, cron 24h
Rozszerzenie powiadomień o kolejne typy zdarzeń, z symetrycznymi togglami
e-mail i push w /konto/prywatnosc.

Migracje 103 + 104 — 6 nowych kolumn preferencji e-mail + NordaEvent.reminder_24h_sent_at.

Triggery:
- Forum odpowiedź → push do autora wątku (notify_push_forum_reply)
- Forum cytat (> **Imię** napisał(a):) → push + email do cytowanego
  (notify_push/email_forum_quote)
- Admin publikuje aktualność → broadcast push (ON) + email (OFF)
  do aktywnych członków (notify_push/email_announcements)
- Board: utworzenie / publikacja programu / publikacja protokołu
  → broadcast push + opt-in email (notify_push/email_board_meetings)
- Nowe wydarzenie w kalendarzu → broadcast push + email (oba ON)
  (notify_push/email_event_invites)
- Cron scripts/event_reminders_cron.py co godzinę — wydarzenia za 23-25h,
  dla zapisanych (EventAttendee.status != 'declined') push + email,
  znacznik NordaEvent.reminder_24h_sent_at żeby nie dublować.

Email defaults dobrane, by nie zalać inbox: broadcast OFF (announcements,
board, forum_reply), personalne/actionable ON (forum_quote, event_invites,
event_reminders).

Wszystkie nowe e-maile mają jednym-kliknięciem unsubscribe (RFC 8058
+ link w stopce) — unsubscribe_tokens.py rozszerzony o nowe typy.

Cron entry do dodania na prod (osobny krok, bo to edycja crontaba):
  0 * * * * cd /var/www/nordabiznes && venv/bin/python3 scripts/event_reminders_cron.py

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 18:20:38 +02:00
..
.ovh_vps_monitor_state.json feat: migrate prod docs to OVH VPS + UTC→Warsaw timezone in all templates 2026-04-06 13:41:53 +02:00
add_grill_event.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
arm_company.py feat: add data quality dashboard, auto-scoring, bulk enrichment and GBP data flow 2026-02-21 07:02:45 +01:00
assign_category_parents.py feat(categories): Hierarchiczna struktura kategorii 2026-01-28 20:51:15 +01:00
audit_company_data.py feat: migrate prod docs to OVH VPS + UTC→Warsaw timezone in all templates 2026-04-06 13:41:53 +02:00
backfill_data_quality_scores.py feat: add data quality dashboard, auto-scoring, bulk enrichment and GBP data flow 2026-02-21 07:02:45 +01:00
backfill_zopk_images.py fix: add local image caching for ZOPK news thumbnails 2026-03-15 09:08:03 +01:00
check_websites.py claude-mem plugin v10.3.3 2026-02-23 10:33:26 +01:00
classified_expiry_notifier.py feat(email): one-click unsubscribe w mailach powiadomień (RFC 8058) 2026-04-14 17:56:36 +02:00
CLAUDE.md claude-mem plugin v10.3.3 2026-02-23 10:33:26 +01:00
company-data-collector.js refactor: Rebranding i aktualizacja modelu AI 2026-01-29 14:08:39 +01:00
competitor_monitor_cron.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
create_presentation.js feat: migrate prod docs to OVH VPS + UTC→Warsaw timezone in all templates 2026-04-06 13:41:53 +02:00
cron_extract_knowledge.py feat(zopk): Rozbudowa bazy wiedzy ZOPK 2026-01-17 10:57:11 +01:00
debug_fb_token.py claude-mem plugin v10.3.3 2026-02-23 10:33:26 +01:00
download_ceidg_data.py feat: Add company logos to search results, hide events section 2026-01-11 15:32:53 +01:00
download_krs_pdf.py feat: Add company logos to search results, hide events section 2026-01-11 15:32:53 +01:00
dr-restore.sh test: Add comprehensive testing infrastructure 2026-02-02 07:52:34 +01:00
event_reminders_cron.py feat(notifications): D.2+D.3 — forum, broadcasty Izby, wydarzenia, cron 24h 2026-04-14 18:20:38 +02:00
extract_event_from_url.py feat(scripts): add extract_event_from_url.py for visual data extraction 2026-03-19 10:48:07 +01:00
fetch_ceidg_api.py feat: Display ALL KRS data in company profile 2026-02-01 07:44:33 +01:00
fetch_financial_reports.py fix(financial): update eKRS API key paths and date format parsing 2026-04-07 16:04:20 +02:00
fetch_news_images.py fix: Poprawione dekodowanie URL Google News + użycie source_domain 2026-01-15 06:10:59 +01:00
fix_google_news_images.py fix: Usunięto Session z decode_google_news_url, dodano max_depth 2026-01-15 07:45:02 +01:00
fix_google_news_sources.py feat(zopk): Skrypt do naprawy źródeł newsów z Google News 2026-01-15 08:06:40 +01:00
fix_pptx_gemini.py claude-mem plugin v10.3.3 2026-02-23 10:33:26 +01:00
fix_waterm_duplicates.py claude-mem plugin v10.3.3 2026-02-23 10:33:26 +01:00
fix_year_established.py feat: Email DKIM/SPF/DMARC config + year_established data fill 2026-01-14 15:01:01 +01:00
generate_audit_report.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
import_board_documents_2_2026.py fix: use upload date (not meeting date) for board document storage path 2026-02-20 12:29:57 +01:00
import_board_meeting_2_2026.py feat: activate board document upload/download with meeting 2/2026 import 2026-02-20 12:04:44 +01:00
import_calendar_2026.py fix(calendar): Poprawiono godzinę "Chwila dla Biznesu" z 18:00 na 19:00 2026-01-21 21:56:55 +01:00
import_ceidg_to_db.py feat: Add PKD codes and CEIDG owner data to company profiles 2026-01-13 16:07:03 +01:00
import_excel_members_2026_01_13.py feat: Add source tracking to events + import scripts 2026-01-13 10:22:24 +01:00
import_iss_rfid.py claude-mem plugin v10.5.6 2026-03-17 14:45:55 +01:00
import_kaszubia_2030.py feat: migrate prod docs to OVH VPS + UTC→Warsaw timezone in all templates 2026-04-06 13:41:53 +02:00
import_krs_people.py feat: Add company logos to search results, hide events section 2026-01-11 15:32:53 +01:00
import_member_since.py feat: Dodanie daty przystąpienia do Izby NORDA na profilu firmy 2026-01-14 06:57:00 +01:00
import_membership_fees.py feat(nordagpt): integrate smart router — selective context loading + adaptive model selection 2026-03-28 05:37:00 +01:00
import_norda_tools.py feat: add Norda Tools import script 2026-03-16 20:05:36 +01:00
import_pej_contacts.py feat: add PEJ external contacts import script 2026-03-16 21:44:48 +01:00
import_whatsapp_feb2026.py feat(calendar): Show 3 upcoming events on homepage + WhatsApp data import 2026-02-12 16:29:07 +01:00
internal_health_logger.py feat: add uptime monitoring dashboard with UptimeRobot integration 2026-03-15 07:53:05 +01:00
link_users_to_persons.py feat: Link Users to Persons (KRS data) 2026-01-13 15:07:02 +01:00
list_forum_topics.py feat: Add 'test' category for forum topics to separate test content 2026-01-13 11:48:08 +01:00
mark_test_classifieds.py feat: Add toggle button to hide/show test items on B2B board 2026-01-13 13:08:11 +01:00
mark_test_topics.py feat: Add 'test' category for forum topics to separate test content 2026-01-13 11:48:08 +01:00
match_companies_zopk.py fix: fix ZOPK project filter and use working Gemini model 2026-03-15 09:40:40 +01:00
migrate_messages.py fix(messages): use HTML strong tag instead of markdown, remove reply_to mapping from migration 2026-03-27 13:43:21 +01:00
migrate_rada_data.py fix(migration): Fix email_verified in secretary creation 2026-02-04 15:28:22 +01:00
ovh_vps_monitor.py feat: migrate prod docs to OVH VPS + UTC→Warsaw timezone in all templates 2026-04-06 13:41:53 +02:00
pagespeed_client.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
parse_krs_pdf.py feat: Add company logos to search results, hide events section 2026-01-11 15:32:53 +01:00
README.md refactor: Rebranding i aktualizacja modelu AI 2026-01-29 14:08:39 +01:00
register_whatsapp_attendees.py refactor(rbac): Migrate legacy is_admin checks to role-based has_role()/set_role() 2026-02-05 21:06:22 +01:00
run_migration.py fix(admin): Naprawiono błędne nazwy endpointów w breadcrumbs 2026-01-17 09:03:01 +01:00
scan_websites_for_nip.py fix: Remove sticky sidebar on account pages + add Companies to admin menu 2026-02-01 07:03:55 +01:00
search_ceidg_by_name.py fix: Rename pkd_codes column to ceidg_pkd_list to avoid backref conflict 2026-02-01 07:22:32 +01:00
send_batch_password_resets.py claude-mem plugin v10.3.3 2026-02-23 10:33:26 +01:00
send_portal_message.py fix(scripts): use datetime.now() instead of utcnow() to match server timezone 2026-03-27 17:20:48 +01:00
send_welcome_activation.py feat: welcome activation email for users who never logged in 2026-02-23 10:03:29 +01:00
seo_analyzer.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
seo_audit.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
seo_report_generator.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
simulate_model_comparison.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
social_media_audit.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
sync_staging_db.sh feat: migrate prod docs to OVH VPS + UTC→Warsaw timezone in all templates 2026-04-06 13:41:53 +02:00
tag_nuclear_news.py feat(pej): auto-tag nuclear news with project_id 2026-03-16 20:50:25 +01:00
test_ai_proposal.py refactor(rbac): Migrate legacy is_admin checks to role-based has_role()/set_role() 2026-02-05 21:06:22 +01:00
test_collaboration_matching.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
test_email_send.py feat: Add email test script for manual testing 2026-01-14 14:09:17 +01:00
update_pptx_diagrams.py claude-mem plugin v10.3.3 2026-02-23 10:33:26 +01:00
uptimerobot_sync.py feat: add uptime monitoring dashboard with UptimeRobot integration 2026-03-15 07:53:05 +01:00
verify_google_places.py auto-claude: subtask-4-2 - Add --company-slug support and dotenv loading 2026-01-08 20:49:59 +01:00
website_content_updater.py chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files 2026-04-10 08:20:47 +02:00
zopk_knowledge_pipeline.py fix: Poprawiono nazwy kluczy w pipeline skrypcie 2026-01-17 00:27:08 +01:00

Norda Biznes - Scripts

Automatyczne skrypty do zbierania i przetwarzania danych o firmach członkowskich.


📁 Pliki

company-data-collector.js

Główny agent zbierający dane o firmach z różnych źródeł.

Funkcje:

  • 🔍 Wyszukiwanie firm w ALEO.com (NIP, REGON, KRS)
  • 🌐 Znajdowanie stron WWW przez Google
  • 📊 Ekstrakcja danych ze stron firmowych
  • 💾 Automatyczny zapis do data/companies-full.json
  • 📝 Generowanie logów i raportów

🚀 Użycie

Podstawowe uruchomienie

node scripts/company-data-collector.js

Przetworzy wszystkie 80 firm z data/companies-basic.json.

Z limitowaniem

# Przetw

órz tylko 5 pierwszych firm (test)
node scripts/company-data-collector.js --limit 5

# Przetwórz 10 firm
node scripts/company-data-collector.js --limit 10

Pomijanie już przetworzonych

# Przetwórz tylko firmy, których nie ma w companies-full.json
node scripts/company-data-collector.js --skip-processed

# Kombinacja: pomiń przetworzone, limit 20
node scripts/company-data-collector.js --skip-processed --limit 20

Pomoc

node scripts/company-data-collector.js --help

📊 Output

Pliki wyjściowe:

  1. data/companies-full.json

    • Pełne dane wszystkich przetworzonych firm
    • Aktualizowany po każdej firmie
    • Format JSON z metadanymi
  2. data/collection-log.md

    • Szczegółowy log przetwarzania
    • Dla każdej firmy: timestamp, kroki, błędy
    • Markdown format
  3. Konsola

    • Real-time progress
    • Raport końcowy ze statystykami

Przykładowy output konsoli:

🤖 Norda Biznes - Company Data Collector Agent
================================================

📊 Załadowano 80 firm do zbadania

[1/80] Przetwarzanie: PIXLAB
────────────────────────────────────────────────────────────
📡 KROK 1: Wyszukiwanie w ALEO.com...
   ✅ Znaleziono dane urzędowe
🔍 KROK 2: Szukanie strony WWW...
   ✅ Znaleziono stronę: https://pixlab.pl
🌐 KROK 3: Pobieranie danych ze strony...
   ✅ Pobrano dane ze strony
✅ Pełne dane zebrane

[2/80] Przetwarzanie: KORNIX
...

============================================================
📊 RAPORT KOŃCOWY
============================================================

Przetworzono:    80/80 firm
Pełne dane:      56 (70%)
Częściowe dane:  20 (25%)
Niepowodzenia:   4 (5%)

Czas działania:  16.5 minut
Średnio na firmę: 0.21 min

============================================================

⚙️ Konfiguracja

W pliku company-data-collector.js:

const CONFIG = {
  delayBetweenRequests: 2000,  // 2 sekundy między firmami
  maxRetries: 3,               // Maksymalna liczba ponownych prób
  timeout: 30000              // Timeout 30 sekund
};

Źródła danych:

Agent próbuje pobrać dane z:

  1. ALEO.com - dane urzędowe (NIP, REGON, KRS)
  2. Google Search - URL strony WWW
  3. Strony firmowe - kontakt, usługi, kompetencje

🔧 Wymagania

Node.js packages:

# Podstawowe (built-in):
- fs
- path

# Opcjonalne (dla pełnej funkcjonalności):
npm install puppeteer  # Web scraping
# lub
npm install playwright # Web scraping (zalecane)
# lub
npm install cheerio axios # Prosty scraping HTML

API Keys (opcjonalne):


📝 Status Implementacji

Zaimplementowane:

  • Struktura agenta
  • CLI interface (argumenty, pomoc)
  • Wczytywanie danych z companies-basic.json
  • Zapis do companies-full.json
  • Generowanie logów
  • Raportowanie postępu
  • Ocena jakości danych
  • Statystyki i raporty

🔄 Do zaimplementowania:

  • Rzeczywiste wyszukiwanie w ALEO.com

    • Wymaga: puppeteer/playwright
    • Metoda: searchAleo(companyName)
  • Rzeczywiste wyszukiwanie w Google

    • Wymaga: Google Custom Search API
    • Metoda: findWebsite(companyName)
  • Rzeczywisty web scraping

    • Wymaga: puppeteer/cheerio
    • Metoda: scrapeWebsite(url)
  • Automatyczna aktualizacja data-sources.md

    • Metoda: updateDataSources()

🎯 Roadmap

Faza 1: Ręczne zbieranie danych (OBECNA)

  • Struktura agenta gotowa
  • Pliki JSON i MD przygotowane
  • 🔄 Ręczne wypełnianie danych (copy-paste z researchu)

Faza 2: Semi-automatyczne zbieranie

  • Implementacja scrapingu ALEO.com
  • Znajdowanie stron WWW przez Google API
  • Podstawowy scraping stron (kontakt)

Faza 3: Pełna automatyzacja

  • AI-assisted data extraction
  • Automatyczna walidacja danych
  • Scheduled updates (cron)
  • Email notifications

🐛 Troubleshooting

Agent się nie uruchamia

# Sprawdź czy Node.js jest zainstalowany:
node --version  # Powinno pokazać v14+ lub nowsze

# Sprawdź uprawnienia:
chmod +x scripts/company-data-collector.js

# Uruchom z verbose:
node scripts/company-data-collector.js --limit 1

Brak danych w companies-full.json

# Sprawdź czy plik companies-basic.json istnieje:
ls -la data/companies-basic.json

# Sprawdź format JSON:
cat data/companies-basic.json | python -m json.tool

"Cannot find module"

# Zainstaluj zależności:
npm install

# Lub jeśli używasz yarn:
yarn install

📚 Dokumentacja

Struktura danych firmy:

Patrz: data/companies-full.json - przykłady z pełnymi danymi

Log format:

Patrz: data/collection-log.md - przykład po uruchomieniu agenta

Źródła danych:

Patrz: data/data-sources.md - lista wszystkich źródeł


👨‍💻 Development

Testowanie:

# Test na 1 firmie:
node scripts/company-data-collector.js --limit 1

# Test na 5 firmach:
node scripts/company-data-collector.js --limit 5

# Dry run (bez zapisu):
# TODO: Dodać flagę --dry-run

Debugowanie:

Odkomentuj linie z console.log w metodach:

  • searchAleo()
  • findWebsite()
  • scrapeWebsite()

📞 Support

Pytania lub problemy? Kontakt:


Wersja: 1.0 Ostatnia aktualizacja: 2025-11-23 Autor: Norda Biznes Partner Development Team