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