Beeye Terminology Guide
This guide helps translate between user terminology and Beeye GraphQL API terms.
Quick Reference Card
Field Access Patterns
- Projects:
company { projects(first: 100) { items { iD projectName } } } - Employees:
company { employees(first: 100) { items { id fullName } } } - Tasks:
company { tasks(first: 100, where: [...]) { items { id name } } } - Planning:
company { taskPlanning(where: [...]) { items { date amount } } }
Critical Field Names
- Project ID:
iD(NOTid) - capital I, capital D - Employee ID:
id(lowercase) - Employee name:
fullName(NOTname) - Project name:
projectName(NOTname)
Required Patterns
- All list queries: Must include
first: Nparameter - Paginated results: Always use
items { ... }wrapper - Filters: Always use array syntax
where: [{...}]notwhere: {...} - Filter values: Always arrays of strings:
value: ["value"]notvalue: "value"
Common Mistakes to Avoid
Project Fields
- ❌
projects { id }→ ✅projects(first: 100) { items { iD } } - ❌
projects { name }→ ✅projects(first: 100) { items { projectName } } - ❌
projects(first: 10) { id }→ ✅projects(first: 10) { items { iD } } - ❌
projects { iD }(missing first) → ✅projects(first: 100) { items { iD } }
Employee Fields
- ❌
employees { name }→ ✅employees(first: 100) { items { fullName } } - ❌
employees { id }→ ✅employees(first: 100) { items { id } }(id is lowercase for employees) - ❌
employees { items { fullName } }(missing first) → ✅employees(first: 100) { items { fullName } }
Pagination
- ❌
company { projects { iD } }→ ✅company { projects(first: 100) { items { iD } } } - ❌
company { employees { fullName } }→ ✅company { employees(first: 100) { items { fullName } } } - All list queries require
firstparameter and useitemsarray
Filter Syntax
- ❌
where: { path: "iD", comparison: equal, value: ["123"] }→ ✅where: [{ path: "iD", comparison: equal, value: ["123"] }] - ❌
where: { path: "name", comparison: contains, value: "John" }→ ✅where: [{ path: "fullName", comparison: contains, value: ["John"] }] whereis always an array of WhereExpression objects, never a single objectvalueis always an array of strings, even for single values
Type Name Exploration
- ❌ Exploring "Company" → ✅ Explore "CompanyGraph"
- ❌ Exploring "Employee" → ✅ Explore "ResourcesGraph"
- ❌ Exploring "Project" → ✅ Explore "ProjectGraph"
- ❌ Exploring "Task" → ✅ Explore "ProjetTaskGraph"
- Use
ExploreGraphQlTypewith the correct type names, or it will auto-map common aliases
Core Concepts
Projects
- User terms: "project", "job", "engagement", "mission", "initiative", "client project"
- GraphQL field:
projects(undercompany) - Key fields:
iDorid: Project identifierprojectName: Project namestartDate/endDate: Project timelineresponsable_Id: Project manager/owner IDexternalId: External system identifieractivityFamily_Id: Category/type of project
Client
- User terms: "client", "customer"
- GraphQL field:
fondDeFinancement(often found under projects) - Key fields:
id: Client identifiername: Client name
- Note: In GraphQL, clients are often called
fondDeFinancementand represent the client of a project
Tasks
- User terms: "task", "work item", "assignment", "deliverable", "activity", "work package"
- GraphQL field:
tasks(undercompany) orprojetTasks(under a project) - Key fields:
id: Task identifiername: Task namestartDate/projectedEnd/realEnd: Task timelinetaskId: Task ID (used in planning)projectId: Parent project IDressource_Id: Assigned resource ID
Resources / Employees / People
- User terms: "employee", "resource", "user", "collaborateur" (French), "person", "team member", "staff", "worker", "consultant"
- GraphQL field:
employees(undercompany) - Key fields:
id: Employee/resource identifierfullName: Full nameuserId: User account ID- Skills, bill rates, titles, etc.
Planning / Allocations
- User terms: "allocation", "assignment", "booking", "planning", "schedule", "workload", "capacity planning"
- GraphQL fields:
taskPlanning: Planned hours (forward-looking planning)bookings: Confirmed bookings (actual assignments/budgets/estimates)conflicts: Days where a user is planned more than their available hours
- Key concepts:
- Task Planning: Future/planned work allocation with hours per day
- Bookings: Confirmed time allocations with start/end dates (also called "budget" or "estimate")
- Note: Sometimes users refer to
taskPlanningas "booking". The LLM must infer from context whether they mean actualbookings(budgets/estimates) ortaskPlanning(forward-looking planning) - Allocation: General term for assigning work to resources
- Capacity: Total available hours for a resource, stored in
DailyCapacityfor the user - Utilization: Percentage of capacity being used
- Conflict: A day where user is planned more than their available hours (plannedAmount > capacityAmount)
Time & Dates
- User terms: "this week", "next month", "Q1", "sprint", "period"
- GraphQL: Date fields use ISO 8601 format (YYYY-MM-DD)
- Common patterns:
- Date ranges:
startDateandendDatefields - Planning dates:
datefield intaskPlanning - Booking periods:
startDateandendDateinbookings
- Date ranges:
Common User Queries → GraphQL Translation
"Show me all my projects"
query {
company {
projects(first: 100) {
items {
iD
projectName
startDate
endDate
}
}
}
}
"Who's working on project X?"
query {
company {
projects(
where: [
{
path: "iD"
comparison: equal
value: ["X"]
}
]
first: 100
) {
items {
iD
projectName
projetTasks {
id
name
ressource_Id
}
}
}
}
}
"What's John's workload this week?"
# Step 1: Find John's id
query {
company {
employees(
where: [
{
path: "fullName"
comparison: contains
value: ["John"]
}
]
first: 10
) {
items {
id
fullName
}
}
}
}
# Step 2: Query taskPlanning for John's resourceId and date range
# (Use the resourceId from step 1, and calculate startOfWeek/endOfWeek dates)
query {
company {
taskPlanning(
where: [
{
path: "resourceId"
comparison: equal
value: ["<resourceId from step 1>"]
}
{
path: "date"
comparison: greaterThanOrEqual
value: ["2024-01-01"]
}
{
path: "date"
comparison: lessThanOrEqual
value: ["2024-01-07"]
}
]
) {
items {
date
amount
resourceId
}
}
}
}
# Sum the 'amount' field for all items to get total planned hours (not capacity - capacity is in DailyCapacity)
"Show me conflicts / over-allocations"
query getConflictsAfterADate {
company {
id
name
conflicts(
first: 100
where: [
{
path: "date"
comparison: greaterThanOrEqual
value: ["2025-12-19"]
}
]
) {
totalCount
items {
date
capacityAmount
plannedAmount
user {
id
fullName
}
taskPlannings {
amount
projects {
iD
projectName
fondDeFinancement {
id
name
}
}
projetTasks {
id
name
startDate
projectedEnd
}
}
}
}
}
}
Conflict Definition: A conflict is a day where a user is planned more than their available hours (plannedAmount > capacityAmount). The conflicts entry point already pre-filters for this condition, so all results returned are conflicts by definition.
Key Fields:
date: Date of the conflictcapacityAmount: User's maximum work hours (available capacity)plannedAmount: Total hours planned for this user for this dateuser: The user/resource experiencing the conflict (ResourceGraph type)taskPlannings: List of plannings for the user for this date, includes tasks and project informationamount: Hours planned for this specific planningprojects: Project information (note:fondDeFinancement= Client)projetTasks: Task information
Filtering Conflicts:
Filters follow the same pattern as always using WhereExpression with path, comparison, and value.
Filter by time period (e.g., "this month"):
where: [
{
path: "date"
comparison: greaterThanOrEqual
value: ["2025-01-01"]
},
{
path: "date"
comparison: lessThanOrEqual
value: ["2025-01-31"]
}
]
Filter by user (using path propagation):
where: [
{
path: "user.fullName"
comparison: contains
value: ["John"]
}
]
You can combine filters and use any user field via path propagation (e.g., user.id, user.fullName, user.resourceId).
"What tasks are due this month?"
query {
company {
tasks(
where: [
{
path: "projectedEnd"
comparison: greaterThanOrEqual
value: ["2024-01-01"]
}
{
path: "projectedEnd"
comparison: lessThanOrEqual
value: ["2024-01-31"]
}
]
first: 100
) {
items {
id
name
projectedEnd
realEnd
}
}
}
}
Field Name Variations
Beeye GraphQL uses mixed naming conventions:
- camelCase:
projectName,startDate,fullName - PascalCase:
iD,Id(note:iDnotidfor projects!) - snake_case:
resourceId,projectId,taskId
Important: Project IDs use iD (capital I, capital D), not id!
Pagination
Most entry points that support the first parameter also support pagination via the pageInfo object.
Pagination Structure:
{
pageInfo {
hasNextPage
endCursor
}
}
How to use pagination:
first: Number of items to fetch per pageafter: Cursor for next page (set toendCursorfrom previous page'spageInfo)- For the first page,
aftershould benullor omitted - Check
hasNextPageto know if there are more pages - Use
endCursorfrom current page asafterparameter for next page
Example:
# First page
query {
company {
projects(first: 100) {
pageInfo {
hasNextPage
endCursor
}
items {
iD
projectName
}
}
}
}
# Next page (using endCursor from first page)
query {
company {
projects(first: 100, after: "<endCursor from previous page>") {
pageInfo {
hasNextPage
endCursor
}
items {
iD
projectName
}
}
}
}
Common Filters
Use the where parameter in GraphQL queries with WhereExpression input type. Multiple filters in an array are combined with AND logic by default.
WhereExpression Structure
{
path: "fieldName"
comparison: equal
value: ["value"] # Array of strings, can have multiple values
connector: and # Optional: and or or (default: and)
negate: false # Optional: negate the expression
}
Complex Filter Paths
Filter paths can traverse relationships using dot notation. This works for all graphs, not just specific ones.
Example: Filter employees where their direction name contains "aaaaa"
where: [
{
path: "direction.directionName"
comparison: contains
value: ["aaaaa"]
}
]
Example: Filter projects by manager's name
where: [
{
path: "responsable.fullName"
comparison: contains
value: ["John"]
}
]
You can traverse multiple levels: "level1.level2.level3.fieldName"
Comparison Values
- Equality:
equal,in,notIn - Numeric/Object/Date:
greaterThan,greaterThanOrEqual,lessThan,lessThanOrEqual - String:
startsWith,endsWith,contains,like
Connector Values
and(default) - combine with AND logicor- combine with OR logic
Common Filter Examples
Equals:
where: [
{
path: "fieldName"
comparison: equal
value: ["value"]
}
]
Greater than or equal (for dates/numbers):
where: [
{
path: "projectedEnd"
comparison: greaterThanOrEqual
value: ["2024-01-01"]
}
]
Less than or equal:
where: [
{
path: "projectedEnd"
comparison: lessThanOrEqual
value: ["2024-12-31"]
}
]
Contains text:
where: [
{
path: "name"
comparison: contains
value: ["text"]
}
]
In list (multiple values):
where: [
{
path: "id"
comparison: in
value: ["id1", "id2", "id3"]
}
]
Starts with:
where: [
{
path: "projectName"
comparison: startsWith
value: ["Project"]
}
]
Multiple filters (AND by default):
where: [
{
path: "projectedEnd"
comparison: greaterThanOrEqual
value: ["2024-01-01"]
}
{
path: "projectedEnd"
comparison: lessThanOrEqual
value: ["2024-01-31"]
}
]
OR logic using connector:
where: [
{
path: "field1"
comparison: equal
value: ["value1"]
connector: or
}
{
path: "field2"
comparison: greaterThan
value: ["value2"]
}
]
Complex nested filters (using groupedExpressions for OR logic):
where: [
{
groupedExpressions: [
{
path: "field1"
comparison: equal
value: ["value1"]
connector: or
},
{
path: "field2"
comparison: greaterThan
value: ["value2"]
connector: or
}
]
}
]
Status & State Fields
isTentative: Planning is tentative (not confirmed)realEnd: Actual completion date (vsprojectedEnd)
Workspace Context
workSpaceId: Optional workspace/team context for planning- Some queries may filter by workspace
Tips for LLMs
- Always check field names: Use
ExploreGraphQlTypeto see exact field names - Handle pagination: Large lists need multiple queries with
aftercursor - Date formats: Always use ISO 8601 (YYYY-MM-DD)
- Project IDs: Use
iDnotidfor projects - User language: Translate user terms to GraphQL fields using this guide
- Planned hours calculation: Sum
amountfromtaskPlanningfor a resource in a date range to get total planned hours. Capacity is stored inDailyCapacityfor the user. - Conflicts: Use the
conflictsentry point to find days where users are over-allocated. This entry point already filters for plannedAmount > capacityAmount, so all results are conflicts by definition. - Filter syntax: Use
WhereExpressioninput type withcomparisonenum values (equal, greaterThanOrEqual, contains, etc.) - all lowercase camelCase - Multiple filters: Multiple filters in array use AND by default; use
connector: Orfor OR logic - Value arrays:
valuefield is always an array of strings, even for single values - GraphQL queries: Write complete GraphQL queries with proper filter structure in the
whereparameter
Example: Understanding "Show me who's overloaded"
User says: "Show me who's overloaded"
Translation steps:
- "overloaded" = conflicts (planned hours > capacity)
- Use the
conflictsentry point undercompany - Filter by date range if needed using
whereparameter - The query returns all conflicts with:
- User information
- Date of conflict
- Capacity vs planned amounts
- All task plannings causing the conflict (with project and task details)
- Note:
fondDeFinancementin projects = Client