# Marketing Data Audit

Stav: druhá CRM analytická etapa  
Odoo: jedna inštancia, companies HOBBYTEC `1` a GLENDEA `2`  
Bezpečnosť: audit endpoint vracia iba schému polí, nie hodnoty záznamov ani PII.

## Potvrdené pravidlá

- `crm.lead.company_id = 1` sa reportuje ako HOBBYTEC.
- `crm.lead.company_id = 2` a `tag_ids` obsahuje `33` sa reportuje ako HOBBYTEC s markerom `G → H`; actual company ostáva GLENDEA.
- Ostatné leady company `2` sa reportujú ako GLENDEA.
- Leadová kohorta používa `crm.lead.create_date`.
- Konverzná udalosť používa `crm.lead.date_conversion`.
- Relevantný predaj v existujúcom projekte používa stav `sale` alebo `hbt_control_fc`, prijatú úhradu a `amount_untaxed`.
- Presné Studio pole povedomia je `x_studio_zskan_povedomie`.
- Produkt a kategória sú `x_studio_marketing_lead_product` a `x_studio_marketing_lead_category`.

## CRM lead

| Pole | Typ / vzťah | Význam | Dostupnosť | Použitie | Riziko / fallback |
|---|---|---|---|---|---|
| `id` | integer | CRM identifikátor | potvrdené | detail, deduplikácia | žiadne |
| `create_date` | datetime | prijatie leadu | potvrdené | kohorta | nemiešať s event dátumom |
| `write_date` | datetime | posledná zmena | na overenie endpointom | inkrementálna sync | nie je business event |
| `active` | boolean | archivačný príznak | schéma sa audituje | lifecycle vstup | `false` neznamená automaticky lost |
| `company_id` | many2one | actual company | potvrdené | atribúcia | kombinovať s tagom 33 |
| `tag_ids` | many2many | CRM tagy | potvrdené | cross-company | tag 33 musí zostať explicitný |
| `stage_id` | many2one | aktuálne CRM štádium | potvrdené | pipeline | stage sa môže historicky meniť |
| `user_id` | many2one | obchodník | na overenie | filter a výkon | prístupové pravidlá |
| `partner_id` | many2one | kontakt | na overenie | adresa, identity | zdieľanie medzi companies |
| `probability` | float | pravdepodobnosť | na overenie | lifecycle signál | nie samostatná won definícia |
| `date_conversion` | datetime | konverzný dátum | potvrdené | converted KPI | nie je potvrdený predaj |
| `date_closed` | datetime | uzavretie | na overenie | event dátum | význam závisí od won/lost |
| `lost_reason_id` | many2one | dôvod straty | na overenie | LOST | môže chýbať na archivovaných |
| `order_ids` | one2many | objednávky | potvrdené v schéme | relationship graph | načítať orders samostatne |
| `source_id` | many2one | marketingový zdroj | potvrdené | atribúcia | vysoký podiel prázdnych hodnôt treba merať |
| `medium_id` | many2one | médium | potvrdené | atribúcia | voliteľné |
| `campaign_id` | many2one | UTM kampaň | potvrdené | atribúcia | voliteľné |
| `x_studio_zskan_povedomie` | selection | získané povedomie | potvrdené | atribúcia/filter | technický názov obsahuje `zskan` |
| `x_studio_marketing_lead_product` | text | marketingový produkt | potvrdené | produktová dimenzia | historicky veľmi nízka vyplnenosť |
| `x_studio_marketing_lead_category` | selection | marketingová kategória | potvrdené | kategória | historicky veľmi nízka vyplnenosť |
| `street`, `street2`, `city`, `zip`, `state_id`, `country_id` | adresa | lead adresa | audit prebieha | geografická vrstva | fallback na partnera |

Produkčné overenie obdobia 2025-08-01 až 2026-06-30 ukázalo 1 872 leadov, z ktorých iba jeden mal použiteľný marketingový produkt a kategóriu. Preto sa v tejto etape nevykonáva fuzzy alebo domyslené párovanie.

## Sale order

| Pole | Význam | Stav | Riziko / fallback |
|---|---|---|---|
| `opportunity_id` | väzba na lead | potvrdené v existujúcej integrácii | objednávky bez leadu evidovať samostatne |
| `state` | quote/sale stav | potvrdené, finálna taxonómia čaká na audit | nerozlišovať iba podľa názvu |
| `amount_untaxed` | suma bez DPH | potvrdené | deduplikovať podľa order ID |
| `create_date`, `date_order` | časové dimenzie | audit | quote created ≠ sale confirmed |
| `sale_order_template_id` | obchodná šablóna | audit | nie je marketingový produkt |
| `x_studio_datum_prijatia_uhrady` | prijatá úhrada | potvrdené ako primárny field | starší kandidát `x_studio_datum_prijatia_platby` v aktuálnej schéme neexistuje |

## Partner a geografické fallbacky

Preferované poradie adresy leadu:

1. adresa na `crm.lead`,
2. adresa `crm.lead.partner_id`,
3. overený customer/shipping kontakt.

Normalizovaný výstup musí obsahovať `postcode`, `city`, `district`, `region`, `country`, `address_source`, `address_confidence` a príznak neúplnosti. Online geokódovanie nie je schválené.

## Project task / zamerania

Produkčný `fields_get` potvrdil dostupnosť:

- projekty `2` a `18` spolu s company,
- `sale_order_id`,
- `x_studio_sale_order_zamer`,
- `hbt_shipping_partner_id`,
- task stage a ukončenie.

Treba ešte overiť reálne väzby, vyplnenosť a deduplikačné kardinality. Dovtedy
metriky zameraní zostávajú v stave „pripravuje sa“.

## Produkčný fields_get výsledok

Audit 24. 7. 2026:

- `crm.lead`: 33/33 požadovaných polí dostupných,
- `res.partner`: 11/11,
- `sale.order`: 11/12; chýba iba nepoužívaný starší kandidát `x_studio_datum_prijatia_platby`,
- `sale.order.template`: 4/4,
- `project.task`: 10/10.

## Produkčné overenie CRM analytiky

Overenie nasadenia 24. 7. 2026 pre kohortu `2026-07-01` až `2026-07-31`:

- 705 prijatých leadov,
- reporting HOBBYTEC 498, reporting GLENDEA 207,
- 536 s `date_conversion`,
- lifecycle: 400 `CONVERTED`, 178 `LOST`, 121 `ACTIVE`, 5 `WON`,
  1 `UNKNOWN`, 0 `ARCHIVED_OTHER`,
- zdroj vyplnený 669/705 (94,9 %),
- získané povedomie 11/705 (1,6 %),
- marketingový produkt 299/705 (42,4 %),
- marketingová kategória 209/705 (29,6 %).

Načítanie používa `active_test=false`; archivované záznamy preto zostávajú v
kohorte. Presné rozdelenie boolean poľa `active` vracia API v `loaded_counts`.
Lifecycle je implementovaný vo verzii `2.0.0`; algoritmus a otvorené významové
otázky sú v [MARKETING_LIFECYCLE.md](MARKETING_LIFECYCLE.md).

Otvorené zostávajú samostatné spoľahlivé event dátumy WON a LOST. `date_closed`
sa bez ďalšieho potvrdenia nepoužíva ako univerzálny dátum oboch udalostí.

## Diagnostické endpointy

- `/api/marketing/schema` – dostupné marketingové a Studio polia `crm.lead`.
- `/api/marketing/audit` – bezpečný `fields_get` audit piatich modelov; bez record values a PII.
