Architektúra

A fejezet a rendszer 1.1.0 verziójának forráskódban dokumentált működését ismerteti.

Architektúra

A fejezet a rendszer 1.1.0 verziójának forráskódban dokumentált működését ismerteti.

Forrás szerinti műszaki részletek

18.1 Architektúra

• Külön **áruház (store / aldomain)**, saját adatszoba-témával; a mappák és dokumentumok áruházhoz rendelhetők

(`oc4023_doc_share_to_store`, `oc4023_doc_to_store`), a portál csak a saját áruháza tartalmát mutatja.

• Portál-controller **[portál]** `document/document` (+ a téma kliens-oldali felülete); a jogkulcsok a `document/dataroom`

route-on élnek.

• Szolgáltatások: adatszoba-jog (3 réteg egy döntési pontban), adatszoba-hozzáférés (jogképzés, levelek), szerződés-az-adatszobában

(állapot, felmondási kérelem), vízjel, vízjeles kiadás (csomag), dokumentumtár.

18.2 Belépés, fiók, jelszó

• Belépés a keretrendszer felhasználó-törzsével (`oc4023_user`: felhasználónév + jelszó, aktív user). „Maradjak bejelentkezve":

30 napos tartós token (hash a `oc4023_doc_portal_token`-ben; süti `secure`, `httponly`, `SameSite=Lax`). Kilépéskor a token

törlődik. Próbálkozás-korlát nincs.

• **Aktiváló / meghívó link:** egyszer használatos, 7 napig érvényes (`oc4023_user_invite`, SHA-256 hash); saját jelszó

(legalább 8 karakter, megerősítéssel), utána automatikus belépés. Az adatszoba-áruházban a téma saját jelszó-oldalára fordítja.

• **Elfelejtett jelszó:** felhasználónév vagy e-mail → 2 órás, egyszer használatos link.

• Minden kérésnél újraellenőrzi, hogy a user aktív-e.

18.3 Felhasználási feltételek elfogadása (consent)

• A téma beállítása (Megjelenés → Témák → adatszoba-téma: „Jogi és kapcsolati oldalak", „Feltételek elfogadása kötelező") a

konfigurációba teszi: a feltétel forrása (`information:ID` vagy `cms:ID`), a szöveg **összes nyelvének hash-e** (változat), az

elfogadó oldal címe.

• Bekapcsolva belépés után a szoba helyett az elfogadó oldal jön; kiírja, **ki nyilatkozik** (a belépett user neve,

felhasználóneve, e-mail címe — csak a saját adata). **Elfogadás nélkül egyetlen szoba-végpont sem ad adatot.**

• Rögzítés: `oc4023_doc_room_consent` (user, áruház, forrás, hash, nyelv, IP, böngésző, időpont). A szöveg módosulása új

változat → újra el kell fogadni. Az admin a User formon „Újra el kell fogadnia" gombbal visszavonhatja (jog: `user/user` +

`consentreset`): a sor nem törlődik, `revoked_at` / `revoked_by` kerül rá.

• Az első vízjeles letöltés / megosztás előtt (munkamenetenként egyszer) figyelmeztetés: csak vízjeles példány tölthető le, a

letöltés naplózott, a továbbadásért a user felel.

18.4 Három rétegű jog

1. **Fiók és mappa:** aktív user, élő mappa (`status = 1`, a mappa tól–ig ablaka), a user mappa-hozzárendelésének ablaka

(`oc4023_doc_share_user.date_start` / `date_expire`), áruház-egyezés.

2. **Funkció:** a `document/dataroom` route kulcsai a userre kiosztva (`oc4023_user_feature`, a saját tól–ig ablakkal; User →

Permission, előfizetés vagy szerződés). **A funkciót a USER kapja, nem a mappa**; a `doc_share_user.functions` oszlop megmaradt,

de nem olvasott.

3. **Tartalom:** a dokumentum a mappa tagja (vagy almappájáé), aktív, és a user cég-hatókörébe esik.

`view` nélkül semmi (a többi funkció sem érvényes). A „letölthető" jelzők az adatszobában nem zárnak — a letöltés a user funkciója,

mindig vízjellel. Kivétel: online Drive-szerkesztés (táblázat / szöveg) továbbra is a jelzőkhöz kötött.

**Adatszoba-funkciók:**

Kulcs · Jelentés

`view` · dokumentumok megtekintése (vízjeles nézet)

`download` · vízjeles letöltés

`share` · megosztás a készülékről (vízjeles fájlok a készülék megosztó menüjébe)

`upload` · fájl feltöltése mappába

`folder` · almappa létrehozása

`rename` · mappa / fájl átnevezése

`delete` · fájl eltávolítása a mappából

`broker` · közvetítői hozzáférés (szerződésből kapott)

`terminate` · saját közvetítői szerződés felmondásának kezdeményezése (szerződés-szintű, nem mappa-szintű)

