CRM Brokeraggio Yacht
Costruisci con AI Agent
Backend CRM per intermediazione di yacht

Modello Backend CRM per intermediazione di yacht
Flusso di lavoro per Broker, Acquirente, Imbarcazione, SeaTrial e BrokerNote

Un backend CRM per intermediazione di yacht pronto per la produzione su Back4app con classi Broker, Acquirente, Imbarcazione, SeaTrial e BrokerNote. Tieni traccia delle assegnazioni dei broker, delle preferenze degli acquirenti, delle inserzioni delle imbarcazioni e delle note sui test di galleggiamento con un prompt AI Agent per una configurazione rapida.

Conclusioni sulla mediazione

Questo modello ti fornisce un backend CRM per mediazione nautica con Broker, Acquirente, Imbarcazione, Prova in mare e Nota del broker, in modo che i broker possano guidare i clienti attraverso la revisione delle inserzioni, la programmazione delle prove e il follow-up.

  1. Compiti guidati dal brokerModella Broker.username, Broker.email, Broker.role e Buyer.assignedBroker affinché la proprietà rimanga chiara.
  2. Tracciamento delle specifiche dell'imbarcazioneArchivia Vessel.builder, Vessel.model, Vessel.year, Vessel.lengthFeet, Vessel.askingPrice e Vessel.status per inserzioni chiare.
  3. Storia delle prove in mareCattura SeaTrial.buyer, SeaTrial.vessel, SeaTrial.trialDate, SeaTrial.result e SeaTrial.nextSteps per ogni prova al molo.
  4. Note del broker e follow-upUtilizza BrokerNote.buyer, BrokerNote.vessel, BrokerNote.noteType, BrokerNote.content e BrokerNote.followUpAt per mantenere le chiamate e i promemoria legati all'affare giusto.

Qual è il modello CRM di Yacht Brokerage?

La reportistica nella yacht brokerage dovrebbe rispondere alle domande della leadership senza una ricerca manuale tra cartelle e thread di messaggi. Piccole indesiderate si accumulano rapidamente. Modifica Broker, Buyer, Vessel, SeaTrial e BrokerNote su Back4app per gestire le questioni di yacht brokerage con una proprietà più chiara, meno compiti persi e una cronistoria pronta per il cliente. Lo schema copre Broker (username, email, fullName, role, phoneNumber), Buyer (fullName, email, budgetMin, budgetMax, preferredLengthMin, preferredLengthMax, preferredBuilder, homePort, activeStatus, assignedBroker), Vessel (name, builder, model, year, lengthFeet, askingPrice, currency, location, status, specSheetUrl, listingBroker), SeaTrial (buyer, vessel, trialDate, departureMarina, captainName, weatherNotes, result, nextSteps, loggedBy) e BrokerNote (buyer, vessel, author, noteType, content, followUpAt). Collega il tuo frontend preferito e spedisci più velocemente.

Migliore per:

Team di yacht brokerageTracciamento dell'inventario delle imbarcazioniGestione delle preferenze degli acquirentiCoordinamento delle prove in marePipeline di vendita guidate da brokerTeam che scelgono BaaS per prodotti CRM marittimi

Panoramica del backend di Yacht Brokerage

Dal primo contatto fino alla firma finale, il successo della yacht brokerage dipende dal fatto che tutti lavorino sugli stessi dati — non sull'aggiornamento più rumoroso in sala.

Gli stakeholder possono controllare la copertura di Broker, Acquirente e Nave qui: nomi, relazioni e i flussi di lavoro che abilitano.

Caratteristiche principali del brokeraggio

Ogni scheda tecnologica in questo hub utilizza lo stesso schema CRM dell'intermediazione di yacht con Broker, Acquirente, Imbarcazione, SeaTrial e BrokerNote.

Gestione dell'assegnazione dei broker

Il broker memorizza username, email, nomeCompleto, ruolo e numeroDiTelefono.

Inventario e specifiche delle imbarcazioni

