init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,611 @@
<?php
namespace App\Services\AtencaoBasica\AtividadeColetiva;
use App\Enums\AtencaoBasica\AtendimentoIndividual\LocalAtendimento;
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
use App\Models\AtencaoBasica\AtividadeColetiva\AtividadeColetiva;
use App\Models\AtencaoBasica\AtividadeColetiva\AtividadeTipo;
use App\Models\AtencaoBasica\AtividadeColetiva\Participante;
use App\Models\AtencaoBasica\AtividadeColetiva\Procedimento;
use App\Models\AtencaoBasica\AtividadeColetiva\ProcedimentoColetivo;
use App\Models\AtencaoBasica\AtividadeColetiva\Profissional;
use App\Models\AtencaoBasica\AtividadeColetiva\Pse;
use App\Models\AtencaoBasica\AtividadeColetiva\PublicoAlvo;
use App\Models\AtencaoBasica\AtividadeColetiva\ReuniaoTema;
use App\Models\AtencaoBasica\AtividadeColetiva\SaudePratica;
use App\Models\AtencaoBasica\AtividadeColetiva\SaudeTema;
use App\Models\AtencaoBasica\AtividadeColetiva\Turno;
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
use App\Models\AtencaoBasica\Parametrizacao\OutrosPermissaoOcupacao;
use App\Models\AtencaoBasica\Parametrizacao\OutrosPermissaoEsus;
use App\Enums\AtencaoBasica\AtividadeColetiva\OutrasPermissoesEsus as OutrasPermissoesEsusEnum;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Cns\TermoInvalido;
use App\Models\Sigtap\Ocupacao;
use App\Services\AtencaoBasica\Procedimento\ProcedimentoService;
use App\Services\Service;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
class AtividadeColetivaService extends Service
{
public static function datatable()
{
$atividades = DB::table('atencao_basica_atividade_coletiva AS atividade_coletiva')
->select([
'atividade_coletiva.id',
'atividade_coletiva.data_cadastro',
'atividade_coletiva.total_participantes',
'atividade_tipo.descricao AS atividade_tipo',
DB::raw('CASE WHEN cadastro_cidadao.nome_social IS NOT NULL THEN cadastro_cidadao.nome_social ELSE cadastro_cidadao.nome END AS profissional_responsavel'),
DB::raw('CASE WHEN inep IS NOT NULL THEN inep WHEN local_atividade IS NOT NULL THEN local_atividade ELSE cnes END AS local_atividade'),
DB::raw('GROUP_CONCAT(saude_temas.descricao SEPARATOR ", ") AS saude_temas'),
'cidadao_exportacao.nome as profissional_exportacao',
DB::raw("DATE_FORMAT(exportacao.created_at, '%d/%m/%Y') AS data_exportacao"),
DB::raw("DATE_FORMAT(exportacao.created_at, '%H:%i') AS horario_exportacao")
])
->leftJoin('cadastro_usuario', 'cadastro_usuario.id', 'atividade_coletiva.usuario_id')
->leftJoin('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
->leftJoin('atencao_basica_cadastro_atividade_tipo AS atividade_tipo', 'atividade_tipo.id', 'atividade_coletiva.atividade_tipo_id')
->leftJoin('atencao_basica_atividade_coletiva_saude_tema AS tema', 'tema.atividade_coletiva_id', 'atividade_coletiva.id')
->leftJoin('atencao_basica_cadastro_saude_tema AS saude_temas', 'saude_temas.id', 'tema.saude_tema_id')
->leftJoin('cadastro_usuario as usuario_exportacao', 'usuario_exportacao.id', 'atividade_coletiva.usuario_exportacao_id')
->leftJoin('cadastro_cidadao as cidadao_exportacao', 'cidadao_exportacao.id', 'usuario_exportacao.cidadao_id')
->leftJoin('atencao_basica_exportacao as exportacao', 'exportacao.id', 'atividade_coletiva.exportacao_id')
->groupBy('atividade_coletiva.id');
return datatables()
->of($atividades)
->filterColumn('atividade_coletiva.data_cadastro', function ($query, $keyword) {
$query->whereRaw("DATE_FORMAT(atividade_coletiva.data_cadastro, '%d/%m/%Y') like ?", ["%{$keyword}%"])
->orWhereRaw(
"CONCAT(
SUBSTR(atividade_coletiva.data_cadastro,9,2),
SUBSTR(atividade_coletiva.data_cadastro,6,2),
SUBSTR(atividade_coletiva.data_cadastro,1,4)
) like ?",
["%{$keyword}%"]
);
})
->filterColumn('profissional_responsavel', function ($query, $keyword) {
$query->whereRaw("CASE WHEN cadastro_cidadao.nome_social IS NOT NULL THEN cadastro_cidadao.nome_social ELSE cadastro_cidadao.nome END like ?", ["%{$keyword}%"]);
})
->filterColumn('local_atividade', function ($query, $keyword) {
$query->whereRaw("CASE WHEN inep IS NOT NULL THEN inep WHEN local_atividade IS NOT NULL THEN local_atividade ELSE cnes END like ?", ["%{$keyword}%"]);
})
->filterColumn('saude_temas', function ($query, $keyword) {
$query->havingRaw("GROUP_CONCAT(saude_temas.descricao SEPARATOR ', ') like ?", ["%{$keyword}%"]);
})
->skipTotalRecords()
->toJson();
}
public static function index()
{
return [
'model' => self::getModelData(),
'form' => [],
];
}
public static function getEquipes(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'atencao_basica_parametrizacao_equipe.id AS id',
DB::raw("
CONCAT(
CASE
WHEN atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN CONCAT('INE: ', atencao_basica_parametrizacao_area.numero_ine)
ELSE ''
END,
CASE
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL AND atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN ' - Área: '
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL THEN 'Área: '
ELSE ''
END,
COALESCE(atencao_basica_parametrizacao_area.descricao, ''),
CASE
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL AND (atencao_basica_parametrizacao_area.numero_ine IS NOT NULL OR atencao_basica_parametrizacao_area.descricao IS NOT NULL) THEN ' - Microárea: '
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL THEN 'Microárea: '
ELSE ''
END,
COALESCE(atencao_basica_parametrizacao_microarea.descricao, '')
) AS descricao
")
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->leftJoin('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id))
->get();
}
public static function getUnidades(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_unidade.id AS id',
'cadastro_unidade.nome_fantasia AS nome_fantasia',
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->distinct()
->get();
}
public static function getInfraestruturas(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_infraestrutura.id AS id',
DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome'),
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
->distinct()
->orderBy('nome')
->get();
}
public static function getOcupacoes()
{
$usuario = Usuario::findOrFail(request()->usuario_id);
$permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::ATIVIDADE_COLETIVA)->get();
$codigos = $permissao->pluck('ocupacao');
return $usuario->lotacoes
->filter(function ($lotacao) use ($codigos) {
return $codigos->contains($lotacao->ocupacao->codigo);
})
->pluck('ocupacao');
}
private static function getFormData($cadastro = null)
{
return [
'data_atual' => Carbon::now()->format('d/m/Y'),
'turnos' => Turno::orderBy('id')->get(),
'pse_id' => Pse::orderBy('id')->get(),
'atividade_tipo' => AtividadeTipo::orderBy('id')->get(),
'reuniao_temas' => ReuniaoTema::orderBy('id')->get(),
'publico_alvo' => PublicoAlvo::orderBy('id')->get(),
'saude_temas' => SaudeTema::orderBy('descricao')->get(),
'saude_pratica' => SaudePratica::orderBy('id')->get(),
'procedimentos_coletivos' => ProcedimentoColetivo::orderBy('id')->get(),
'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao),
];
}
private static function getModelData($cadastro = null)
{
return [
'id' => $cadastro->id ?? null,
'cadastro' => [
'data_cadastro' => $cadastro->data_cadastro ?? null,
'pse_id' => $cadastro->pse_id ?? null,
'inep' => isset($cadastro->inep) ? strval($cadastro->inep) : null,
'local_atividade' => $cadastro->local_atividade ?? null,
'cnes' => $cadastro->cnes ?? null,
'turno_id' => $cadastro->turno_id ?? null,
],
'profissional' => [
'usuario' => [
'id' => $cadastro->usuario->id ?? null,
'cidadao_nome' => $cadastro->usuario->cidadao->nome ?? null,
],
'unidade_id' => $cadastro->equipe->unidade_id ?? null,
'infraestrutura_id' => $cadastro->equipe->infraestrutura_id ?? null,
'equipe_id' => $cadastro->equipe_id ?? null,
'ocupacao_id' => $cadastro->usuario_ocupacao_id ?? null,
],
'profissionais' => isset($cadastro->id) ?
Profissional::where('atividade_coletiva_id', $cadastro->id)
->get()
->map(fn ($tipo) => [
'profissional_id' => $tipo->usuario_id,
'nome' => $tipo->usuario->cidadao->nome,
'ocupacao_id' => $tipo->usuario_ocupacao_id ?? null,
'ocupacaoNome' => ($tipo->ocupacao->codigo) . ' - ' . ($tipo->ocupacao->nome),
]) : [],
'reuniao_temas' => isset($cadastro->reuniaoTemas) ? $cadastro->reuniaoTemas->pluck('id') : [],
'publico_alvo' => isset($cadastro->publicoAlvo) ? $cadastro->publicoAlvo->pluck('id') : [],
'saude_temas' => isset($cadastro->saudeTemas) ? $cadastro->saudeTemas->pluck('id') : [],
'saude_pratica' => isset($cadastro->saudePratica) ? $cadastro->saudePratica->pluck('id') : [],
'procedimento_coletivo_id' => $cadastro->procedimento_coletivo_id ?? null,
'atividade' => [
'atividade_tipo_id' => $cadastro->atividade_tipo_id ?? null,
'total_participantes' => $cadastro->total_participantes ?? null,
'avaliacoes_alteradas' => $cadastro->avaliacoes_alteradas ?? null,
],
'participante' => $cadastro->participante ?? [],
'participantes' => isset($cadastro->id) ?
Participante::where('atividade_coletiva_id', $cadastro->id)
->get()
->map(fn ($tipo) => [
'id' => $tipo->paciente_id,
'nome' => $tipo->paciente->cidadao->nome,
'nome_social' => $tipo->paciente->cidadao->nome_social,
'cns' => $tipo->paciente->cidadao->cns,
'avaliacao_alterada' => $tipo->avaliacao_alterada ? 'Sim' : 'Não',
'peso' => $tipo->peso,
'altura' => $tipo->altura,
'parou_fumar' => $tipo->parou_de_fumar ? 'Sim' : 'Não',
'abandonou_grupo' => $tipo->abandonou_grupo ? 'Sim' : 'Não'
]) : [],
'procedimento' => $cadastro->procedimentoPadrao ?? [],
'procedimentos' => isset($cadastro->id) ?
Procedimento::where('atividade_coletiva_id', $cadastro->id)
->where('procedimento_padrao', '=', true)
->get()
->map(fn ($tipo) => [
'id' => $tipo->id,
'procedimento_id' => $tipo->procedimento->id,
'codigo' => $tipo->procedimento->codigo,
'nome' => $tipo->procedimento->nome,
'padrao' => $tipo->procedimento_padrao
])
: [],
'procedimento_individual' => $cadastro->procedimentoIndividual ?? [],
'procedimentos_individuais' => isset($cadastro->id) ?
Procedimento::where('atividade_coletiva_id', $cadastro->id)
->where('paciente_id', '!=', null)
->get()
->map(fn ($tipo) => [
'id' => $tipo->id,
'codigo' => $tipo->procedimento->codigo,
'nome' => $tipo->procedimento->nome,
'paciente_id' => $tipo->paciente_id,
'padrao' => $tipo->procedimento_padrao
])
: [],
];
}
public static function show($id)
{
return AtividadeColetiva::find($id);
}
public static function create()
{
return [
'form' => self::getFormData(),
'model' => self::getModelData(),
];
}
public static function edit($id)
{
$cadastro = self::show($id);
return [
'form' => self::getFormData($cadastro),
'model' => self::getModelData($cadastro),
];
}
public static function store()
{
self::validate();
$atividadeColetiva = AtividadeColetiva::where('id', request()->id)
->first() ?? new AtividadeColetiva();
$atividadeColetiva->id = request()->id;
$cadastro = request()->cadastro;
$atividadeColetiva->pse_id = $cadastro['pse_id'];
$atividadeColetiva->inep = $cadastro['inep'];
$atividadeColetiva->local_atividade = $cadastro['local_atividade'];
$atividadeColetiva->cnes = $cadastro['cnes'];
$atividadeColetiva->turno_id = $cadastro['turno_id'];
$atividadeColetiva->data_cadastro = $cadastro['data_cadastro'];
$atividade = request()->atividade;
$atividadeColetiva->atividade_tipo_id = $atividade['atividade_tipo_id'];
$atividadeColetiva->total_participantes = $atividade['total_participantes'];
$atividadeColetiva->avaliacoes_alteradas = $atividade['avaliacoes_alteradas'];
$profissional = request()->profissional;
$atividadeColetiva->usuario_id = $profissional['usuario']['id'];
$atividadeColetiva->equipe_id = $profissional['equipe_id'];
$atividadeColetiva->usuario_ocupacao_id = $profissional['ocupacao_id'];
$atividadeColetiva->data_usuario_responsavel = $cadastro['data_cadastro'];
$procedimento = array_merge(request()->procedimentos, request()->procedimentos_individuais);
$atividadeColetiva->procedimento_coletivo_id = request()->procedimento_coletivo_id;
$atividadeColetiva->save();
$participante = Participante::where('atividade_coletiva_id', $atividadeColetiva->id)->pluck('id')->toArray();
DB::table('integracao_esus_inconsistencia_atividade_coletiva_participante')
->whereIn('atividade_coletiva_participante_id', $participante)
->delete();
Participante::where('atividade_coletiva_id', $atividadeColetiva->id)->delete();
self::saveParticipantes(request()->participantes, $atividadeColetiva);
Procedimento::where('atividade_coletiva_id', $atividadeColetiva->id)->delete();
self::saveProcedimento($procedimento, $atividadeColetiva);
$atividadeColetiva->publicoAlvo()->sync(request()->publico_alvo);
$atividadeColetiva->reuniaoTemas()->sync(request()->reuniao_temas);
$atividadeColetiva->saudePratica()->sync(request()->saude_pratica);
$atividadeColetiva->saudeTemas()->sync(request()->saude_temas);
Profissional::where('atividade_coletiva_id', $atividadeColetiva->id)->delete();
self::saveProfissionais(request()->profissionais, $atividadeColetiva);
self::storeProcedimentos(request()->all(), $atividadeColetiva->id, $procedimento);
}
private static function storeProcedimentos($params, $atividadeColetivaId, $procedimentos) {
$cadastro = $params['cadastro'];
$profissional = $params['profissional'];
$participantes = $params['participantes'];
$procedimentosFicha = [];
foreach ($procedimentos as $procedimento) {
$procedimentosFicha[] = [
'id' => $procedimento['procedimento_id'],
'quantidade' => 1,
];
}
$ficha = [];
foreach ($participantes as $participante) {
$ficha[] = [
'id' => null,
'atendimento_individual_id' => null,
'atividade_coletiva_id' => $atividadeColetivaId,
'paciente_id' => $participante['id'],
'data_usuario_responsavel' => $cadastro['data_cadastro'],
'equipe_id' => $profissional['equipe_id'],
'ocupacao_id' => $profissional['ocupacao_id'],
'usuario_id' => $profissional['usuario']['id'],
'local_atendimento_id' => LocalAtendimento::UBS,
'afericao_pa' => null,
'altura' => $participante['altura'],
'tipo_atendimento_id' => null,
'curativo' => null,
'exame_laboratorial' => null,
'glicemia' => null,
'teste_rapido' => null,
'procedimento_pequena_cirurgia' => null,
'administracao_medicamento' => null,
'peso' => $participante['peso'],
'temperatura' => null,
'microarea_id' => null,
'escuta_inicial' => null,
'turno_id' => $cadastro['turno_id'],
'procedimentos' => $procedimentosFicha,
];
}
$atendimento = [
'id' => null,
'origem' => 'atividade_coletiva',
'cadastro' => [
'data_usuario_responsavel' => $cadastro['data_cadastro'],
'equipe_id' => $profissional['equipe_id'],
'ocupacao_id' => $profissional['ocupacao_id'],
'usuario_id' => $profissional['usuario']['id'],
],
'atendimentos' => $ficha,
'procedimento_consolidado' => [
'afericao_pa' => null,
'altura' => null,
'curativo' => null,
'exame_laboratorial' => null,
'glicemia_capilar' => null,
'peso' => null,
'temperatura' => null,
]
];
$cbo = Ocupacao::find($profissional['ocupacao_id'])->codigo;
$CboPermissao = OutrosPermissaoEsus::where('permissao_id', OutrasPermissoesEsusEnum::PROCEDIMENTOS)
->where('codigo', $cbo)
->exists();
if ($CboPermissao && !empty($procedimentosFicha)) {
ProcedimentoService::saveStore($atendimento);
}
}
private static function saveProfissionais($profissionais, $atividadeColetiva) {
foreach ($profissionais as $prof) {
$profissional = Profissional::where('usuario_id', $prof['profissional_id'])
->where('atividade_coletiva_id', $atividadeColetiva->id)
->first() ?? new Profissional();
$profissional->usuario_id = $prof['profissional_id'];
$profissional->atividade_coletiva_id = $atividadeColetiva->id;
$profissional->usuario_ocupacao_id = $prof['ocupacao_id'];
$profissional->data_usuario_responsavel = $atividadeColetiva['data_usuario_responsavel'];
$profissional->save();
}
}
private static function saveParticipantes($participantes, $atividadeColetiva) {
foreach ($participantes as $participante) {
$paciente = Participante::where('paciente_id', $participante['id'])
->where('atividade_coletiva_id', $atividadeColetiva->id)
->first() ?? new Participante();
$paciente->paciente_id = $participante['id'];
$paciente->atividade_coletiva_id = $atividadeColetiva->id;
$paciente->peso = $participante['peso'];
$paciente->altura = $participante['altura'];
$paciente->avaliacao_alterada = $participante['avaliacao_alterada'] == 'Sim' ? true : false;
$paciente->parou_de_fumar = $participante['parou_fumar'] == 'Sim' ? true : false;
$paciente->abandonou_grupo = $participante['abandonou_grupo'] == 'Sim' ? true : false;
$paciente->save();
}
}
private static function saveProcedimento($procedimentos, $atividadeColetiva) {
foreach ($procedimentos as $proc) {
$procedimento = Procedimento::where('procedimento_id', $proc['procedimento_id'])
->where('atividade_coletiva_id', $atividadeColetiva->id)
->first() ?? new Procedimento();
$procedimento->procedimento_id = $proc['procedimento_id'];
$procedimento->atividade_coletiva_id = $atividadeColetiva->id;
$procedimento->paciente_id = !isset($proc['paciente_id']) ? null : $proc['paciente_id'];
$procedimento->procedimento_padrao = !isset($proc['paciente_id']) ? true : false;
$procedimento->save();
}
}
private static function validate()
{
return request()->validate([
'cadastro.data_cadastro' => [
'required',
'date',
],
'cadastro.pse_id' => [
'nullable',
'integer',
],
'cadastro.inep' => [
'nullable',
'required_if:cadastro.pse_id,1,2',
'string',
'max:8'
],
'cadastro.local_atividade' => [
'nullable',
'string',
'max:250'
],
'cadastro.cnes' => [
'nullable',
'string'
],
'cadastro.turno_id' => [
'required',
'integer',
],
'profissional.usuario.id' => [
'required',
'integer',
Rule::exists(Usuario::class, 'id'),
],
'profissional.unidade_id' => [
'required',
'integer',
Rule::exists(Unidade::class, 'id'),
],
'profissional.infraestrutura_id' => [
'required',
'integer',
Rule::exists(Infraestrutura::class, 'id'),
],
'profissional.equipe_id' => [
'required',
'integer',
Rule::exists(Equipe::class, 'id'),
],
'profissional.ocupacao_id' => [
'required',
'integer',
Rule::exists(Ocupacao::class, 'id'),
],
'profissionais.usuario.id' => [
'nullable',
'integer',
Rule::exists(Usuario::class, 'id'),
],
'profissionais.ocupacao_id' => [
'nullable',
'integer',
Rule::exists(Ocupacao::class, 'id'),
],
'atividade.atividade_tipo_id' => [
'required',
'integer',
],
'atividade.total_participantes' => [
'required',
'integer',
],
'atividade.avaliacoes_alteradas' => [
'nullable',
'integer',
'max:999'
],
'participantes' => [
'nullable',
'required_if:atividade.atividade_tipo_id,5,6',
'array'
],
'reuniao_temas' => [
'nullable',
'required_if:atividade.atividade_tipo_id,1,2,3',
'array',
'max:7'
],
'publico_alvo' => [
'nullable',
'required_if:atividade.atividade_tipo_id,4,5,6,7',
'array',
'max:17'
],
'saude_temas' => [
'nullable',
'required_if:atividade.atividade_tipo_id,4,5,7',
'array',
'max:16'
],
'saude_pratica' => [
'nullable',
'required_if:atividade.atividade_tipo_id,6',
'array',
'max:7'
],
]);
}
}

View File

@@ -0,0 +1,95 @@
<?php
namespace App\Services\AtencaoBasica\AtividadeColetiva;
use App\Models\AtencaoBasica\AtividadeColetiva\AtividadeColetiva;
use App\Models\AtencaoBasica\AtividadeColetiva\AtividadeTipo;
use App\Models\AtencaoBasica\AtividadeColetiva\Participante;
use App\Models\AtencaoBasica\AtividadeColetiva\Profissional;
use App\Models\AtencaoBasica\AtividadeColetiva\Pse;
use App\Models\AtencaoBasica\AtividadeColetiva\PublicoAlvo;
use App\Models\AtencaoBasica\AtividadeColetiva\ReuniaoTema;
use App\Models\AtencaoBasica\AtividadeColetiva\SaudePratica;
use App\Models\AtencaoBasica\AtividadeColetiva\SaudeTema;
use App\Models\AtencaoBasica\AtividadeColetiva\Turno;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Intranet\Cliente;
use App\Models\Sigtap\Ocupacao;
use App\Services\Service;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Str;
class FichaAtividadeColetivaService extends Service
{
public static function index($id)
{
$cadastro = AtividadeColetiva::where('id', $id)-> first();
return [
'form' => [
'data_atual' => Carbon::now()->format('d/m/Y'),
],
'turnos' => Turno::orderBy('id')->get(),
'atividade_tipos' => AtividadeTipo::orderBy('id')->get(),
'reuniao_temas' => ReuniaoTema::orderBy('id')->get(),
'publico_alvo' => PublicoAlvo::orderBy('id')->get(),
'saude_temas' => SaudeTema::orderBy('id')->get(),
'saude_pratica' => SaudePratica::orderBy('id')->get(),
'pse' => Pse::orderBy('id')->get(),
'pse_id' => $cadastro->pse_id ?? null,
'cadastro' => [
'usuario' => [
'id' => $cadastro->usuario->id ?? null,
'cidadao_nome' => $cadastro->usuario->cidadao->nome ?? null,
'cns' => $cadastro->usuario->cidadao->cns ? MaskUtil::getCnsMasked($cadastro->usuario->cidadao->cns) : 'NÃO INFORMADO',
'cbo' => Ocupacao::findOrFail($cadastro->usuario_ocupacao_id)->codigo,
'cnes' => $cadastro->equipe->unidade->cnes ?? null,
],
'total_participantes' => $cadastro->total_participantes ?? null,
'avaliacoes_alteradas' => $cadastro->avaliacoes_alteradas ?? null,
'inep' => $cadastro->inep,
'cnes' => $cadastro->cnes,
'local_atividade' => $cadastro->local_atividade,
'equipe_cnes' => $cadastro->equipe->unidade->cnes ?? null,
'numero_ine' => $cadastro->equipe->area->numero_ine ?? null,
'equipe_id' => $cadastro->equipe_id ?? null,
'ocupacao_id' => $cadastro->usuario_ocupacao_id ?? null,
'data_usuario_responsavel' => Carbon::parse($cadastro->data_usuario_responsavel)->format('d/m/Y'),
'turno_id' => $cadastro->turno_id ?? null,
'atividade_tipo_id' => $cadastro->atividade_tipo_id ?? null,
'reuniao_temas' => isset($cadastro->reuniaoTemas) ? $cadastro->reuniaoTemas->pluck('id') : [],
'publico_alvo' => isset($cadastro->publicoAlvo) ? $cadastro->publicoAlvo->pluck('id') : [],
'saude_temas' => isset($cadastro->saudeTemas) ? $cadastro->saudeTemas->pluck('id') : [],
'saude_pratica' => isset($cadastro->saudePratica) ? $cadastro->saudePratica->pluck('id') : [],
'codigo_sigtap' => $cadastro->procedimentoColetivo->codigo_sigtap ?? null,
],
'profissional' => [
'cns' => $cadastro->usuario->cidadao->cns ? MaskUtil::getCnsMasked($cadastro->usuario->cidadao->cns) : 'NÃO INFORMADO',
'cbo' => Ocupacao::findOrFail($cadastro->usuario_ocupacao_id)->codigo,
],
'profissionais' => Profissional::where('atividade_coletiva_id', $cadastro->id)
->get()
->map(fn ($tipo) => [
'cns' => $tipo->usuario->cidadao->cns ? MaskUtil::getCnsMasked($tipo->usuario->cidadao->cns) : 'NÃO INFORMADO',
'cbo' => Ocupacao::findOrFail($tipo->usuario_ocupacao_id)->codigo,
]),
'participantes' => Participante::where('atividade_coletiva_id', $cadastro->id)
->get()
->map(fn ($tipo) => [
'id' => $tipo->paciente_id,
'nome' => $tipo->paciente->cidadao->nome,
'nome_social' => $tipo->paciente->cidadao->nome_social,
'cns' => $tipo->paciente->cidadao->cns ? MaskUtil::getCnsMasked($tipo->paciente->cidadao->cns) : 'NÃO INFORMADO',
'data_nascimento' => $tipo->paciente->cidadao->data_nascimento ? (new Carbon($tipo->paciente->cidadao->data_nascimento))->format('d/m/Y') : null,
'sexo' => $tipo->paciente->cidadao->sexo_id,
'avaliacao_alterada' => $tipo->avaliacao_alterada ?? false,
'peso' => $tipo->peso,
'altura' => $tipo->altura,
'parou_fumar' => $tipo->parou_de_fumar ?? false,
'abandonou_grupo' => $tipo->abandonou_grupo ?? false
]),
];
}
}