public function filaAtendimento(
        Unidade $unidade,
        Usuario $usuario,
        array $servicosUsuario,
        $tipoFila = self::TIPO_TODOS,
        $maxResults = 0
    ) {
        $ids = [];
        foreach ($servicosUsuario as $servico) {
            if ($servico->getUsuario()->getId() === $usuario->getId()) {
                $ids[]   = $servico->getServico()->getId();
            }
        }
        
        if (empty($ids)) {
            return [];
        }
        
        $builder = $this
            ->builder()
            ->join(
                ServicoUsuario::class,
                'servicoUsuario',
                'WITH',
                'servicoUsuario.servico = servico AND servicoUsuario.usuario = :usuario'
            )
            ->andWhere('(atendimento.usuario IS NULL OR atendimento.usuario = :usuario)')
            ->andWhere('atendimento.status = :status')
            ->andWhere('atendimento.unidade = :unidade')
            ->andWhere('servico.id IN (:servicos)');
        
        // se nao atende todos, filtra pelo tipo de atendimento
        switch ($tipoFila) {
            case self::TIPO_NORMAL:
            case self::TIPO_PRIORIDADE:
                $s = ($tipoFila === self::TIPO_NORMAL) ? '=' : '>';
                $where = "prioridade.peso $s 0";
                $builder->andWhere($where);
                break;
            case self::TIPO_AGENDAMENTO:
                $builder->andWhere("atendimento.dataAgendamento IS NOT NULL");
                break;
        }
        
        $params = [
            'status'   => AtendimentoService::SENHA_EMITIDA,
            'unidade'  => $unidade,
            'usuario'  => $usuario,
            'servicos' => $ids,
        ];
        
        $this->applyOrders($builder, $unidade, $usuario);

        $query = $builder
            ->setParameters($params)
            ->getQuery();

        if ($maxResults > 0) {
            $query->setMaxResults($maxResults);
        }

        return $query->getResult();
    }