Aller au contenu principal
Version: Actuelle

Process · medium — valider des feuilles d'heures

Le cas. Le manager choisit les feuilles d'heures à valider, puis confirme. L'outil RH attend une liste d'identifiants.

Ce que l'exemple montre. Une part qui est un ensemble (countable: false), des lignes envoyées comme identifiants (line_shape: ref), une écriture séparée des lectures, la confirmation du manager comme acte.

examples/actuelle/process-medium.yaml
# Process · medium — a manager approves timesheets. A SET, not a basket: each timesheet once,
# sent to the tool as a list of ids. The manager's confirmation is the act.
station:
id: validation-heures
name: Validation des heures

global:
language: fr
currency: EUR
locale: fr-FR

domain:
domain_type: saas
entity_name: feuille d'heures
entity_name_plural: feuilles d'heures


agent:
tone: professional
name: Validation des heures
persona: "un assistant qui prépare les validations du manager, sans jamais décider à sa place"
rules:
- "Ne jamais valider une feuille que le manager n'a pas choisie."
emoji: false
portals:
web:
widget:
origins: [https://heures.example.fr]

apis:
- name: rh-lecture
openapi_url: https://rh-api.example.fr/openapi.json
base_url: https://rh-api.example.fr
operations:
- {id: getTimesheets, access: read}
- {id: getOvertimeReport, access: read}
auth: {type: api_key, key_name: X-RH-Key, key_location: header, key_env: RH_READ_KEY}
- name: rh-ecriture # the write, separated so the boundary is visible
openapi_url: https://rh-api.example.fr/openapi.json
base_url: https://rh-api.example.fr
operations:
- {id: approveTimesheets, access: write}
auth: {type: api_key, key_name: X-RH-Key, key_location: header, key_env: RH_WRITE_KEY}

skills:
- name: feuilles
cognitive:
objective: "lister les feuilles d'heures en attente pour que le manager choisisse celles à valider"
diagnose: [l'équipe, la semaine]
invoke: {method: getTimesheets}
kinds: {feuille: {}}
present: # no price: nothing is sold here
fields:
name: {from: name, type: text, role: title}
countable: false # "3 × the week of Awa" is not a thing
submit:
- name: approve
mode: request
tool: approveTimesheets
line_shape: ref # the tool takes timesheet_ids: list[str]
args:
body.timesheet_ids: "$selection[kind=feuille]"
body.idempotency_key: "$action.key"
render: {component: cards}

- name: rapport-heures-sup
invoke: {method: getOvertimeReport}
render:
component: report
report:
headline: total_overtime_hours
headline_label: "heures supplémentaires"
unit: h

submit_guard:
confirm: true # the manager's own click files the approval

Ce qui se passe​

étapeCorerésultat
« les feuilles en attente de mon équipe »feuilles → getTimesheetsdes cartes, une par feuille
trois feuilles choisiesensemble : pas de quantitétrois lignes, pas de bouton −/+
« Valider » + confirmationapproveTimesheets avec timesheet_ids: [...]reçu dans la room
l'agent tente de valider seulconfirm: truerefusé sans le clic du manager

À retenir​

  • countable: false parle de la sélection ; line_shape: ref parle du tenant. Les deux sont nécessaires, et Core refuse ref sur une part qui a des quantités.
  • Limite d'aujourd'hui : la clé RH_WRITE_KEY est celle de la station. Deux managers valident sous la même identité, pour l'outil RH. Ne déployez ce cas que si un seul manager l'utilise, ou attendez l'identité par personne (version cible).