KasarKasar Docs
Types de champs

Types de champs

Reference complete des 37 types de champs disponibles dans Kasar

Kasar dispose d'un systeme de types extensible avec 37 types de champs repartis en 7 categories. Chaque type definit son mapping SQL, ses operateurs de filtre, ses fonctions d'agregation et ses regles de validation.

Vue d'ensemble

CategorieTypesNombre
TexteTEXT, LONG_TEXT, RICH_TEXT, EMAIL, PHONE, URL6
NumeriqueNUMBER, INTEGER, DECIMAL, PERCENT, CURRENCY5
TemporelDATE, DATETIME, DURATION, DATE_RANGE, DATETIME_RANGE5
SelectionBOOLEAN, SELECT, MULTI_SELECT3
RelationnelRELATION, USERS, DEPENDENT_RELATION, MORPH_RELATION, MANY_TO_MANY, PRIMARY_M2M_REFERENCE, PIPELINE7
ComposeEMAILS, PHONES2
AvanceADDRESS, JSON, COLOR, RATING, IMAGE, DOCUMENTS, CALCULATED, ROLLUP, EXTERNAL_LOOKUP9

Types de stockage

Les types de champs utilisent trois strategies de stockage differentes :

  • Standard : une colonne SQL par champ (TEXT, NUMBER, DATE, etc.)
  • Composite : plusieurs colonnes SQL pour un seul champ logique (ADDRESS, CURRENCY, PIPELINE, DATE_RANGE, DATETIME_RANGE)
  • Virtuel : pas de colonne sur la table parente (MANY_TO_MANY, EMAILS, PHONES, PRIMARY_M2M_REFERENCE, ROLLUP)

Types texte

Tous les types texte supportent les memes operateurs de filtre :

equals, not_equals, contains, starts_with, ends_with, is_null, is_not_null

Les operateurs contains, starts_with et ends_with utilisent unaccent() des deux cotes pour une recherche insensible aux accents (e → e, a → a).

TEXT

Texte court sur une seule ligne. Type par defaut pour les champs textuels simples.

ProprieteValeur
SQLVARCHAR(255) par defaut (configurable via maxLength)
Recherche full-textOui
TriableOui
IndexableOui
ContraintesmaxLength (defaut : 255)

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, AVG_LENGTH, MODE, ANTI_MODE

LONG_TEXT

Texte long multi-lignes (textarea). Adapte aux descriptions, notes ou commentaires.

ProprieteValeur
SQLTEXT (illimite)
Recherche full-textOui
TriableOui
IndexableNon

Fonctions d'agregation : COUNT, PERCENT_FILLED, PERCENT_EMPTY, AVG_LENGTH

RICH_TEXT

Texte riche avec formatage (gras, italique, listes, titres). Le contenu est stocke en HTML.

ProprieteValeur
SQLTEXT (illimite)
Recherche full-textOui
TriableOui
IndexableNon
Affichage tableauHTML nettoye (texte brut)

Fonctions d'agregation : COUNT, PERCENT_FILLED, PERCENT_EMPTY, AVG_LENGTH

RICH_TEXT est exclu du panneau de filtres dans les vues liste. Le contenu HTML est automatiquement nettoye avant affichage dans les tableaux.

EMAIL

Adresse email avec validation de format et normalisation automatique.

ProprieteValeur
SQLVARCHAR(255)
Recherche full-textOui
TriableOui
IndexableOui
Affichage tableauLien mailto: cliquable

Validation :

  • Normalisation en minuscules
  • Format email valide (RFC 5322)
  • Longueur max : 254 caracteres

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY

PHONE

Numero de telephone avec validation et formatage automatique.

ProprieteValeur
SQLVARCHAR(50)
Recherche full-textOui
TriableOui
IndexableOui
Affichage tableauLien tel: cliquable

Validation :

  • Nettoyage des separateurs (espaces, tirets, parentheses, points)
  • Ajout automatique du prefixe pays +33 si le numero commence par 0
  • Format international valide : 6 a 15 chiffres
  • Normalisation : +33612345678
  • Affichage : +33 6 12 34 56 78

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY

URL

Lien URL avec validation et normalisation.

