What this work can be given to: the crews, the technicians in each of them, the technicians no
crew is showing, and — asked for — the suppliers.
A search is words, not a phrase, and a technician’s words include the crew they are listed under, so “raj mechanical” names one of the two Rajs on the list.
Nested and indented by depth, and both levels are selectable: a job goes to a crew, or to a named
person in it. Current membership is many-to-many, so somebody in two crews is listed under both and
either choice writes the same worker. A technician no surviving crew shows — in no crew, or in one
this job’s scope excluded — comes back with a null team_id, for the client to head its own block
over: nobody is silently dropped from the list.
Narrowed by whatever the caller knows. A team’s own scope follows the rule it is documented with — naming no category, site, type or role means unrestricted — and the category test follows the classification tree, so a crew that handles Pumps is offered for a centrifugal pump. A technician is offered where they are based at the site or can travel to it, nested under a crew exactly as loose, so the two halves of the list cannot disagree. A supplier is offered where contracts.vendor_sites says they cover the site, or where they name no site at all. Refuses nothing: the three assignment functions decide whether the caller may act on what this returns.
Headers
Preference
params=single-object Body
What this work can be given to: the crews, the technicians in each of them, the technicians no crew is showing, and — asked for — the suppliers.
A search is words, not a phrase, and a technician's words include the crew they are listed under, so "raj mechanical" names one of the two Rajs on the list.
Nested and indented by depth, and both levels are selectable: a job goes to a crew, or to a named
person in it. Current membership is many-to-many, so somebody in two crews is listed under both and
either choice writes the same worker. A technician no surviving crew shows — in no crew, or in one
this job's scope excluded — comes back with a null team_id, for the client to head its own block
over: nobody is silently dropped from the list.
Narrowed by whatever the caller knows. A team's own scope follows the rule it is documented with — naming no category, site, type or role means unrestricted — and the category test follows the classification tree, so a crew that handles Pumps is offered for a centrifugal pump. A technician is offered where they are based at the site or can travel to it, nested under a crew exactly as loose, so the two halves of the list cannot disagree. A supplier is offered where contracts.vendor_sites says they cover the site, or where they name no site at all. Refuses nothing: the three assignment functions decide whether the caller may act on what this returns.
Response
OK

