---
name: leadspicker-kampan-timing
description: Spočítá nejpozdější datum spuštění Leadspicker kampaně a celkovou délku od startu po cílovou akci. VŽDY použij tento skill pokud uživatel zmíňuje načasování, plánování nebo spouštění Leadspicker kampaně, nebo pokud se ptá zda stihne kampaň před nějakým datem. Trigger na fráze jako 'kdy spustit kampaň', 'načasování kampaně', 'stihnu to', 'kolik dnů potřebuju', 'mám X kontaktů a akci za Y dní', 'kdy začít posílat', 'rozeslání kampaně'. Pokud uživatel zadá datum akce a počet kontaktů v jedné zprávě, je to skoro jistě tenhle skill.
---

# Skill: Výpočet načasování Leadspicker kampaně

## Co skill dělá

Spočítá nejpozdější datum spuštění kampaně a celkovou délku od startu po cílovou akci. Zohledňuje:

1. **Dávkování** – počet kontaktů / denní limit = počet pracovních dnů na rozeslání
2. **Sekvenci zpráv** – součet všech čekacích dob mezi zprávami = délka sekvence
3. **Safety buffer** – rezerva před akcí (default: 7 dní)
4. **Větve sekvence** – kritická je vždy nejdelší větev (typicky větev s connection flow)

## Vzorec

```
Nejpozdější start = Datum akce - (dny_rozeslání_kalendářní + délka_nejdelší_sekvence + safety_buffer)

kde:
  dny_rozeslání_prac = CEIL(počet_kontaktů / kontaktů_za_den)
  dny_rozeslání_kal  = FLOOR(prac/5) * 7 + (prac MOD 5)   # pro 5 dní/týden
```

## Standardní parametry Happy End

| Parametr | Default | Max (bezpečnostní limit) |
|---|---|---|
| Kontaktů/den | 40 | 50 |
| Dní v týdnu | 5 | 5 |
| Safety buffer | 7 dní | – |
| Connection buffer | 5 dní | – |

## Sekvence – mapování větví

Pro každou kampaň identifikuj větve a jejich délku (součet wait-dob):

```
Délka větve = součet všech "Wait X days" v dané větvi
```

**Typické větve Happy End kulatý stůl** (použij jako default pokud uživatel nespecifikuje jiný flow – pro jiné typy kampaní se zeptej na konkrétní sekvenci):

| Větev | Popis | Délka sekvence |
|---|---|---|
| A | 1st degree – přímá zpráva | ~6 dní (wait 3d + wait 3d) |
| B | Connection accepted | ~9 dní (wait 3d + wait 3d + wait 3d) |
| C | Connection rejected (after 3d) | ~9 dní (wait 3d + wait 3d + wait 3d) |

Standardní pauza mezi všemi kroky = **3 dny**. Platí pro LI zprávy, emaily i InMail.
Kritická větev = ta s nejvyšším počtem dnů – použij ji pro výpočet.

## Výstup

Výstup má dvě části – textový souhrn a vizualizaci. Vždy generuj obě.

### Textový souhrn

```
NAČASOVÁNÍ KAMPANĚ – [název]
Datum akce: [datum]
Kontaktů: [počet] | Limit: [X]/den | Kritická větev: [název] ([Y] dnů)

Rozeslání:    [X] prac. dnů ([Y] kal. dnů)
Sekvence:     [Z] dnů (kritická větev)
Safety buffer: 7 dnů
CELKEM:       [total] dnů

NEJPOZDĚJŠÍ START: [datum] – [zelená: OK, čas v pohodě / červená: OPOŽDĚNO o X dnů]

Scénáře:
| Varianta           | Start      | Status        |
|---|---|---|
| 40/den (standard)  | [datum]    | OK / -X dnů   |
| 50/den (max)       | [datum]    | OK / -X dnů   |
| Zkrácená sekvence  | [datum]    | OK / -X dnů   |
```

### Vizualizace (HTML timeline)

Pokud je to možné (např. uživatel pracuje v prostředí kde lze zobrazit HTML), vygeneruj jednoduchý HTML soubor s timeline vizualizací. Timeline ukazuje barevné bloky pro každou fázi (rozeslání, sekvence, buffer) a zvýrazni kritickou cestu. Ulož do `/tmp/kampan-timing-[název].html` a otevři.

Pokud HTML není možné, použij textovou vizualizaci s ASCII bloky:
```
|===rozeslání===|---sekvence---|..buffer..|  AKCE
^start                                      ^datum
```

## Notion I/O (automatizovaný mód)

