Trabalho 1: gerenciador de Workflow

Descrição

Implemente um gerenciador de workflow. Os uduários do sistema dever ter:

O sistema deve gerenciar um conjunto de tarefas, e cada tarefa deve ter os seguintes componentes:

Deve haver uma lista de tarefas pendentes, e sempre que uma tarefa é disparada, um email deve ser enviado a todos os que podem executá-la.

Deve haver uma maneira de verificar todas as taerfas pendentes.

Cada workflow deve ser especificado em um arquivo contendo descrições de usuários e tarefas. Por exemplo, esta é uma especificação parcial de um fluxo de trabalho de uma pizzaria que faz entregas de trem:

(usuario
  (id "fulano")
  (email "fulano@nowhere.land")
  (papeis (cozinheiro maquinista)))

(usuario
  (id "john doe")
  (email "doe@somewhere.out.there")
  (papeis (gerente)))

(tarefa
  (id entregar-pizza)
  (dados-entrada endereco)
  (pre-req (transporte-pizza))
  (papeis  (entregador gerente))
  (timeout (eliminar-entregador)))

(tarefa
  (id transportar-pizza)
  (dados-entrada (endereco))
  (pre-req  (checkup-trem fazer-pizza))
  (papeis   (maquinista))
  (disparar (entregar-pizza))
  (timeout  (eliminar-maquinista))
  (dados-saida (endereco))