ProprieteValeur
SQLTEXT
Recherche full-textOui
TriableOui
IndexableOui
Affichage tableauLien cliquable (nouvel onglet)

Validation :

  • Ajout automatique de https:// si pas de protocole
  • Seuls http: et https: sont autorises
  • Longueur max : 2048 caracteres
  • Validation via constructeur URL standard

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY


Types numeriques

Tous les types numeriques supportent les memes operateurs de filtre :

equals, not_equals, greater_than, less_than, greater_equal, less_equal, between, is_null, is_not_null

NUMBER

Nombre a virgule flottante double precision. Type par defaut pour les valeurs numeriques.

ProprieteValeur
SQLDOUBLE PRECISION
Defaut SQLDEFAULT 0
TriableOui
IndexableOui
Contraintesmin, max

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, SUM, AVG, MEDIAN, MIN, MAX, RANGE, STDDEV, VARIANCE

INTEGER

Nombre entier. Ideal pour les quantites, compteurs ou identifiants numeriques.

ProprieteValeur
SQLINTEGER
Defaut SQLDEFAULT 0
TriableOui
IndexableOui
Contraintesmin, max

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, SUM, AVG, MEDIAN, MIN, MAX, RANGE, STDDEV, VARIANCE, MODE, ANTI_MODE

DECIMAL

Nombre decimal avec precision configurable. Adapte aux calculs financiers ou scientifiques.

ProprieteValeur
SQLDECIMAL(19,4) par defaut (configurable)
Defaut SQLDEFAULT 0
TriableOui
IndexableOui
Contraintesmin, max, precision (defaut : 19), scale (defaut : 4)

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, SUM, AVG, MEDIAN, MIN, MAX, RANGE, STDDEV, VARIANCE

PERCENT

Pourcentage avec precision a 2 decimales.

ProprieteValeur
SQLDECIMAL(5,2)
Defaut SQLDEFAULT 0
TriableOui
IndexableOui
Contraintesmin (defaut : 0), max (defaut : 100)
AffichageSuffixe %

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, SUM, AVG, MEDIAN, MIN, MAX, RANGE, STDDEV, VARIANCE

CURRENCY

Montant monetaire avec devise. Type composite : cree 2 colonnes SQL.

ProprieteValeur
Colonne montantDECIMAL(19,2) avec DEFAULT 0
Colonne deviseVARCHAR(3) avec DEFAULT 'EUR'
TriableOui
IndexableOui
Contraintesmin, max, currency (defaut : EUR)
AffichageFormate avec symbole de devise (ex : 12 500,00 EUR)

Schema SQL : pour un champ amount, deux colonnes sont creees :

"amount" DECIMAL(19,2) DEFAULT 0
"amount_currency" VARCHAR(3) DEFAULT 'EUR'

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, SUM, AVG, MEDIAN, MIN, MAX, RANGE, STDDEV, VARIANCE

Les filtres s'appliquent uniquement sur la colonne montant. Pour filtrer par devise, utilisez un filtre texte sur la colonne {champ}_currency.


Types temporels

Operateurs de filtre date

Tous les types temporels supportent 18 operateurs de filtre, dont 12 operateurs relatifs :

Operateurs absolus : date_equals, date_before, date_after, date_between, is_null, is_not_null

Operateurs relatifs : date_today, date_yesterday, date_this_week, date_last_week, date_this_month, date_last_month, date_this_quarter, date_last_quarter, date_this_year, date_last_year, date_last_n_days, date_next_n_days

Les semaines commencent le lundi (ISO 8601). Les operateurs date_last_n_days et date_next_n_days acceptent un parametre numerique (defaut : 7 jours).

DATE

Date sans heure.

ProprieteValeur
SQLDATE
TriableOui
IndexableOui
GroupableOui
AffichageFormat local (ex : 15/04/2026)

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, MEDIAN, MIN, MAX, RANGE

DATETIME

Date avec heure et fuseau horaire.

ProprieteValeur
SQLTIMESTAMP
TriableOui
IndexableOui
GroupableOui
AffichageFormat local (ex : 15/04/2026 14:30)

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, MEDIAN, MIN, MAX, RANGE

DURATION

Duree avec unite configurable. Stocke au format texte "valeur:unite".

