nordabiz/scripts/import_pej_contacts.py
Maciej Pienczyn 0efb79b294
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 PEJ external contacts import script
8 contacts: PEJ leadership (Maj, Woszczyk, Skolimowski),
supplier dept, Bechtel (Holda), PAA (Glowacki),
Ministry (Wrochna), Choczewo info point.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 21:44:48 +01:00

173 lines
7.5 KiB
Python

#!/usr/bin/env python3
"""Import PEJ-related external contacts to NordaBiz."""
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from database import ExternalContact
DATABASE_URL = os.environ.get('DATABASE_URL', 'postgresql://nordabiz_app:dev_password@localhost:5433/nordabiz')
CONTACTS = [
# PEJ — kluczowe osoby
{
'first_name': 'Grzegorz', 'last_name': 'Maj',
'position': 'Pełnomocnik Zarządu ds. Wsparcia Rozwoju Rynku (Local Content)',
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
'organization_type': 'company',
'organization_address': 'Al. Jerozolimskie 132/136, 02-305 Warszawa',
'organization_website': 'https://pej.pl',
'linkedin_url': 'https://www.linkedin.com/in/grzegorz-maj-80145574/',
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
'tags': 'PEJ, local content, dostawcy, atom, elektrownia jądrowa',
'notes': 'Kluczowy kontakt Izby ws. local content. Spotkanie z Zarządem Izby w marcu 2026.',
},
{
'first_name': 'Marek', 'last_name': 'Woszczyk',
'position': 'Prezes Zarządu PEJ',
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
'organization_type': 'company',
'organization_address': 'Al. Jerozolimskie 132/136, 02-305 Warszawa',
'organization_website': 'https://pej.pl',
'linkedin_url': 'https://www.linkedin.com/in/marek-woszczyk-emba-1670a969/',
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
'tags': 'PEJ, zarząd, prezes, atom, elektrownia jądrowa',
'notes': 'Prezes PEJ od 1 lipca 2025. Były prezes URE i PGE.',
},
{
'first_name': 'Marcin', 'last_name': 'Skolimowski',
'position': 'Rzecznik prasowy PEJ',
'phone': '+48 885 661 184',
'email': 'Marcin.Skolimowski@pej.pl',
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
'organization_type': 'company',
'organization_address': 'Al. Jerozolimskie 132/136, 02-305 Warszawa',
'organization_website': 'https://pej.pl',
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
'tags': 'PEJ, rzecznik, media, komunikacja, atom',
},
# PEJ — dział dostawców
{
'first_name': 'Dział', 'last_name': 'Dostawców PEJ',
'position': 'Rejestracja i współpraca z dostawcami',
'phone': '+48 885 993 277',
'email': 'dostawcy@pej.pl',
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
'organization_type': 'company',
'organization_address': 'Al. Jerozolimskie 132/136, 02-305 Warszawa',
'organization_website': 'https://pej.pl',
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
'tags': 'PEJ, dostawcy, przetargi, zamówienia, local content',
'notes': 'Rejestracja dostawców: wysłać nazwę firmy, NIP, branżę, DUNS, osobę kontaktową.',
'related_links': [
{'title': 'Platforma zakupowa PEJ', 'url': 'https://pz.pej.pl/', 'type': 'portal'},
{'title': 'Tablica ogłoszeń dostawców', 'url': 'https://pej.pl/en/for-suppliers/notice-board/', 'type': 'portal'},
],
},
# Bechtel Polska
{
'first_name': 'Leszek', 'last_name': 'Hołda',
'position': 'Prezes Bechtel Polska',
'organization_name': 'Bechtel Polska Sp. z o.o.',
'organization_type': 'company',
'organization_website': 'https://www.bechtel.com/markets/nuclear-power/',
'linkedin_url': 'https://www.linkedin.com/in/leszekholda/',
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
'tags': 'Bechtel, generalny wykonawca, budowa, EPC, atom',
'notes': 'Generalny wykonawca elektrowni jądrowej. Wcześniej w PKP Energetyka.',
},
# PAA
{
'first_name': 'Andrzej', 'last_name': 'Głowacki',
'position': 'Prezes Państwowej Agencji Atomistyki',
'organization_name': 'Państwowa Agencja Atomistyki (PAA)',
'organization_type': 'government',
'organization_address': 'ul. Bonifraterska 17, 00-203 Warszawa',
'organization_website': 'https://www.gov.pl/web/paa',
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
'tags': 'PAA, regulator, dozór jądrowy, pozwolenie na budowę, atom',
'notes': 'Prezes PAA od marca 2023 (kadencja 5 lat). Odpowiada za wydanie pozwolenia na budowę EJ.',
},
# Ministerstwo Przemysłu
{
'first_name': 'Wojciech', 'last_name': 'Wrochna',
'position': 'Pełnomocnik Rządu ds. Strategicznej Infrastruktury Energetycznej',
'organization_name': 'Ministerstwo Przemysłu',
'organization_type': 'government',
'organization_website': 'https://www.gov.pl/web/przemysl',
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
'tags': 'ministerstwo, pełnomocnik, infrastruktura energetyczna, atom, PEJ',
'notes': 'Sekretarz stanu w Ministerstwie Przemysłu. Nadzoruje PEJ od strony rządowej.',
},
# Punkt informacyjny Choczewo
{
'first_name': 'Punkt Informacyjny', 'last_name': 'PEJ Choczewo',
'position': 'Lokalny Punkt Informacyjny',
'phone': '+48 785 772 726',
'email': 'info.choczewo@pej.pl',
'organization_name': 'Polskie Elektrownie Jądrowe Sp. z o.o.',
'organization_type': 'company',
'organization_address': 'ul. Pucka 4, 84-210 Choczewo',
'organization_website': 'https://pej.pl',
'project_name': 'Elektrownia Jądrowa Lubiatowo-Kopalino',
'tags': 'PEJ, Choczewo, punkt informacyjny, lokalny, atom',
'notes': 'Godziny otwarcia: Pn/Śr/Czw 9-16, Pt 9-14, Wt nieczynne.',
},
]
def import_contacts():
engine = create_engine(DATABASE_URL)
Session = sessionmaker(bind=engine)
session = Session()
added = 0
skipped = 0
for c in CONTACTS:
# Check if already exists (by name + organization)
existing = session.query(ExternalContact).filter(
ExternalContact.first_name == c['first_name'],
ExternalContact.last_name == c['last_name'],
ExternalContact.organization_name == c['organization_name']
).first()
if existing:
print(f" SKIP: {c['first_name']} {c['last_name']} ({c['organization_name']}) — already exists (ID={existing.id})")
skipped += 1
continue
contact = ExternalContact(
first_name=c['first_name'],
last_name=c['last_name'],
position=c.get('position'),
phone=c.get('phone'),
email=c.get('email'),
linkedin_url=c.get('linkedin_url'),
organization_name=c['organization_name'],
organization_type=c.get('organization_type', 'other'),
organization_address=c.get('organization_address'),
organization_website=c.get('organization_website'),
project_name=c.get('project_name'),
tags=c.get('tags'),
notes=c.get('notes'),
related_links=c.get('related_links'),
source_type='manual',
is_active=True,
is_verified=True,
)
session.add(contact)
print(f" ADD: {c['first_name']} {c['last_name']} @ {c['organization_name']}")
added += 1
session.commit()
print(f"\nDone: {added} added, {skipped} skipped")
session.close()
if __name__ == '__main__':
import_contacts()