nordabiz/scripts
Maciej Pienczyn 93e90b2c72
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: add data quality dashboard, auto-scoring, bulk enrichment and GBP data flow
- Extract 12-field completeness scoring to utils/data_quality.py service
- Auto-update data_quality_score and data_quality label on company data changes
- Add /admin/data-quality dashboard with field coverage stats, quality distribution, and sortable company table
- Add bulk enrichment with background processing, step selection, and progress tracking
- Flow GBP phone/website to Company record when company fields are empty
- Display Google opening hours on public company profile
- Add BulkEnrichmentJob model and migration 075
- Refactor arm_company.py to support selective steps and progress callbacks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 07:02:45 +01: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
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
company-data-collector.js refactor: Rebranding i aktualizacja modelu AI 2026-01-29 14:08:39 +01:00
competitor_monitor_cron.py feat: Add new services, scripts, and competitor dashboard 2026-02-07 12:00:54 +01:00
cron_extract_knowledge.py feat(zopk): Rozbudowa bazy wiedzy ZOPK 2026-01-17 10:57:11 +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
fetch_ceidg_api.py feat: Display ALL KRS data in company profile 2026-02-01 07:44:33 +01: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_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 refactor(seo): Rename FID to INP across entire codebase 2026-02-08 12:58:41 +01: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_kaszubia_2030.py refactor: Rebranding i aktualizacja modelu AI 2026-01-29 14:08:39 +01: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_whatsapp_feb2026.py feat(calendar): Show 3 upcoming events on homepage + WhatsApp data import 2026-02-12 16:29:07 +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
migrate_rada_data.py fix(migration): Fix email_verified in secretary creation 2026-02-04 15:28:22 +01:00
pagespeed_client.py refactor(seo): Rename FID to INP across entire codebase 2026-02-08 12:58:41 +01: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
seo_analyzer.py auto-claude: 3.2 - Add TechnicalSEOChecker class to scripts/seo_analyzer.py 2026-01-08 02:12:47 +01:00
seo_audit.py fix(seo-audit): Move load_dotenv before module-level env reads 2026-02-13 15:27:43 +01:00
seo_report_generator.py refactor(seo): Rename FID to INP across entire codebase 2026-02-08 12:58:41 +01:00
simulate_model_comparison.py feat(admin): Add AI model comparison page 2026-01-29 08:45:33 +01:00
social_media_audit.py fix: Remove Brave Search from social media audit — too many false positives 2026-02-18 18:20:52 +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 auto-claude: 2.6 - Remove hardcoded password from docstring usage example 2026-01-10 12:55:34 +01:00
test_email_send.py feat: Add email test script for manual testing 2026-01-14 14:09:17 +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 feat: Enhanced website extraction - no limits, more categories 2026-02-01 08:50:15 +01: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