ProprieteValeur
SQLTEXT
TriableOui (converti en secondes pour le tri)
IndexableOui
Format de stockage"5:hours", "30:minutes", "1:years"

Unites supportees :

UniteExemple stocke
seconds"120:seconds"
minutes"30:minutes"
hours"5:hours"
days"3:days"
weeks"2:weeks"
months"6:months"
years"1:years"

Operateurs de filtre : equals, not_equals, greater_than, less_than, greater_equal, less_equal, between, is_null, is_not_null

Fonctions d'agregation : COUNT, PERCENT_FILLED, PERCENT_EMPTY, SUM, AVG, MEDIAN, MIN, MAX, RANGE

DATE_RANGE

Plage de dates (debut + fin). Type composite : cree 2 colonnes SQL.

ProprieteValeur
Colonne debutDATE ({champ}_start)
Colonne finDATE ({champ}_end)
TriableOui
IndexableNon

Schema SQL : pour un champ timeline, deux colonnes sont creees :

"timeline_start" DATE
"timeline_end" DATE

Fonctions d'agregation : COUNT, PERCENT_FILLED, PERCENT_EMPTY, AVG_SPAN, MIN_SPAN, MAX_SPAN

AVG_SPAN, MIN_SPAN et MAX_SPAN calculent la duree entre les dates de debut et de fin (en jours).

DATETIME_RANGE

Plage de dates avec heures. Type composite : cree 2 colonnes SQL.

ProprieteValeur
Colonne debutTIMESTAMP ({champ}_start)
Colonne finTIMESTAMP ({champ}_end)
TriableOui
IndexableNon

Schema SQL : pour un champ scheduled, deux colonnes sont creees :

"scheduled_start" TIMESTAMP
"scheduled_end" TIMESTAMP

Fonctions d'agregation : COUNT, PERCENT_FILLED, PERCENT_EMPTY, AVG_SPAN, MIN_SPAN, MAX_SPAN


Types selection

BOOLEAN

Vrai/Faux (toggle switch).

ProprieteValeur
SQLBOOLEAN
Defaut SQLDEFAULT false
IndexableOui

Operateurs de filtre : is_true, is_false, is_null, is_not_null

SELECT

Selection unique parmi une liste d'options definies dans un enum.

ProprieteValeur
SQLTEXT
Recherche full-textOui
TriableOui
IndexableOui
ConfigurationenumName — reference vers enum_definitions

Operateurs de filtre : equals, not_equals, in, not_in, is_null, is_not_null

Les options sont definies dans la table enum_definitions avec la structure suivante :

[
  { "value": "active", "label": "Actif", "color": "#22c55e" },
  { "value": "inactive", "label": "Inactif", "color": "#ef4444" }
]