L'imbarcazione conserva nome, costruttore, modello, anno, lunghezzaPiedi, prezzoRichiesto, stato e brokerDiElenco.

Gestione del profilo acquirente

L'acquirente cattura nomeCompleto, email, budgetMin, budgetMax, costruttorePreferito, portoDiProvenienza, statoAttivo e brokerAssegnato.

Registri delle prove in mare

SeaTrial registra acquirente, imbarcazione, dataProva, marinaDiPartenza, nomeCapitano, risultato e prossimiPassi.

Note e promemoria del broker

BrokerNote collega acquirente, imbarcazione opzionale, autore, tipoNota, contenuto e seguiA.

Perché costruire il tuo backend CRM per Yacht Brokerage con Back4app?

Back4app ti offre primitive Broker, Acquirente, Nave, SeaTrial e BrokerNote così il tuo team può concentrarsi su annunci e incontri con i clienti invece di dover creare il database da zero.

  • Listini e assegnazioni di proprietà del broker: Broker, Buyer.assignedBroker e Vessel.listingBroker rendono facile assegnare listini, monitorare lo stato e mantenere visibile la proprietà.
  • Abbinamento acquirente basato sulle preferenze: Buyer budgetMin, budgetMax, preferredLengthMin, preferredLengthMax, preferredBuilder e homePort supportano una logica realistica per la lista ristretta.
  • Flessibilità in tempo reale + API per prove: Usa Live Queries per aggiornamenti di SeaTrial e BrokerNote mantenendo REST e GraphQL disponibili per strumenti web, mobili e interni.

Esegui un contratto backend su più fogli di listino, profili acquirente e note di prova in mare.

Vantaggi della intermediazione

Un backend di intermediazione yacht che tiene organizzati i registri dei broker, i dettagli delle imbarcazioni, le esigenze degli acquirenti e le note di prova.

Entrata elenco più veloce

Inizia con i campi delle imbarcazioni come costruttore, modello, anno, lunghezzaPiedi, prezzoRichiesto, valuta e stato invece di creare tabelle di inventario da zero.

Qualificazione degli acquirenti più chiara

Utilizza campi Acquirente come budgetMin, budgetMax, lunghezzaPreferitaMin, lunghezzaPreferitaMax, costruttorePreferito, portoDiOrigine e statoAttivo per confrontare acquirenti seri con gli elenchi.

Responsabilità della prova in mare

Tieni SeaTrial.dataProva, partenzaMarina, nomeCapitano, noteMeteo, risultato e prossimiPassi su ogni registro in modo che i trasferimenti non dipendano dalla memoria.

Visibilità del broker

Broker.ruolo, Acquirente.brokerAssegnato, Imbarcazione.brokerElenco e SeaTrial.registratoDa rendono ovvio chi possiede ogni conversazione su imbarcazione e acquirente.

Nota di continuità del broker

BrokerNote.noteType, contenuto e followUpAt mantengono le chiamate di preferenza, le osservazioni sulle ispezioni e i promemoria di follow-up attraverso l'affare.

Lancio assistito da AI

Genera rapidamente l'impalcatura backend e le indicazioni per l'integrazione con un prompt strutturato.

Pronto per lanciare la tua app CRM per brokeraggio yacht?

Lascia che l'Agente AI di Back4app costruisca il tuo backend CRM per brokeraggio yacht e generi i flussi di lavoro di Broker, Acquirente, Vascello, SeaTrial e BrokerNote da un prompt.

Gratis per iniziare — 50 prompt AI Agent/mese, nessuna carta di credito richiesta

Stack tecnologico

Tutto incluso in questo modello di backend per brokerage di yacht.

Frontend
13+ tecnologie
Backend
Back4app
Database
MongoDB
Autenticazione
Autenticazione integrata + sessioni
API
REST e GraphQL
In tempo reale
Live Queries

Diagramma delle relazioni tra broker

Modello di relazione tra entità per lo schema backend CRM della yacht brokerage.

