Prodator · Plán sjednocení

z porady „sjednocení mapping“ 9. 7. 2026 · aktualizováno 12. 7. 2026
Sloučení OMS + ATS + Prospectly do jednoho systému. Vše níže bylo nacvičeno na lokálních kopiích tří produkčních databází; na produkci nebylo nic nasazeno.

Vaše dvě otázky

Mažeme nějaké tabulky?
Ano — ty mrtvé, nejdřív se zálohou

Pro skutečné zjednodušení se ~17 mrtvých tabulek smaže (DROP TABLE) — ale nikdy bez ověřené záložní kopie. Všech 17 je už vydumpováno (obnovitelné) do ~/p/prodator/.local-dev/pre-drop-backups/; ověřeno na kopii: smazání → obnova vrátí každý řádek. Živé tabulky se mažou až po přesměrování čtenářů; každé smazání má podmínku.

Slučujeme nějaká data?
Zatím jen přidáváme

Co je hotové dnes, jen přidává sloupce / obnovuje řádky — žádná data se nepřepisují. Skutečné slučování dat (nahrání ATS řádků kampaní do OMS, sloučení duplicitních firem podle IČO) čeká na vaše odpovědi (Q3 / Q5) a zatím neproběhlo.

🔒 Záložní pojistka. Každá tabulka určená ke SMAZÁNÍ má vlastní obnovitelný dump (základ 2026‑07‑11, 17 tabulek, 38 MB, 0700). Před skutečným smazáním na produkci se udělá čerstvý živý dump + odešle mimo stroj (stále zapisované tabulky — „Candidates“, contacts_all — se mění denně). Obnova = pg_restore -d <živá> <tabulka>-PREDROP-<datum>.dump. Plus úplné produkční kopie z 2026‑07‑11 v .local-dev a noční restic zálohy mimo stroj.

Co se stane s každou tabulkou

PŘIDAT — přidání, bezpečné KÓD — beze změny schématu SMAZAT 🔒 — mrtvá tabulka, zálohovaná + s podmínkou SLOUČIT — sloučení dat, s podmínkou ← každé SMAZÁNÍ má ověřenou zálohu
TabulkaSystémOperaceCo a proč
candidatesATSPŘIDAT + DOPLNIT+ phone_normalized, legacy_typeform_id; obnova 83 osiřelých Typeform uchazečů. Stávající řádky beze změny.
funnel_candidatesATSPŘIDAT + DOPLNIT+ legacy_typeform_id; 14 osiřelých bez kampaně směřuje sem (domov pro nepřiřazené leady).
"Candidates" (velké C)ATSSMAZAT 🔒Starý Typeform duplikát (48 766 řádků, zálohováno). Smaže se až po přesměrování zapisovatele + obnově osiřelých. Podmínka → dále.
campaignsOMSPŘIDAT (+RPC)+ 19 sloupců jen z ATS (příprava schématu) & nová RPC pro duplikaci. Stávající řádky beze změny.
client_contact_campaignsOMSPŘIDAT+ roles (rozhodovatel / vlastník / kontakt). 579 řádků zachováno.
campaign_day_logOMSZNOVU POUŽITOStávající deník (12k řádků) zaznamenává přesuny dní. Beze změny schématu.
tasksOMSKÓDZrušení pravidla „nutná kampaň“ (jen aplikace; sloupec už je nullable).
contactsProspectlyPŘIDAT+ phone_normalized. Řádky beze změny.
contacts_all + ats_candidatesOMSSMAZAT 🔒Zálohováno. Smaže se po přesměrování čtenářů (25 edge fn / 9 KPI fn) + kompatibilní view přemostí přechod. Podmínka → Q2.
cos_*_mirror (3)ProspectlySMAZAT 🔒Mrtvá jednosměrná zrcadla (synchro zamrzlé 26. 6.), zálohováno. Ponechat cos_tasks_mirror. Podmínka → přesměrování čtenářů.
*_active dvojčata + _bak_* (11)ProspectlySMAZAT 🔒Zamrzlé snímky & pozůstatky po zásazích, zálohováno. Největší zjednodušení. Podmínka → přesměrování smoke-testů.
organizations (9 párů IČO)ProspectlySLOUČIT (podmínka)Sloučení duplicitních právnických osob — potřebuje váš výběr u každého páru. Podmínka → Q5.

Příjem kandidátů — co plní starou tabulku (dohledáno 12. 7. 2026)