Chaque option a un value (cle technique stockee en base), un label (affiche a l'utilisateur) et un color optionnel (code hexadecimal parmi une palette de 16 couleurs predefinies).

Les enums sont reutilisables : plusieurs champs SELECT/MULTI_SELECT peuvent referencer le meme enumName.

MULTI_SELECT

Selection multiple. Stocke en tableau PostgreSQL.

ProprieteValeur
SQLTEXT[] (tableau PostgreSQL)
Defaut SQLDEFAULT '{}'::TEXT[] (tableau vide)
Recherche full-textOui
TriableOui
IndexableNon
ConfigurationenumName — reference vers enum_definitions

Operateurs de filtre : contains, in, not_in, is_null, is_not_null


Types relationnels

RELATION

Relation classique entre deux objets via cle etrangere. Supporte deux modes :

BELONGS_TO_ONE

L'objet source contient une cle etrangere (FK) vers l'objet cible. C'est le cote "N" d'une relation 1:N.

ProprieteValeur
SQLUUID (colonne {champ}_id)
IndexableOui (index automatique)
FKON DELETE CASCADE si requis, ON DELETE SET NULL sinon

Operateurs de filtre : equals, not_equals, in, not_in, is_null, is_not_null

{
  relationType: 'BELONGS_TO_ONE',
  targetObjectName: 'companies',     // Objet cible
  targetFieldName: 'contacts',       // Champ inverse auto-genere sur la cible
  targetFieldLabel: 'Contacts'       // Label du champ inverse
}

Le suffixe _id est ajoute automatiquement au nom de colonne. Un champ company cree une colonne company_id. Le champ inverse HAS_MANY est genere automatiquement sur l'objet cible.

HAS_MANY

Cote inverse d'un BELONGS_TO_ONE. Virtuel : pas de colonne physique. Les resultats sont calcules par requete.

ProprieteValeur
SQLAucune colonne (virtuel)
Company.contacts → SELECT * FROM contacts WHERE company_id = {company.id}

USERS

Relation speciale vers les utilisateurs du workspace. Cree une cle etrangere vers workspace_users.

ProprieteValeur
SQLUUID (colonne {champ}_id)
IndexableOui (index automatique)

Operateurs de filtre : equals, not_equals, in, not_in, is_null, is_not_null

{
  relationType: 'BELONGS_TO_ONE',      // Force automatiquement
  targetObjectName: 'workspace_users', // Force automatiquement
  defaultToSessionUser: true           // Pre-remplit avec l'utilisateur connecte
}

DEPENDENT_RELATION

Relation dont les options dependent d'un autre champ du meme objet. Typiquement utilise pour les etapes de pipeline filtrees par pipeline.

ProprieteValeur
SQLUUID (colonne {champ}_id)
IndexableOui
FKON DELETE SET NULL ON UPDATE CASCADE

Operateurs de filtre : equals, not_equals, in, not_in, is_null, is_not_null

{
  relationType: 'BELONGS_TO_ONE',
  targetObjectName: 'pipeline_steps',
  dependsOn: 'pipeline_id',           // Champ parent (obligatoire)
  filterField: 'pipeline_id',         // Champ de filtre sur la cible (obligatoire)
  dependencyMode: 'strict'            // 'strict' = filtre dur, 'suggest' = priorisation souple
}

MORPH_RELATION

Relation polymorphe : un champ peut pointer vers plusieurs types d'objets differents. Chaque objet cible recoit sa propre colonne FK, toutes liees par un identifiant morphId commun.

ProprieteValeur
SQL1 colonne UUID par objet cible
FKON DELETE SET NULL ON UPDATE CASCADE par cible
Nommage{champ}_{cible}_id (ex : linked_to_contacts_id)

Operateurs de filtre : equals, not_equals, is_null, is_not_null

Exemple : un champ linked_to avec 3 cibles cree 3 colonnes :

"linked_to_contacts_id" UUID         -- FK → contacts
"linked_to_companies_id" UUID        -- FK → companies
"linked_to_opportunities_id" UUID    -- FK → opportunities

Tous les champs partagent le meme morphId. Un seul est rempli a la fois. Utilise pour les taches et notes qui peuvent etre liees a differents types d'objets.

MANY_TO_MANY

Relation N:N via table de jonction auto-generee. Pas de colonne sur les objets source ou cible.

ProprieteValeur
SQLAucune colonne sur les tables parentes
StockageTable de jonction dediee
FK jonctionON DELETE CASCADE ON UPDATE CASCADE

Operateurs de filtre : equals, not_equals, in, not_in, is_null, is_not_null

Table de jonction

Nommage : {source}_{champ}_target (ex : contacts_companies_target)

Structure :

CREATE TABLE "contacts_companies_target" (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  contact_id UUID NOT NULL,          -- FK → contacts (CASCADE)
  company_id UUID,                   -- FK → companies (CASCADE)
  created_at TIMESTAMP DEFAULT NOW(),
  updated_at TIMESTAMP DEFAULT NOW(),
  deleted_at TIMESTAMP DEFAULT NULL
)

Un index unique composite est cree automatiquement sur (source_id, target_id).

Champs de jonction

La table de jonction peut contenir des champs additionnels :

junctionFields: [
  { name: 'position', type: 'TEXT', label: 'Poste' },
  { name: 'is_primary', type: 'BOOLEAN', label: 'Contact principal' }
]

Options avancees

OptionDescription
allowLinkFromTargetAutoriser la creation/suppression de liens depuis le cote cible (defaut : true)
closedAtColumnNameNom d'une colonne TIMESTAMP pour marquer la fin d'une relation
stickyAuto-extension : ajoute automatiquement une colonne FK quand un nouvel objet est cree

Multi-cible

Une seule table de jonction peut lier un objet source a plusieurs types d'objets cibles. Chaque cible a sa propre colonne FK (nullable), et une seule est remplie par ligne.

PRIMARY_M2M_REFERENCE

Reference virtuelle vers l'entree "principale" (is_primary = true) d'une relation MANY_TO_MANY.

ProprieteValeur
SQLAucune colonne (virtuel)
Lecture seuleDepend du referenceType

Deux variantes :

  • display : affiche la valeur du champ standard de l'objet cible principal (lecture seule)
  • junction_field : affiche/edite un champ specifique de la ligne de jonction principale
{
  relationType: 'PRIMARY_M2M_REFERENCE',
  sourceM2MField: 'companies',              // Champ M2M source
  referenceType: 'display',                 // ou 'junction_field'
  junctionFieldName: 'position',            // Si 'junction_field'
  junctionTable: 'contacts_companies_target'
}

PIPELINE

Type special pour les pipelines de vente. Type composite : cree 3 colonnes SQL.

ProprieteValeur
Colonne pipelineUUID ({champ}_id) — FK vers pipelines
Colonne etapeUUID ({champ}_step_id) — FK vers pipeline_steps
Colonne clotureTIMESTAMP ({champ}_closed_at)
FKON DELETE SET NULL ON UPDATE CASCADE pour les deux FK
IndexableOui (2 index automatiques)

Schema SQL : pour un champ pipeline, trois colonnes sont creees :

"pipeline_id" UUID          -- FK → pipelines
"pipeline_step_id" UUID     -- FK → pipeline_steps
"pipeline_closed_at" TIMESTAMP
{
  pipelineObject: 'pipelines',           // Table des pipelines
  stepsObject: 'pipeline_steps',         // Table des etapes
  stepsFilterField: 'pipeline_id',       // Filtre etapes par pipeline
  pipelineColumnName: 'pipeline_id',
  stepColumnName: 'pipeline_step_id',
  closedAtColumnName: 'pipeline_closed_at',
  closedAtLabel: 'Date de cloture'
}

La vue Kanban est optimisee pour afficher les etapes de pipeline comme colonnes.


Types composes

Les types composes creent automatiquement une table enfant liee par cle etrangere a l'objet parent. Ils n'ont pas de colonne sur la table parente.

EMAILS

Stocke plusieurs adresses email par enregistrement dans une table enfant dediee.

ProprieteValeur
SQLAucune colonne sur la table parente (virtuel)
Table enfant{objet}_emails (ex : contacts_emails)

Structure de la table enfant :

CREATE TABLE "contacts_emails" (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  contact_id UUID NOT NULL,          -- FK → contacts (CASCADE)
  email_address VARCHAR(255) NOT NULL,
  is_primary BOOLEAN DEFAULT false,
  created_at TIMESTAMP DEFAULT NOW(),
  updated_at TIMESTAMP DEFAULT NOW(),
  deleted_at TIMESTAMP DEFAULT NULL
)
CREATE UNIQUE INDEX "idx_contacts_emails_unique_email"
  ON "contacts_emails" ("contact_id", "email_address")

La table enfant est un objet systeme cache (isHidden: true, isSystem: true). Le champ email_address est indexe pour la recherche.

PHONES

Stocke plusieurs numeros de telephone par enregistrement dans une table enfant dediee.

ProprieteValeur
SQLAucune colonne sur la table parente (virtuel)
Table enfant{objet}_phones (ex : contacts_phones)

Structure de la table enfant :

CREATE TABLE "contacts_phones" (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  contact_id UUID NOT NULL,          -- FK → contacts (CASCADE)
  phone_number VARCHAR(50) NOT NULL,
  is_primary BOOLEAN DEFAULT false,
  created_at TIMESTAMP DEFAULT NOW(),
  updated_at TIMESTAMP DEFAULT NOW(),
  deleted_at TIMESTAMP DEFAULT NULL
)
CREATE UNIQUE INDEX "idx_contacts_phones_unique_phone"
  ON "contacts_phones" ("contact_id", "phone_number")

Types avances

ADDRESS

Adresse structuree. Type composite : cree 7 colonnes SQL dont une colonne calculee.

ProprieteValeur
Recherche full-textOui (via la colonne formatted)

Schema SQL : pour un champ address, sept colonnes sont creees :

ColonneType SQLDescription
address_address1TEXTLigne d'adresse 1
address_address2TEXTLigne d'adresse 2
address_cityTEXTVille
address_regionTEXTRegion / Etat
address_postal_codeTEXTCode postal
address_countryTEXTPays
address_formattedTEXT GENERATEDAdresse formatee (calculee automatiquement)

La colonne formatted est une colonne calculee (GENERATED ALWAYS AS ... STORED) qui concatene automatiquement les composants non vides, separes par des virgules. Elle est utilisee pour la recherche full-text.

JSON

Donnees JSON libres stockees en JSONB PostgreSQL.

ProprieteValeur
SQLJSONB
Defaut SQLDEFAULT '{}'::jsonb

Operateurs de filtre : is_null, is_not_null

COLOR

Couleur hexadecimale avec selecteur visuel.

ProprieteValeur
SQLVARCHAR(7)
IndexableOui
Format#RRGGBB (ex : #FF0000)
ValidationExpression reguliere ^#[0-9A-Fa-f]{6}$

RATING

Note sur 5 (affichee en etoiles).

ProprieteValeur
SQLSMALLINT
Defaut SQLDEFAULT 0
IndexableOui
Contraintesmin (defaut : 0), max (defaut : 5)

Operateurs de filtre : equals, not_equals, greater_than, less_than, greater_equal, less_equal, between, is_null, is_not_null

Fonctions d'agregation : COUNT, COUNT_DISTINCT, PERCENT_FILLED, PERCENT_EMPTY, SUM, AVG, MEDIAN, MIN, MAX, RANGE, STDDEV, VARIANCE, MODE, ANTI_MODE

IMAGE

URL d'image avec apercu visuel.

ProprieteValeur
SQLTEXT
ContraintesmaxLength (defaut : 2048), format: 'url'

Operateurs de filtre : is_null, is_not_null

DOCUMENTS

Pieces jointes / fichiers. Stocke un tableau de metadonnees en JSONB.

ProprieteValeur
SQLJSONB

Operateurs de filtre : is_null, is_not_null

Structure de chaque document :

{
  "url": "https://...",
  "fileName": "facture.pdf",
  "fileType": "application/pdf",
  "fileSize": 245000,
  "storagePath": "org/documents/...",
  "uploadedAt": "2026-04-15T10:30:00Z"
}

Types de fichiers autorises : PDF, Word, Excel, CSV, PowerPoint, images. Taille max : 10 Mo par fichier.

CALCULATED

Colonne calculee cote base de donnees via une expression SQL.

ProprieteValeur
SQL{type_resultat} GENERATED ALWAYS AS ({expression}) STORED
Lecture seuleOui (calculee automatiquement)
TriableOui
IndexableOui
RechercheOui

Le type SQL de la colonne depend du resultType configure (ex : NUMBERDOUBLE PRECISION, TEXTTEXT).

Configuration :

{
  computedExpression: "first_name || ' ' || last_name",  // Expression SQL
  resultType: 'TEXT'                                      // Type du resultat
}

Exemple de colonne generee :

"full_name" TEXT GENERATED ALWAYS AS (first_name || ' ' || last_name) STORED

L'expression SQL est executee directement par PostgreSQL. Elle doit referencer des colonnes existantes de la meme table et etre deterministe (IMMUTABLE).

ROLLUP

Champ calcule qui agrege des donnees d'objets lies. Virtuel : pas de colonne en base, calcul au runtime.

ProprieteValeur
SQLAucune colonne (virtuel)
Lecture seuleOui
{
  sourceRelationField: 'contacts',    // Champ relation source
  targetField: 'amount',              // Champ a agreger sur l'objet cible
  targetFieldType: 'CURRENCY',        // Type du champ cible
  rollupFunction: 'SUM'               // Fonction d'agregation
}

Fonctions d'agregation ROLLUP

Fonctions generales (tous les types de champs) :

FonctionResultatDescription
SHOW_ORIGINALmeme typeValeurs brutes
SHOW_UNIQUETEXTValeurs uniques
COUNT_ALLNUMBERNombre total
COUNT_VALUESNUMBERNombre de valeurs non vides
COUNT_UNIQUENUMBERNombre de valeurs uniques
COUNT_EMPTYNUMBERNombre de valeurs vides
COUNT_NOT_EMPTYNUMBERNombre de valeurs non vides
PERCENT_EMPTYPERCENTPourcentage de vides
PERCENT_NOT_EMPTYPERCENTPourcentage de non-vides

Fonctions numeriques (NUMBER, INTEGER, DECIMAL, CURRENCY, PERCENT, RATING) :

FonctionResultatDescription
SUMmeme typeSomme
AVERAGEDECIMAL (ou CURRENCY)Moyenne
MEDIANmeme typeMediane
MINmeme typeMinimum
MAXmeme typeMaximum
RANGEmeme typeEcart (max - min)

Fonctions date (DATE, DATETIME) :

FonctionResultatDescription
EARLIEST_DATEmeme typeDate la plus ancienne
LATEST_DATEmeme typeDate la plus recente
DATE_RANGENUMBEREcart en jours

Fonctions booleennes (BOOLEAN) :

FonctionResultatDescription
COUNT_TRUENUMBERNombre de true
COUNT_FALSENUMBERNombre de false
PERCENT_TRUEPERCENTPourcentage de true

Fonctions M2M :

FonctionResultatDescription
SHOW_PRIMARYmeme typeValeur de l'entree principale (is_primary = true)

Disponibilite par type de relation

Relation sourceFonctions disponibles
BELONGS_TO_ONESHOW_ORIGINAL uniquement
MORPH_RELATIONSHOW_ORIGINAL uniquement
HAS_MANYGenerales + specifiques au type
MANY_TO_MANYGenerales + specifiques au type

EXTERNAL_LOOKUP

Lookup en temps reel vers une base de donnees externe via un connecteur. Permet d'afficher des donnees d'un Supabase ou PostgreSQL externe directement dans Kasar.

ProprieteValeur
SQLTEXT (BELONGS_TO_ONE) ou TEXT[] (HAS_MANY)

Deux modes :

  • BELONGS_TO_ONE : stocke un identifiant externe unique (TEXT)
  • HAS_MANY : stocke plusieurs identifiants externes (TEXT[], max configurable, defaut 25)

Configuration :

{
  connectorId: 'cred_xxx',              // ID du connecteur externe
  externalSchema: 'public',             // Schema de la table externe
  externalTable: 'stripe_invoices',     // Table externe
  externalPrimaryKey: 'id',             // Cle primaire de la table externe
  localLookupField: 'email',            // Champ local utilise pour la jointure
  externalLookupField: 'customer_email', // Champ externe utilise pour la jointure
  columns: [                            // Colonnes a afficher
    {
      externalColumn: 'amount',
      localAlias: 'Montant facture',
      displayType: 'CURRENCY',
      aggregation: 'SUM'               // Pour HAS_MANY : agregation
    },
    {
      externalColumn: 'created_at',
      localAlias: 'Derniere facture',
      displayType: 'DATE',
      aggregation: 'LATEST_DATE'
    }
  ],
  staticFilter: {                       // Filtre optionnel sur la table externe
    field: 'status',
    operator: 'eq',
    value: 'paid'
  },
  sortBy: {                             // Tri optionnel
    field: 'created_at',
    direction: 'desc'
  }
}

Chaque colonne configuree cree un champ enfant virtuel en lecture seule, affiche dans le detail de l'enregistrement.


Champs injectes automatiquement

Lors de la creation d'un objet, les champs suivants sont automatiquement ajoutes par le systeme de migration. Ne les specifiez jamais manuellement.

ChampType SQLDescription
idUUID PRIMARY KEY DEFAULT gen_random_uuid()Identifiant unique
created_atTIMESTAMP DEFAULT NOW()Date de creation
updated_atTIMESTAMP DEFAULT NOW()Date de derniere modification
deleted_atTIMESTAMPSoft delete
created_by_idUUID (FK → workspace_users)Createur

De meme, pour les champs relationnels :

  • Le suffixe _id est ajoute automatiquement aux colonnes FK
  • Les index sur les FK sont crees automatiquement
  • Le champ inverse HAS_MANY est genere automatiquement pour chaque BELONGS_TO_ONE

On this page