Trabalho: 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.

Cada usuário deve poder entrar no sistema e verificar todas as taerfas pendentes (via TELNET). O sisteama deve aceitar mais de uma conexão ao mesmo tempo.

Dependendo de seu papel, o usuário pode adicionar novas tarefas. Quando a descrição das tarefas for atualizada, não use um lock global -- tente travar somente a parte do sistema afetada.

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")
  (senha "senha")
  (papeis (cozinheiro maquinista)))

(usuario
  (id "john doe")
  (email "doe@somewhere.out.there")
  (senha "secret")
  (papeis (gerente))
  (cria-tarefas #t))

(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))