Když je skill volaný v rámci automatizované pipeline (scheduled task, ne přímo uživatelem), použij Notion jako zdroj vstupu i cíl výstupu.

> **Notion DB IDs:** viz `leadspicker-shared-config.md`

### Notion vstup – Campaign Brief

Přečti Campaign Brief stránku z Notion DB (ID viz sdílená konfigurace výše).

Mapování properties na vstupní parametry:

| Notion property | Parametr skillu |
|---|---|
| `Event Date` | Datum cílové akce |
| `Contact Count` | Počet kontaktů |
| `Daily Limit` | Kontaktů/den (pokud prázdné, použij default 40) |
| `Campaign Goal` | Typ akce (pro kontext sekvence) |
| `Name` | Název kampaně (pro identifikaci) |

### Notion výstup – Timing Result

Po výpočtu zapiš výsledek do `Timing Result` property na Campaign Brief stránce:

```
notion-update-page:
  page_id: <brief_page_id>
  command: update_properties
  properties:
    "Timing Result": "<formátovaný text>"
```

Formát Timing Result textu:
```
Nejpozdější start: YYYY-MM-DD
Celková délka: X dnů (Y prac. dnů rozeslání + Z dnů sekvence + 7 dní buffer)
Status: OK / OPOŽDĚNO o X dnů
Kritická větev: [název] (X dnů)
Doporučení: [konkrétní akce pokud opožděno]
```

### Fallback na manuální mód

Pokud vstup NENÍ z Notionu (uživatel píše přímo v konverzaci), použij původní postup níže.

---

## Postup při spuštění

### Krok 1 – Zjisti vstupní parametry

Pokud nejsou v konverzaci ANI v Notion briefu, zeptej se na:
- **Datum cílové akce** (kulatý stůl / jiná akce)
- **Počet kontaktů** v databázi
- **Sekvence zpráv** – buď přímý popis ("3 zprávy, pauzy 3 a 5 dnů") nebo screenshot/popis flow z Leadspickeru

Pokud je dostupný screenshot sekvence, extrahuj z něj větve a wait-doby.

### Krok 2 – Mapuj sekvenci

Z popisu nebo screenshotu vytvoř tabulku:

```
Větev X:
  Den 0:  [akce]
  Wait Y days
  Den Y:  [akce]
  ...
  Celkem: Z dnů
```

### Krok 3 – Spočítej

```python
kontaktů = 569
per_day = 40
days_week = 5
safety = 7
seq_days = max(délka_větev)  # kritická větev

prac_dní = ceil(kontaktů / per_day)          # = 15 prac. dnů
kal_dní = floor(prac_dní/days_week)*7 + (prac_dní % days_week)  # = 21 kal. dnů
total = kal_dní + seq_days + safety
nejpozději = datum_akce - total dnů
```

### Krok 4 – Vygeneruj výstup

Vygeneruj textový souhrn a vizualizaci podle sekce "Výstup" výše. Textový souhrn vždy, vizualizaci podle prostředí.

### Krok 5 – Klíčové zjištění a doporučení

Na konec přidej 1-2 věty shrnující situaci a konkrétní akce. Tenhle krok je důležitý, protože uživatel často potřebuje rychlou odpověď "stihnu to?" bez čtení celých tabulek:
- Nejpozdější datum startu **tučně**
- Kritická větev a proč je kritická (nejdelší cesta = určuje minimální čas)
- Jestli je čas (ok / kolik dnů chybí)
- 1-2 konkrétní akce pokud je problém (zvýšit limit, zkrátit sekvenci, rozdělit na vlny)

## Typické problémy a řešení

| Situace | Řešení |
|---|---|
| Málo času | Zvýšit na 50/den, zkrátit pauzy, rozdělit na 2 vlny (prioritní + zbytek) |
| Dlouhá větev C | Zvážit InMail vynechat, zkrátit wait 5d na 3d |
| Nejasná sekvence | Požádat o screenshot nebo popis flow krok po kroku |
| Více kampaní paralelně | Zkontrolovat celkový denní limit (suma všech kampaní <= 40-50/den) |

## Příklady výstupů

**Vstup:** 569 kontaktů, 40/den, sekvence C=10 dnů, KS za 45 dnů
**Výstup:** Start nejpozději za 7 dnů (45 - 38), status zelená

**Vstup:** 569 kontaktů, 40/den, sekvence C=10 dnů, KS za 30 dnů
**Výstup:** Opožděno o 8 dnů, doporučení: zvýšit na 50/den (ušetří 3 dny) + zkrátit wait v C na 7d (ušetří 3 dny)
