Postavené na overených technológiách
Contineo spája sémantické vyhľadávanie (RAG) nad vaším obsahom s jazykovým modelom, ktorý odpovedá výhradne z overených zdrojov — s citáciou a verziou.
Príklady na tejto stránke (úseky, metadáta, dotazy) vychádzajú z generickej firmy. Contineo je doménovo univerzálne — „predpis“ je len jeden druh dokumentu a „jednotka“ len jeden druh organizácie. Konkrétne nasadenie do veľkej organizácie nájdete v prípadovej štúdii nižšie.
Architektúra a dátový tok
Zdroje → spracovanie (chunking + značkovanie) → MongoDB (jadro: hybridné vyhľadávanie) → AI adaptéry (embedding, rerank, generovanie) → kanály. Jadro je prenositeľné — $rankFusion je aj v Community 8.2, takže ten istý dotaz má bežať v oboch režimoch; dnes beží cloudová vetva. Líšia sa len tri adaptéry, ktoré sa vyberajú konfiguráciou tenanta. AI dostane vždy len relevantné pasáže; dáta zostávajú vo vašej databáze. Spätné cykly sú dva: ľudská kurácia — overená odpoveď sa vracia do indexu — a eskalácia na ticket helpdesku, z ktorého otázky vedú k doplneniu manuálov.
Kľúčové piliere
RAG + Hybrid Search
Hybridné vyhľadávanie $rankFusion (vektor 60 % + fulltext 40 %) je jadro systému a beží identicky v MongoDB Atlas aj v self-hosted Community 8.2. Odpoveď vzniká výhradne z nájdených pasáží.
Vymeniteľné AI adaptéry
Embedding, rerank a generovanie sú tri nezávislé adaptéry vyberané konfiguráciou tenanta, nie kódom. Cloud: Voyage a Claude. On-prem: Infinity alebo TEI a vLLM s modelom podľa vášho výberu (Qwen3, EuroLLM, Gemma).
Citácie a znenia k dňu
Hľadá sa len v zneniach platných k dňu otázky; počítajú sa zo znení dokumentu, nie z príznaku na úseku. Novela zverejnená vopred sa do odpovedí dostane až dňom účinnosti, nahradené znenie zostáva pre otázky k minulému dátumu. Pri každom zdroji je znenie a jeho účinnosť.
Členenie zo štruktúry Markdownu
Všetky texty v Contineo sú Markdown — nahratý súbor, prevod PDF aj text z editora. Prvý rez úsekov ide zo štruktúry, ktorú text už nesie: nadpisy podľa úrovne, číslovanie, „Článok 5“, „§ 5“; dlhá časť sa delí medzi odsekmi, tabuľka ani zoznam sa nerozdelia. Nastavenia ani profily členenia nie sú — každý dokument je iný. Ručné hranice pri znení majú prednosť a každý úsek nesie cestu „dokument › nadpisy“ do citácie.
AI ako nastavenie organizácie
Organizácia si môže zadať vlastný kľúč a vybrať modely pre odpovede, úpravu otázky a prepis skenov. Kľúč je uložený zašifrovaný. Každé volanie sa zapíše do prehľadu spotreby s tokenmi a odhadom ceny — bez znenia otázky.
Multi-tenant a bezpečnosť
Každá organizácia je samostatný tenant na vlastnej doméne a vidí výhradne vlastný obsah — verejný vidia všetci jej prihlásení, interný len jej príslušníci. Zdieľanie v hierarchii (centrála → regionálne → lokálne jednotky) pripravujeme. Audit pri každej zmene znalostí.
Zdroje obsahu (register zdrojov)
Odkiaľ organizácia berie obsah, je jeden register v jej nastavení — každý zdroj má druh, ktorý určuje, čo vie. Súbory: nahratý DOCX, PDF, XLSX, Markdown, TXT alebo CSV, prevod beží u nás a všetko končí v jednom indexe. Schránka helpdesku: otázky číta analýza a navrhuje doplnenie manuálov. MCP konektor: import článkov do knižnice ako koncepty, ktoré prejdú schválením, živý zdroj pri otázke s vlastným štítkom v citácii, nástroje agenta. Web a RSS: sledovaná adresa alebo feed, ktorú crawler číta a z nej aktualizuje index alebo odoberá do knižnice. Dnes Slov-Lex — zákony a vyhlášky držíme v katalógu legislatívy raz pre všetky organizácie, organizácia si vyberie predpisy, asistent z nich odpovedá v znení účinnom v deň otázky s odkazom na paragraf, a do knižnice ich odoberie aj so záväzným PDF; novela príde sama ako koncept nového znenia. Crawler pre ďalšie weby vzniká podľa stavby stránky; crawler pre RSS pripravujeme. Zdroj identity poskytuje identitu, nie obsah.
Kanály: widget a portál
Kanál je rozhranie, cez ktoré obsah organizácie ide k ľuďom. Widget sa vloží do cudzej stránky namiesto vyhľadávania: vždy asistent, voliteľne tickety a schránka helpdesku na Microsoft 365 — e-mail je ticket, eskalácia z asistenta tiež; riešiteľ dostane návrh odpovede len z verejného obsahu, upraví ho, odošle zo schránky kanála nikdy sa neodpovedá automaticky. Otázky z helpdesku číta analýza, ktorá navrhne doplnenie manuálov. Portál je knižnica; články a formuláre pripravujeme. Každý kanál má vlastný obsah (priečinky knižnice), riešiteľov a jazyky.
Kontrola kvality a kurácia
Nejde o strojové učenie modelu, ale o ľudskú kuráciu: správca ohodnotí a schváli odpoveď, tá sa uloží ako overená odpoveď a embeduje späť. Nová overená odpoveď nikdy potichu neprepíše schválený predpis.
Hierarchia a záväznosť dokumentov
Každý druh dokumentu má úlohu: záväzný (zákon, stanovy, poriadok, smernica — mení ho len orgán novým schváleným znením), výkladový (manuál, metodický pokyn — dopĺňa správca obsahu) alebo záznam (zápisnica, zmluva, tlačivo). Poradie záväznosti je zákon › stanovy › poriadok › smernica › manuál. Dokument má jedného alebo viac nadradených; cyklus sa uložiť nedá.
Kontrola súladu
Kontrola je zadanie: čo sa kontroluje, proti čomu (bez výberu proti záväzným nadradeným) a pre ktorý kanál. Beh je kolo — spustí sa až po rekapitulácii s odhadom ceny, dá sa zastaviť, druhé kolo počas behu nie. Nález má citovaný článok normy so zvýraznenými odsekmi a dve rozhodnutia: Ponechať existujúce znenie s dôvodom, alebo Prijať odporúčanie — nové znenie sa zapíše do konceptu, nikdy do zverejneného. Ponechané rozhodnutia si ďalšia kontrola pamätá. Nové znenie záväzného dokumentu založí požiadavku na kontrolu podradených. Z otázok helpdesku kontrola navrhne doplnenie manuálu, upresnenie alebo podnet pre legislatívu.
Contineo ako MCP server
Opačný smer než konektory: človek pracuje vo svojom AI asistentovi (Claude Code, Claude.ai a ďalší) a ten za neho číta knižnicu na adrese organizácie /mcp. Token vydáva Contineo samo (OAuth 2.1, PKCE); súhlas je dôkazný záznam s doslovným znením, odvolateľný v plachte účtu. Nástroje sú prienik rolí osoby a rozsahov tokenu, fáza 1 len číta: hľadanie, dokument, hierarchia, otázka asistentovi — vo vybraných zdrojoch (knižnica, legislatíva, konektory), odoberané predpisy a ich znenia. Server nikdy nezverejní znenie, nepotvrdí normu ani neodošle správu. Predvolene vypnuté; v on-prem a air-gap sa zapnúť nedá.
Kľúčové dátové toky
Odpovedanie (RAG + Hybrid)
Dotaz sa klasifikuje (fulltext / vector / hybrid). $rankFusion zlúči $vectorSearch a $search — identicky v oboch režimoch. Rerank a generovanie potom obslúži adaptér podľa profilu tenanta: v cloude $rerank v databáze a Claude API, on-prem Infinity a vLLM. Zdroje si človek vyberie pred otázkou z registra — Knižnica, Legislatíva, konektory; hlavička odpovede povie, v čom sa hľadalo. Zverejnený dokument knižnice má prednosť pred katalógom legislatívy. Odpoveď ide streamingom s citáciou zdroja.
Otázka k dátumu a porovnanie znení
Z otázky sa rozpozná deň („k 1. 3. 2025“, „vlani“) a hľadá sa v zneniach platných vtedy; nad odpoveďou je štítok dňa. Otázka „čo sa zmenilo“ porovná dve znenia dokumentu po článkoch a cituje staré aj nové. Overené odpovede sa použijú len pri otázke na dnešok.
Z helpdesku do manuálov, nie do FAQ
Zoznam častých otázok je druhá kópia manuálu, ktorú treba po každej novele kontrolovať znova — preto v Contineu FAQ nie sú. Otázky z helpdesku (bez zápisu ich textu) číta analýza a navrhne doplnenie konkrétnej časti manuálu, upresnenie alebo podnet pre legislatívu; kurátor rozhodne a znenie ide do konceptu. Asistent potom odpovedá priamo z manuálu, s citáciou a znením.
Kvalita z prevádzky
Pri každej odpovedi sa zaznamená „sedí / nesedí“ od čitateľa a prípadný popis, čo bolo zle. Nepresné odpovede idú do fronty hodnotiteľa (`/evaluation`). Z asistenta aj z widgetu sa po dvoch negatívnych hodnoteniach dá otvoriť ticket helpdesku.
Kontrola kvality a kurácia
Nie strojové učenie, ale ľudská kurácia: hodnotiteľ prejde nahlásenú nepresnosť, overené znenie pripraví a správca obsahu ho zverejní — uloží sa do indexu ako samostatný úsek s prístupom odvodeným z najprísnejšieho zdroja. Overená odpoveď nikdy potichu neprepíše schválený predpis.
Hlavné kolekcie
Jadro RAG je kolekcia `document_chunks`. Úsek nesie odkaz na znenie (`versionId`); ktoré znenia platia, sa počíta z dokumentu, nie z úseku. Staré znenia ani staré členenia sa nemažú. Ticket je vlákno: ďalšia správa ho dopĺňa, zavretie je stav, nič sa nemaže.
document_chunks — jadro RAG
{
_id, documentId, versionId,
sourceType: "pdf", // pdf | md | web | scan | qa
// filtre pri hľadaní — všetky sú aj v oboch search indexoch
companyCode: "ACME", // organizácia; podmienka KAŽDÉHO dotazu
accessLevel: "internal", // public | internal
scope: "global", // global | company | region
language: "sk",
// content
articleRef: "čl. 4 ods. 2",
heading: "Práca z domu (home office)",
text: "Zamestnanec má nárok na home office...",
// identita vektorového priestoru
// vektor sa v dokumente NEUKLADÁ — pri Automated Embedding ho drží Atlas
embeddingModel: "voyage-4", // POVINNÉ — ktorý model vektor vyrobil
embeddingDim: 1024, // kontrola pri zápise aj čítaní
embeddingProvider: "atlas-auto", // atlas-auto | infinity | tei
embeddedAt: ISODate(), // pre plánovanie re-embedu
// znenie a členenie
// Účinnosť sa NEČÍTA z úseku — počíta sa zo znení dokumentu.
// Úsek nesie len odkaz na znenie, aby nevznikla druhá pravda.
superseded: false, // true = členenie nahradené preindexovaním
isActive: true // úsek patrí k práve zverejnenému členeniu
}tickets — helpdesk
{
companyCode: "ACME", // organizácia, podmienka každého dotazu
channelKey: "podpora", // kanál helpdesku: obsah, riešitelia, schránka, widget
source: "email", // email | chat (eskalácia z asistenta alebo widgetu)
state: "new", // new → drafted → sent → closed (→ reopened)
subject, conversationId, // vlákno = ticket; ďalšia správa ho dopĺňa
messages: [ { from, at, text } ],
requester: { email, name, personId },
draft, // návrh odpovede od asistenta, len z verejného obsahu
sentAnswer: { at, by, text } // odoslané e-mailom zo schránky kanála
// otázky zavretých ticketov číta analýza helpdesku → návrhy do manuálov (ADR-034)
}Hybridný vyhľadávací dotaz ($rankFusion)
Otázka v organizácii „ACME”, len znenia platné k dňu otázky. $rankFusion kombinuje vektorové a fulltextové vyhľadávanie — tento dotaz je identický v cloude aj on-prem. Rerank je samostatný krok mimo tohto dotazu: v cloude ako $rerank stage, on-prem cez Infinity nad výsledkom.
// Znenia platné k dňu otázky sa spočítajú vopred z kolekcie documents
// tým istým pravidlom, podľa ktorého sa predpis potvrdzuje a prideľuje.
// Bez platného znenia sa nehľadá vôbec — prázdny zoznam nie je „bez obmedzenia".
const validVersionIds = versionsInForceOn(askedDate, "ACME")
db.document_chunks.aggregate([
{ $rankFusion: {
input: {
pipelines: {
vector: [{ $vectorSearch: {
index: "rag_vector_index", // index viazaný na embeddingModel
path: "text", // Automated Embedding — vektor počíta databáza
query: queryText, // posiela sa TEXT otázky, nie vektor
numCandidates: 200, limit: 20,
filter: { companyCode: "ACME", // vždy prvá, zo session
versionId: { $in: validVersionIds },
superseded: false }
}}],
fulltext: [{ $search: {
index: "rag_text_index",
compound: { // filter je na OBOCH vetvách, nie len na vektorovej
must: [{ text: { query: queryText, path: "text" } }],
filter: [ /* companyCode, versionId, superseded */ ]
}
}}]
}
},
combination: { weights: { vector: 0.6, fulltext: 0.4 } }
}},
{ $limit: 20 },
{ $project: {
text: 1, heading: 1, articleRef: 1,
score: { $meta: "rankFusionScore" } // -> signál pre eskaláciu
}}
])
// Tento dotaz je identický v cloude aj on-prem.
// Rerank je samostatný krok MIMO neho, podľa profilu tenanta:
// cloud -> { $rerank: { index: "rag_rerank_index",
// query: queryText, limit: 8 } }
// sa pripojí ako ďalší stage (MongoDB Atlas 8.3+)
// on-prem -> POST /rerank na Infinity/TEI nad výsledkom vyššie
//
// Počet kandidátov na vstupe rerankera drž rovnaký (20),
// aby boli oba režimy porovnateľné na hodnoteniach z prevádzky.Vymeniteľné adaptéry a profil tenanta
Embedding, rerank aj generovanie sú tri nezávislé adaptéry. Ktorý sa použije, určuje záznam v kolekcii tenant_profiles — nie kód. Jedna inštalácia tak obslúži cloudového aj on-prem zákazníka súčasne, s rovnakým jadrom vyhľadávania.
tenant_profiles — voľba adaptérov
{
companyCode: "ACME", // kľúč, zhodný s chunkami
tier: "T1", // T1 shared | T2 enclave | T3 air-gap
dataResidency: "eu", // eu | on-prem | air-gap
providers: {
embedding: {
kind: "atlas-auto", // atlas-auto | infinity | tei
model: "voyage-4", dim: 1024,
index: "rag_vector_index"
},
rerank: {
kind: "atlas-stage", // atlas-stage | infinity | tei | none
model: "rerank-2", topK: 8
},
generation: {
kind: "anthropic", // anthropic | openai
model: "claude-sonnet-5",
citations: true, promptCaching: true
}
}
}
// Ten istý tenant v uzavretom režime — mení sa len profil:
// embedding: { kind: "infinity", model: "voyage-4-nano", dim: 1024 }
// rerank: { kind: "infinity", model: "BAAI/bge-reranker-v2-m3" }
// generation: { kind: "openai", url: "http://vllm:8000/v1",
// model: "Qwen3-8B", citations: false }Čo sa medzi režimami líši
Jadro je identické, ale úplná funkčná parita neexistuje. Toto sú rozdiely, s ktorými treba počítať pri výbere režimu.
| Schopnosť | Cloud | On-prem |
|---|---|---|
| $rankFusion hybridné vyhľadávanie | áno | áno — identické |
| Automatický embedding v databáze | áno | volá Voyage API — pre air-gap nepoužiteľné |
| $rerank priamo v pipeline | áno | nie — rerank v aplikačnej vrstve |
| Overiteľné citácie (Citations API) | áno | nie — citácie sa žiadajú promptom |
| Prompt caching | áno | prefix caching vo vLLM, iná sémantika |
| Dáta neopustia perimeter | nie | áno |
Vektory nie sú prenositeľné medzi modelmi — zmena embedding modelu znamená úplný re-embed korpusu. Rozhodnutie a jeho dôsledky sú zdokumentované v ADR-001.
Metadáta úseku
Každý úsek nesie tri veci: komu patrí (organizácia a prístup), z ktorého znenia je a kde v predpise leží (článok). Ručné kľúče sa nevypĺňajú — druh dokumentu sa vyberá z číselníka a ostatné sa odvodí.
Druh dokumentu (číselník organizácie)
| smernica | Smernica |
| poriadok | Poriadok |
| zapisnica | Zápisnica |
| zmluva | Zmluva |
| tlacivo | Tlačivo |
Prístup
- companyCode → organizácia; je v podmienke každého dotazu, nie v kontrole nad ním
- accessLevel: public → vidí každý prihlásený človek organizácie
- accessLevel: internal → vidia len ľudia, ktorým to rola dovoľuje
Príklady úsekov
// úsek smernice — článok a znenie idú do citácie
{ sourceType: "pdf", companyCode: "ACME", accessLevel: "internal",
versionId: "…", articleRef: "čl. 4 ods. 2", superseded: false }
// to isté znenie po preindexovaní — staré členenie ostáva, len sa nehľadá
{ sourceType: "pdf", companyCode: "ACME", accessLevel: "internal",
versionId: "…", articleRef: "čl. 4 ods. 2", superseded: true }
// overená odpoveď — nemá znenie, použije sa len pri otázke na dnešok
{ sourceType: "qa", companyCode: "ACME", accessLevel: "internal",
articleRef: null, isActive: true }Pravidlá, ktoré držia index pravdivý
- Organizácia ide do filtra ako prvá a bez výnimky; dotaz bez nej sa odmietne.
- Účinnosť sa číta zo znení dokumentu. Dátum na úseku by bol druhá pravda.
- Preindexovanie staré členenie nemaže — označí ho superseded a hľadanie ho preskočí.
- articleRef ide do citácie odpovede, preto sa pri predpisoch vypĺňa vždy.
Životný cyklus ticketu
Ticket vznikne z e-mailu do schránky kanála alebo eskaláciou z asistenta či widgetu a prechádza stavmi:
Integrácie
Schránka helpdesku — Microsoft 365
Kanál má schránku na Microsoft 365 pripojenú cez Microsoft Graph, zúženú na jednu schránku. Prichádzajúce e-maily sú tickety; história schránky sa dá vyťažiť na návrhy doplnenia manuálov bez zápisu textu otázok. IMAP pre iné služby pripravujeme.
Zdroj identity a CRM — pripravujeme
Dnes: prihlásenie e-mailovým odkazom, cez Microsoft Entra ID alebo Google Workspace; osoba sa založí z domény povolenej organizáciou. Napojenie na členské CRM ako zdroj pravdy o osobách a jednotkách (v športe sportnet.online) pripravujeme; Contineo má vlastnú databázu a nezapisuje späť.
Web a RSS — sledované adresy a feedy
Web je adresa, ktorú Contineo stráži; RSS je feed, ktorý stráži. Z oboch sa aktualizuje index pre odpovede a voliteľne sa obsah odoberá do knižnice ako koncept — stiahnutý text, ktorý sa zmenil sám od seba, nikto neschválil, preto každá zmena ide schválením. Crawler je len čítačka: číta a parsuje obsah sledovanej adresy alebo feedu; každý web potrebuje crawler podľa svojej stavby. Prvý sledovaný web je Slov-Lex s crawlerom statického portálu; crawler pre RSS pripravujeme.
MCP konektory — živý zdroj
Organizácia sa pripojí k MCP serveru (prvý je dokumentácia Sportnetu a ISSF) cez OAuth; tokeny sú uložené šifrované. Predvolene sa pri otázke hľadá len v knižnici; konektor si človek zapne pilulkou pod otázkou, alebo ho správca nastaví ako predvolený. Vtedy sa hľadá súbežne v knižnici aj na serveri, úseky zo servera sa pripoja za knižnicu a citácia z neho nesie štítok „živý zdroj — neoverené kurátorom“. Keď server nestihne, odpoveď príde bez neho. Prístupová úroveň je vlastnosť konektora: interný sa do návrhov e-mailov ani do widgetu nedostane. Rozsah servera sa vyberá per kanál a každé volanie má stopu bez znenia otázky. Druhé použitie je import: kurátor vyhľadá články na serveri a uloží ich ako koncepty dokumentov s PDF; ďalej idú bežným schválením a dokument si pamätá zdroj, takže sa dá skontrolovať, či sa článok na serveri zmenil. Nástroje asistenta (model volá server sám) pripravujeme.
Contineo ako MCP server
AI asistent človeka (Claude Code, Claude.ai, vlastný agent) sa pripojí na https://<doména organizácie>/mcp. Contineo je chránený zdroj aj autorizačný server: človek sa prihlási ako na webe, odsúhlasí rozsahy a súhlas sa uloží ako dôkazný záznam. Token platí hodinu, obnovovací 30 dní; ukladá sa len jeho odtlačok. Nástroje fázy 1: whoami, list_sources, search_library, list_documents, get_document, document_hierarchy, list_law_acts, get_law_act a ask (strop 60 za hodinu); search_library a ask berú zdroje z registra. Strop úsekov pre každý zdroj nastaví organizácia. Prihlásenie funguje aj z Claude Code (návrat na loopback). Správca osôb vidí pripojené aplikácie všetkých a smie odpojiť komukoľvek; organizácia môže obmedziť MCP na verejný obsah. Koncepty a kontrola súladu cez MCP pripravujeme.
Legislatíva — katalóg zo Slov-Lexu
Predpisy zo Slov-Lexu sú v jednom katalógu platformy (úradné dielo, jedna kópia pre všetky organizácie): všetky znenia z histórie aj vyhlásené vopred, § ako úsek, rovnaký embedding ako knižnica. Organizácia si v Zdroje → Web / RSS → Slov-Lex vyberie predpisy adresou, číslom alebo z ponuky pre športovú organizáciu; odvtedy je Legislatíva zdroj na Opýtať sa so štítkom Zákon a odkazom na paragraf. Odber do knižnice vezme text z katalógu a zo Slov-Lexu už len záväzné PDF; zverejnený dokument má pri odpovedi prednosť. Denný cron dopĺňa znenia a pre dokumenty knižníc zakladá koncepty nových znení s upozornením správcom.
Bezpečnosť a prevádzka
- Prístup podľa príslušnosti k organizácii: verejný obsah vidí každý prihlásený, interný len ľudia danej organizácie. Kto smie nahrávať obsah, sa povoľuje ručne. Audit pri každej zmene znalostí.
- Prihlásenie e-mailovým odkazom alebo cez SSO: Microsoft Entra ID a Google Workspace. Bez prihlásenia sa dnes k obsahu nedostanete — verejný anonymný režim pripravujeme.
- Citácia verzie v každej odpovedi a archivácia starých verzií predpisov.
- Monitoring kvality: skóre vyhľadávania, hodnotenia „sedí / nesedí“ a nahlásené nepresnosti — kvalita sa meria z prevádzky, nie z testovacej sady.
- Multi-tenant: každá organizácia je oddelený priestor a vidí len vlastný obsah — aj ten verejný. Zdieľanie v hierarchii (centrála → regionálne → lokálne jednotky) pripravujeme.
- Súkromie dát: obsah ostáva vo vašej databáze a úložisku; AI odpovedá výhradne z vášho obsahu (RAG), verejná spotrebiteľská AI sa nepoužíva.
- Voľba prevádzkového režimu na úrovni tenanta: cloud (EU rezidencia dát; neuchovávanie u poskytovateľov AI potvrdzujeme zmluvne) alebo plne on-prem — obsah ani dotazy neopustia vašu infraštruktúru. Jedna inštalácia obslúži oba typy zákazníkov súčasne.
- Kľúč k AI a modely si môže organizácia nastaviť sama; kľúč sa ukladá zašifrovaný. Každé volanie AI sa zapíše do prehľadu spotreby — bez znenia otázky, ktorá môže obsahovať osobné údaje.
- Výsledok z MCP konektora je pre model obsah, nie pokyn. Profil servera odstráni z odpovede to, čo tam nepatrí — pri Sportnete blok s profilom prihlásenej osoby a pokynmi pre model.
- Contineo ako MCP server vydáva token samo; súhlas je dôkazný záznam, ukladá sa odtlačok tokenu, nie token. Nástroje nikdy nezverejnia znenie, nepotvrdia normu, neodošlú správu ani nespustia platený beh. V on-prem a air-gap sa server zapnúť nedá.
- Dôkazné záznamy (potvrdenia, pridelenia, schválenia) sa nemenia ani nemažú. Oprava je nový záznam, odvolanie má dôvod a autora.
Identita a riadenie prístupu
Prihlásenie cez existujúce SSO; prístupové právo je povinný filter odvodený zo session a aplikovaný na obe vetvy hybridného vyhľadávania ($vectorSearch aj $search).
Poskytovatelia identity (NextAuth) → jedna kanonická session
| E-mailový odkaz | prihlásenie bez hesla; používa sa aj na pozvánky |
| Microsoft Entra ID | SSO pre firemné účty zamestnancov |
| Google Workspace | SSO (alternatíva) |
| CRM / zdroj členstiev — pripravujeme | napr. sportnet.online: zdroj pravdy o osobách a jednotkách, mapovanie na companyCode, roly a skupiny |
Princípy bezpečnosti
- Server-side only — filter sa skladá zo session, nikdy z parametrov klienta.
- Default-deny — čo nie je výslovne povolené, sa nevráti; bez identity len verejný obsah.
- Filter pred LLM — model vidí len povolené chunky; nedá sa obísť promptom (platí aj pre citácie).
- Auto-provisioning — osoba sa založí pri prvom prihlásení cez SSO z domény povolenej organizáciou. Priebežnú synchronizáciu rolí z CRM pripravujeme.
Dva typy kanála
Portál (interný, SSO)
prihlásený človek vidí verejný aj interný obsah svojej organizácie — knižnica, asistent, potvrdzovanie, vzdelávanie. Články a formuláre pre portál pripravujeme.
Widget s podpísanou identitou
cudzí systém (prvý je ISSF) odovzdá identitu používateľa podpísaným tokenom; widget odpovedá z obsahu kanála a po dvoch negatívnych hodnoteniach otvorí ticket. Osoba z tokenu sa do intranetu neprihlási. Anonymný verejný režim pripravujeme.
Nasadenie vo veľkej organizácii — športový zväz (SFZ)
Contineo je doménovo univerzálne. Takto vyzerá jedno reálne nasadenie do veľkej organizácie — Slovenského futbalového zväzu a jeho podriadených zväzov.
- Tenant model: SFZ, regionálne a oblastné zväzy ako samostatné organizácie s vlastným obsahom; zdieľanie noriem zhora nadol pripravujeme.
- Obsah: súťažné a prestupové poriadky, rozpisy súťaží, smernice, manuály ISSF (doplňované z otázok helpdesku).
- Identita: prihlásenie e-mailovým odkazom, cez Microsoft Entra ID alebo Google Workspace; osoby naimportované zo zoznamu a pozvané e-mailom, roly sa prideľujú v aplikácii. Napojenie na sportnet.online ako zdroj členstiev je ďalší krok.
- Potvrdzovanie overené naostro: pridelenie osobe, oddeleniu aj trase, výzva e-mailom, potvrdenie z počítača aj z telefónu a výkaz pre personálne oddelenie.
- Vzdelávanie: kurzy, testy a certifikáty s overením cez QR kód.
- Príklad otázky: „Môže hráč nastúpiť v dvoch stretnutiach za jeden deň?“ → odpoveď s citáciou § a verzie.