Hozzáférés-ellenőrzés időszakosan is: Bővítmények → a bővítmény → Dokumentumok: „Adatszoba hozzáférés-ellenőrzés" (ki / 1 / 5 /

10 / 15 / 30 perc, alap 5); a nyitott mappa lejártakor üzenet és visszalépés a kezdőlapra. A szerveroldali kapu ettől függetlenül

minden kérésnél dönt.

18.5 Mappa-hozzáférés forrásai (`oc4023_doc_share_user.source`)

Forrás · Ki írja · `source_ref`

`manual` · Mappák (Folders) képernyő vagy User form → „Megosztott mappák" (`user/user.shareadd`, jog: `shares`) · 0

`contract` · közvetítői szerződés szinkronja (5.4) · `contract_property_id`

`registration` · érdeklődő hozzáférése (6.3) · regisztrációs sor azonosító

20.1 A három réteg

1. **Core route-jog** (a keretrendszer `access` / `modify` joga a route-ra). Az új modul route-ját a telepítő a super admin

csoportnak a lemezről felderítve adja meg.

2. **Funkciójog** (`canAction(route, kulcs)`, a modell hívása ELŐTT): a funkció-törzs (`oc4023_feature`) és az egyetlen

hozzárendelés (`oc4023_user_feature`, forrás: `manual`, `subscription`, `order`, `role`). A létrehozás és a módosítás két külön

jog (`canSave(route, id)`: 0 → `add`, > 0 → `edit`). Megjelenítés: csak a kiosztott funkció látszik; `visible` mód = előfizetési

ajánló, `usable` = használható. Super admin mindig.

3. **Tartalmi scope:** a cég-hatókör (`getAllowedScopeValues('company', 'company_id')`, null = korlátlan). A szerződés a

`company_client_id`-ra szűr (`contractInScope`, `ownerInScope`); a számla-befogadás a Megbízóra is; a regisztráció

hozzáférése a sor szerződésének clientjére; a sablonok, okok, jogcímek, tevékenységek közös törzsek (nincs scope); az adatszoba

a mappa-hozzárendelésre + áruházra + dokumentum-cégre; a „Szerződéseim" a közvetítő-személyre.

20.2 Funkciókulcsok route-onként

Route · Kulcsok (besorolás)

`contract/contract` · `list`, `add`, `edit`, `delete`, `debug`, `fxrecalc` (régiek); `grantaccess` adatszoba-jog képzése (BASE); `generate` szerződés generálása (BASE); `amend` (BASE); `terminate` (BASE); `certificate` (BASE); `invoicereceive` számla befogadása (BASE, + core modify); `statusdelete` (BASE, katalógusban; a controller nem ellenőrzi)

`contract/contracttemplate` · `list`, `add`, `edit`, `statusdelete`, `delete`, `debug` (BASE)

`contract/contractaction` · `list`, `add`, `edit`, `statusdelete`, `delete`, `accept`, `reject`, `generate`, `debug`, `offeraccept`, `offerreject`, `offerwithdraw`, `roomaccess` (BASE). A módosítás / felmondás / igazolás a `contract/contract` saját kulcsát kéri; a regisztráció, melléklet, ajánlat a saját `generate`-jét.

`contract/termreason` · `list`, `add`, `edit`, `statusdelete`, `delete`, `debug` (BASE)

`contract/rejectreason` · ugyanez (BASE)

`contract/brokeractivity` · ugyanez (BASE)

`contract/esign` · `list` (állapot), `send` (kiküldés, újraküldés, jegyzőkönyv), `cancel`, `settings` (BASE)

`document/dataroom` · `view`, `download`, `share`, `upload`, `folder`, `rename`, `delete`, `broker`, `terminate` (BASE)

`document/issuelog` · `list`, `debug` (SYSTEM)

`document/folders` · `issue` vízjeles csomag kiadása mappa-usernek (SYSTEM), `download` (SYSTEM), + a modul saját kulcsai

`report/roomactivity` · `list`, `debug` (SYSTEM)

`user/user` · `shares` megosztott mappák a user formon (BASE), `consentreset` feltételek újra-elfogadtatása (BASE)

`masterdata/property` · `brokerend` kivétel a közvetítésből (BASE), `map`, `export` (SYSTEM)

`realestate/advert` · `list`, `add`, `edit`, `statusdelete`, `delete`, `debug` (BASE)

`masterdata/roomtype` · `list`, `add`, `edit`, `statusdelete`, `delete`, `debug` (BASE)

A kulcsok a migrációkban `INSERT IGNORE`-ral kerülnek a funkció-törzsbe és a jog-katalógusba (ismételve hatástalan).

Tulajdonos modellek: a szerződés minden táblájának **egyetlen írója** az admin `contract/contract` modell; catalog-oldalon vékony