Visualizza sorgente del diagramma
Mermaid
erDiagram
    Broker ||--o{ Buyer : "assignedBroker"
    Broker ||--o{ Vessel : "listingBroker"
    Broker ||--o{ SeaTrial : "loggedBy"
    Broker ||--o{ BrokerNote : "author"
    Buyer ||--o{ SeaTrial : "buyer"
    Buyer ||--o{ BrokerNote : "buyer"
    Vessel ||--o{ SeaTrial : "vessel"
    Vessel ||--o{ BrokerNote : "vessel"

    Broker {
        String objectId PK
        String username
        String email
        String password
        String fullName
        String role
        String phoneNumber
        Date createdAt
        Date updatedAt
    }

    Buyer {
        String objectId PK
        String fullName
        String email
        String phoneNumber
        Number budgetMin
        Number budgetMax
        Number preferredLengthMin
        Number preferredLengthMax
        String preferredBuilder
        String homePort
        String activeStatus
        String assignedBrokerId FK
        Date createdAt
        Date updatedAt
    }

    Vessel {
        String objectId PK
        String name
        String builder
        String model
        Number year
        Number lengthFeet
        Number askingPrice
        String currency
        String location
        String status
        String specSheetUrl
        String listingBrokerId FK
        Date createdAt
        Date updatedAt
    }

    SeaTrial {
        String objectId PK
        String buyerId FK
        String vesselId FK
        Date trialDate
        String departureMarina
        String captainName
        String weatherNotes
        String result
        String nextSteps
        String loggedById FK
        Date createdAt
        Date updatedAt
    }

    BrokerNote {
        String objectId PK
        String buyerId FK
        String vesselId FK
        String authorId FK
        String noteType
        String content
        Date followUpAt
        Date createdAt
        Date updatedAt
    }

Flusso di sincronizzazione del broker

Flusso di esecuzione tipico per login, revisione pipeline acquirente, revisione elenco navi, registrazione prove in mare e aggiornamenti delle note del broker.

Visualizza sorgente del diagramma
Mermaid
sequenceDiagram
  participant User
  participant App as Yacht Brokerage CRM App
  participant Back4app as Back4app Cloud

  User->>App: Sign in to the brokerage workspace
  App->>Back4app: POST /login
  Back4app-->>App: Session token

  User->>App: Open buyer pipeline
  App->>Back4app: GET /classes/Buyer?include=assignedBroker&order=-updatedAt
  Back4app-->>App: Buyer list with broker pointers

  User->>App: Review vessel specs
  App->>Back4app: GET /classes/Vessel?include=listingBroker&order=-createdAt
  Back4app-->>App: Vessel listings and spec sheets

  User->>App: Log a sea trial outcome
  App->>Back4app: POST /classes/SeaTrial
  Back4app-->>App: SeaTrial objectId

  App->>Back4app: Subscribe to Buyer and SeaTrial updates
  Back4app-->>App: LiveQuery updates for status changes

Guida del campo

Riferimento completo a livello di campo per ogni classe nello schema CRM di intermediazione yacht.

CampoTipoDescrizioneRichiesto
objectIdStringAuto-generated unique identifierAuto
usernameStringBroker login name
emailStringBroker email address
passwordStringHashed password (write-only)
fullNameStringBroker display name
roleStringBroker role such as admin, seniorBroker, or coordinator
phoneNumberStringDirect phone number for the broker
createdAtDateAuto-generated creation timestampAuto
updatedAtDateAuto-generated last-update timestampAuto

9 campi in Broker

Accesso e Permessi Broker

Come la strategia ACL e CLP protegge i broker, le imbarcazioni, i profili acquirente, i log delle prove in mare e le note dei broker.

Registrazioni di proprietà del broker

Solo il Broker assegnato dovrebbe aggiornare il proprio profilo e aprire le inserzioni a meno che non venga concessa un ruolo manageriale.

Integrità dell'elenco

Solo il personale autorizzato può creare o eliminare record di Vascello e SeaTrial; utilizzare il Cloud Code per convalidare le modifiche.

Accesso limitato all'acquirente

Limitare le letture di Acquirente e BrokerNote al team di broker che gestisce il lead e all'utente di fronte al cliente che possiede il profilo.

Schema JSON

Definizione dello schema JSON grezzo pronta per essere copiata in Back4app o utilizzata come riferimento di implementazione.

JSON
{
  "classes": [
    {
      "className": "Broker",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "username": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "password": {
          "type": "String",
          "required": true
        },
        "fullName": {
          "type": "String",
          "required": true
        },
        "role": {
          "type": "String",
          "required": true
        },
        "phoneNumber": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Buyer",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "fullName": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "phoneNumber": {
          "type": "String",
          "required": false
        },
        "budgetMin": {
          "type": "Number",
          "required": false
        },
        "budgetMax": {
          "type": "Number",
          "required": false
        },
        "preferredLengthMin": {
          "type": "Number",
          "required": false
        },
        "preferredLengthMax": {
          "type": "Number",
          "required": false
        },
        "preferredBuilder": {
          "type": "String",
          "required": false
        },
        "homePort": {
          "type": "String",
          "required": false
        },
        "activeStatus": {
          "type": "String",
          "required": true
        },
        "assignedBroker": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Broker"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Vessel",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "name": {
          "type": "String",
          "required": true
        },
        "builder": {
          "type": "String",
          "required": true
        },
        "model": {
          "type": "String",
          "required": true
        },
        "year": {
          "type": "Number",
          "required": true
        },
        "lengthFeet": {
          "type": "Number",
          "required": true
        },
        "askingPrice": {
          "type": "Number",
          "required": true
        },
        "currency": {
          "type": "String",
          "required": true
        },
        "location": {
          "type": "String",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "specSheetUrl": {
          "type": "String",
          "required": false
        },
        "listingBroker": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Broker"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "SeaTrial",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "buyer": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Buyer"
        },
        "vessel": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Vessel"
        },
        "trialDate": {
          "type": "Date",
          "required": true
        },
        "departureMarina": {
          "type": "String",
          "required": false
        },
        "captainName": {
          "type": "String",
          "required": false
        },
        "weatherNotes": {
          "type": "String",
          "required": false
        },
        "result": {
          "type": "String",
          "required": true
        },
        "nextSteps": {
          "type": "String",
          "required": false
        },
        "loggedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Broker"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "BrokerNote",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "buyer": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Buyer"
        },
        "vessel": {
          "type": "Pointer",
          "required": false,
          "targetClass": "Vessel"
        },
        "author": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Broker"
        },
        "noteType": {
          "type": "String",
          "required": true
        },
        "content": {
          "type": "String",
          "required": true
        },
        "followUpAt": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

Costruisci con AI Agent

Utilizza l'AI Agent di Back4app per generare un'app CRM per brokeraggio di yacht reale da questo modello, inclusi frontend, backend, auth e flussi di Broker, Acquirente, Vascello, SeaTrial e BrokerNote.

AI Agent di Back4app
Pronto a costruire
Crea un backend sicuro per Yacht Brokerage CRM su Back4app con questo schema e comportamento esatti.

Schema:
1. Broker: username (Stringa, obbligatorio), email (Stringa, obbligatorio), password (Stringa, obbligatorio), fullName (Stringa, obbligatorio), role (Stringa, obbligatorio), phoneNumber (Stringa, facoltativo); objectId, createdAt, updatedAt (sistema).
2. Acquirente: fullName (Stringa, obbligatorio), email (Stringa, obbligatorio), phoneNumber (Stringa, facoltativo), budgetMin (Numero, facoltativo), budgetMax (Numero, facoltativo), preferredLengthMin (Numero, facoltativo), preferredLengthMax (Numero, facoltativo), preferredBuilder (Stringa, facoltativo), homePort (Stringa, facoltativo), activeStatus (Stringa, obbligatorio), assignedBroker (Puntatore a Broker, obbligatorio); objectId, createdAt, updatedAt (sistema).
3. Imbarcazione: name (Stringa, obbligatorio), builder (Stringa, obbligatorio), model (Stringa, obbligatorio), year (Numero, obbligatorio), lengthFeet (Numero, obbligatorio), askingPrice (Numero, obbligatorio), currency (Stringa, obbligatorio), location (Stringa, facoltativo), status (Stringa, obbligatorio), specSheetUrl (Stringa, facoltativo), listingBroker (Puntatore a Broker, obbligatorio); objectId, createdAt, updatedAt (sistema).
4. SeaTrial: buyer (Puntatore a Acquirente, obbligatorio), vessel (Puntatore a Imbarcazione, obbligatorio), trialDate (Data, obbligatoria), departureMarina (Stringa, facoltativa), captainName (Stringa, facoltativa), weatherNotes (Stringa, facoltativa), result (Stringa, obbligatoria), nextSteps (Stringa, facoltativa), loggedBy (Puntatore a Broker, obbligatorio); objectId, createdAt, updatedAt (sistema).
5. BrokerNote: buyer (Puntatore a Acquirente, obbligatorio), vessel (Puntatore a Imbarcazione, facoltativo), author (Puntatore a Broker, obbligatorio), noteType (Stringa, obbligatoria), content (Stringa, obbligatoria), followUpAt (Data, facoltativa); objectId, createdAt, updatedAt (sistema).

Sicurezza:
- I broker si autenticano con username/email e password.
- Le liste di acquirenti e imbarcazioni possono essere modificate solo dall'assegnatoBroker o dall'listingBroker.
- Le registrazioni di SeaTrial sono create dal Broker che ha effettuato il login e visibili al broker assegnato.
- Le voci di BrokerNote sono visibili al broker assegnato all'acquirente e all'autore della nota.

Comportamento:
- Esplora le specifiche delle imbarcazioni, filtra le preferenze degli acquirenti e registra i log dei test in mare.
- Mantieni sincronizzati il matchmaking acquirente-imbarcazione, le note di follow-up e lo stato delle liste.
- Supporta i flussi di lavoro di intermediazione quotidiana, inclusi gli aggiornamenti di stato da disponibile a sotto offerta o venduto.

Consegna:
- App Back4app con schema, CLP, ACL e un frontend per pipeline degli acquirenti, liste delle imbarcazioni, programmazione dei test in mare e tracciamento delle note.

Premi il pulsante qui sotto per aprire l'Agente con questo modello di prompt pre-compilato.

Questo è il prompt di base senza un suffisso tecnologico. Puoi adattare lo stack frontend generato in seguito.

Distribuisci in pochi minuti50 prompt gratuiti / meseNessuna carta di credito richiesta

Tester API

Prova gli endpoint REST e GraphQL contro lo schema CRM della yacht brokerage. Le risposte utilizzano dati di esempio e non richiedono un account Back4app.

Caricamento playground…

Utilizza lo stesso schema di questo modello.

Scegli il tuo stack

Espandi ogni scheda per vedere come integrare Broker, Acquirente e Vascello con il tuo stack scelto.

Flutter CRM per brokeraggio di yacht

React CRM per brokeraggio di yacht

React Nativo CRM per brokeraggio di yacht

Next.js CRM per brokeraggio di yacht

JavaScript CRM per brokeraggio di yacht

Android CRM per brokeraggio di yacht

iOS CRM per brokeraggio di yacht

Vue CRM per brokeraggio di yacht

Angular CRM per brokeraggio di yacht

GraphQL CRM per brokeraggio di yacht

REST API CRM per brokeraggio di yacht

PHP CRM per brokeraggio di yacht

.NET CRM per brokeraggio di yacht

Cosa ottieni con ogni tecnologia

Ogni stack utilizza lo stesso schema backend CRM per brokeraggi di yacht e contratti API.

Struttura unificata per broker e vascelli

Gestisci Broker, Acquirente, Vascello, SeaTrial e BrokerNote con uno schema coerente.

Flusso di lavoro pronto per il broker per le inserzioni

Monitora le specifiche delle imbarcazioni, le preferenze degli acquirenti, le note di prova e i promemoria di follow-up in un modo che i broker possano utilizzare.

Storia delle prove in mare su diversi dispositivi

Mantieni visible trialDate, captainName e nextSteps sui client web e mobile.

Accesso basato sui ruoli per i team di intermediazione

Definisci i permessi dei broker e del personale per le registrazioni di imbarcazioni, acquirenti e prove.

REST/GraphQL API per app di intermediazione

Integra con dashboard, strumenti concierge e portali di annunci usando API flessibili.

Confronto Tecnologico

Confronta la velocità di configurazione, lo stile SDK e il supporto AI tra tutte le tecnologie supportate.

FrameworkTempo di ConfigurazioneVantaggio della Brokeraggio YachtTipo di SDKSupporto AI
Circa 5 minCodice sorgente unico per i pannelli di controllo dei broker su mobile e web.SDK TipizzatoCompleto
Meno di 5 minutiDashboard web veloce per annunci e abbinamento acquirenti.SDK DigitatoCompleto
~3–7 minApp mobile multipiattaforma per broker al porto.SDK DigitatoCompleto
Impostazione rapida (5 min)Portale di intermediazione renderizzato dal server per annunci e prove.SDK DigitatoCompleto
~3–5 minIntegrazione web leggera per strumenti di intermediazione.SDK DigitatoCompleto
Circa 5 minApp nativa Android per broker sul campo.SDK digitatoCompleto
Meno di 5 minutiApp nativa iOS per riunioni con i clienti e visite in marina.SDK digitatoCompleto
~3–7 minInterfaccia web Reactive per flussi di lavoro di imbarcazioni e acquirenti.SDK digitatoCompleto
Configurazione rapida (5 min)Portale di intermediazione enterprise per team più grandi.SDK digitatoCompleto
Meno di 2 minAPI flessibile GraphQL per dati relativi a navi, acquirenti e prove.API GraphQLCompleto
Configurazione rapida (2 min)Integrazione REST API per sistemi di intermediazione.REST APICompleto
~3 minBackend di PHP lato server per flussi di lavoro di intermediazione.REST APICompleto
~3–7 minBackend di .NET per operazioni di intermediazione.SDK tipizzatoCompleto

Il tempo di configurazione riflette la durata prevista dal bootstrap del progetto alla prima query di una nave o di un acquirente utilizzando questo schema di template.

Domande frequenti sui broker

Domande comuni sulla creazione di un backend CRM per yacht brokerage con questo modello.

Quali metriche sono veramente importanti per la consegna della brokerage di yacht oltre a “occupato”?
Come dovrebbero connettersi i documenti, le scadenze e le comunicazioni nei dati della brokerage di yacht?
Questo layer CRM per la brokerage di yacht può crescere con nuovi tipi di pratiche e canali di acquisizione?
Come faccio a interrogare le specifiche delle imbarcazioni in Flutter?
Come organizzo il matching dei compratori in Next.js?
Può React Native memorizzare offline i log delle prove in mare?
Come posso prevenire modifiche non autorizzate agli annunci delle navi?
Qual è il modo migliore per mostrare le attività di brokeraggio su Android?
Come funziona il flusso di registrazione delle prove in mare end-to-end?

Affidato a sviluppatori di tutto il mondo

Unisci i team che realizzano prodotti di intermediazione di yacht più velocemente con i modelli di Back4app

G2 Users Love Us Badge

Pronto per costruire la tua app CRM per intermediazione di yacht?

Inizia il tuo progetto CRM per intermediazione di yacht in pochi minuti. Non è richiesta una carta di credito.

Scegli tecnologia