Záhada vyřešena. Zapisovatel do "Candidates" (velké C) není v žádném našem systému — ani v Make (1 449 scénářů, 0 zápisů do Supabase), ani v 79 ATS edge funkcích, ani v DB, ani v žádném repu. Jsou to vlastní kariérní weby klientů (platforma „phoenix“, *-kariera.eu), které zapisují do ATS přes vlastní API klíč. 608 Typeform formulářů se rozbíhá do 4 backendů → 4 tabulek; moderní je správně, tři staré nikdy nikdo nevypnul.
Typeform webhook →FormulářeZapisujeVerdikt
ikisww/typeform-webhook (ats-realtime)75ats.candidates (malé c, SoT)PONECHAT — cíl
hook.integromat.com (staré Make)92Sheets / přeposlání (ověřit)staré — největší skupina
*-kariera.eu (phoenix)4ats."Candidates" (velké C)staré — plní velké C
ysxcw/typeform-webhook (cos-ats)3oms.contacts_allstaré
(bez aktivního webhooku)437mrtvé formuláře

Plán sjednocení — jeden webhook, jedna tabulka

Všechny Typeform formuláře  ──▶  ikisww/typeform-webhook  ──▶  ats.candidates  (jediný zdroj pravdy)

① Sjednotit přítoky

klíčová oprava · Typeform API (zápis, nutný souhlas)
  • Zapnout webhook ats-realtime + vypnout starý, u každého formuláře
  • Vlna A — 3 OMS formuláře cos-ats (jen my)
  • Vlna B — 4 formuláře kariérních webů 🔗 web tým klienta
  • Vlna C — 92 Integromat formulářů (nejdřív ověřit živé)
  • vratné: zpět zapnutím starého webhooku

② Zpevnit + ③ Obnovit

naše PR
  • Ověřit, že jeden webhook pokryje vše (mapování kampaně, deduplikace, neplatné řádky)
  • Automaticky registrovat nové formuláře na jeden endpoint
  • #11 obnova osiřelých → candidates / funnel
  • Obnova unikátů z ats_candidates/contacts_all

④ Vyřadit staré tabulky

nejdřív záloha · s podmínkou
  • Smazat "Candidates" 🔒 (#12) — po Vlně B + #11 + 7 klidných dnech
  • Smazat ats_candidates + contacts_all 🔒 — po odpojení cos-ats + přesměrování čtenářů
  • vše zálohováno, smazání→obnova ověřena

8 pull requestů

PRRepoOpravaStav
#11ATSObnova 97 osiřelých z Typeformu (83→candidates, 14→funnel)HOTOVO — mergnout
#15OMSDuplikace kampaně odečítá dny ze zdrojeHOTOVO · po review opraveno zabezpečení
#16OMSPole rolí kontaktu na kampaniHOTOVO
#17OMSNahrání 19 ATS sloupců kampaně (příprava schématu)HOTOVO · sloučení řádků čeká na Q3
#18OMSÚkoly už nevyžadují kampaňHOTOVO · review čisté
#10ATSphone_normalized na candidatesHOTOVO
#145Prospectlyphone_normalized na contactsHOTOVO
#12ATSSmazat 🔒 tabulku „Candidates“ (velké C, zálohováno)PODMÍNKA — nemergovat

Časový plán realizace

✅ Teď

hotové — vaše merge
  • Mergnout #11 (obnova osiřelých)
  • Mergnout #15 (odečet dní)
  • Mergnout #18 (úkoly)
  • Mergnout #16 / #10 / #145 (role, telefon)
  • #17 kdykoliv (příprava schématu)
  • po každém: Lovable nasadí migraci + přegeneruje typy

⏳ Dále

po sjednocení přítoků
  • Přesměrovat formuláře → jeden webhook
  • Znovu spustit #11 (dobrat mezeru)
  • Sledovat „Candidates“ — 0 nových řádků / 7 dní
  • Mergnout #12 (smazání)

🔒 Čeká na rozhodnutí

podmíněno vašimi odpověďmi
  • Sloučení řádků kampaní — Q3
  • Smazání contacts_all 🔒 — Q2
  • Smazání zrcadel + dvojčat 🔒 — přesměrování čtenářů
  • Sloučení firem podle IČO — Q5
  • 2 patche landing page — vaše zadání

Otevřené otázky — potřebuji od vás

Podrobnosti: analysis.md (fakticky ověřená analýza porady) · rehearsal/REHEARSAL-REPORT.md (důkazy) · EXECUTION-STATUS.md (hlavní plán) · DECISIONS.md (rozhodnutí) — vše v ~/p/prodator/meetings/2026-07-09-sjednoceni-mapping/. Nacvičeno na lokálních kopiích produkce; referenční DB nedotčené; nic nemergnuto ani nenasazeno. přepnout téma