adapterek (`contract/brokerage` — adatszoba, `contract/esign` — aláíró oldal, `contract/expiry` — lejárati tájékoztató,

`contract/passthrough`). A sablonoké a `contract/contracttemplate`, az okoké a `contract/termreason`, a jogcímeké a

`contract/rejectreason`, a tevékenységeké a `contract/brokeractivity` modell. A dokumentum- és megosztási táblák a dokumentum-

modul, a személy-táblák a személy-törzs, az ingatlan-táblák az ingatlan-törzs, a hirdetés-táblák a hirdetés-modul tulajdonai.

Idegen kulcs (FK) adatbázis-szinten csak a doc / megosztás tábláknál van; a többi kapcsolat logikai.

21.1 Szerződés-táblák

Tábla · Kulcs · Fontos oszlopok · Kapcsolatok

`oc4023_contract` · `contract_id` · `company_client_id`, `contract_no`, `subject`, `main_type`, `sub_type`, `direction`, `customer_id`, `supplier_id`, `currency_code`, `contract_value`, `currency_value`, `date_period_from/to`, `duration_type`, `auto_renew`, `renew_unit/value`, `auto_terminate`, `ordinary_termination`, `notice_days`, `notice_deadline_days`, `certification_required`, `settlement_mode`, `price_form`, `settlement_period`, `payment_method`, `paymenttype_id`, `payment_term_days`, `payment_timing`, `fx_rate_method/source`, `billing_*`, `auto_invoice`, `cron_enabled`, `status`, `note`, `property_id`, `passthrough_*`; **új:** `client_bank_account`, `partner_bank_account`, `expiry_notice_days` (15), `expiry_clause`, `expiry_notice_date`, `esign_status`, `esign_date`, `date_signed` · client, vevő, szállító → `oc4023_company`

`oc4023_contract_description` · (`contract_id`, `language_id`) · `title`, `description`, `body` (a szerződés szövege), `template_id` · → contract, language

`oc4023_contract_parties` · `contract_party_id` · `company_id`, `contact_id`, `role`, `is_primary`, `sort_order`, `status`, `bank_account` · → contract, company

`oc4023_contract_person` · `contract_person_id`; egyedi (`contract_id`, `person_id`) · `company_id`, `person_id`, `role`, `is_contact`, `dataroom` (alap 1), `contact_phone_ref`, `contact_email_ref`, `sort_order` · → contract, company, person, person_object

`oc4023_contract_item` · `contract_item_id` · `product_id`, `service_id`, `item_kind`, `name`, `unit`, `unit_price`, `vat_rate`, `planned_qty`, `is_optional`, `status`, `commission_rate` … · → contract

`oc4023_contract_property` · `contract_property_id` · lásd 5.1 · → contract, property, doc_share

`oc4023_contract_term_reason` (+ `_description`: `name`, `legal_text`) · `term_reason_id` · `code`, `main_type`, `sub_type`, `default_clause`, `is_starter`, `sort_order`, `status` ·

`oc4023_contract_term_reason_link` · egyedi (`contract_id`, `term_reason_id`) · `clause_ref`, `custom_text`, `sort_order` · → contract, term_reason

`oc4023_contract_event` · `contract_event_id` · `event_type` (`amendment`, `termination`), `event_no`, `date_event`, `date_effective`, `termination_type`, `terminating_party`, `reason_code`, `old_date_to`, `new_date_to`, `body`, `doc_body`, `template_id`, `language_id`, `doc_id`, `request_status` (`''`, `requested`, `processed`, `rejected`), `requested_by_user_id`, `processed_event_id`, `processed_by`, `date_processed` · → contract, doc

`oc4023_contract_event_reason` · `contract_event_reason_id` · `contract_event_id`, `term_reason_id`, `clause_ref`, `reason_name`, `reason_text`, `language_id` (pillanatkép) · → contract_event

`oc4023_contract_registration` · `contract_registration_id` · `contract_id`, `contract_property_id`, `registration_no`, `company_id`, `person_id`, `contact_phone_ref/email_ref`, `agent_name/taxhu`, `client_*` (régi pillanatkép), `property_text`, `deal_title`, dátumok, `activity_text`, régi ajánlat-oszlopok (`offered_price` …), `att_*`, `date_signed`, `decision` (`pending`, `accepted`, `rejected`, `partial`), `decision_date/note/by`, `template_id`, `language_id`, `body`, `doc_id`, `status` · → contract, company, person

`oc4023_contract_registration_advert` · egyedi (`contract_registration_id`, `advert_id`) · `contract_property_id`, `deal_type`, `decision`, `decision_*`, `reject_reason_id`, `reject_reason_name`, `reject_doc_id`, `duplicate_of`, `status` · → registration, advert, contract_property, reject_reason

Kapcsolódó témák: szerződés adatszoba dokumentáció