This commit is contained in:
@@ -0,0 +1,446 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\AtencaoBasica\FichaComplementar;
|
||||
|
||||
use App\Enums\AtencaoBasica\FichaComplementar\CDSOrigem;
|
||||
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
|
||||
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementar;
|
||||
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarFundoOlho;
|
||||
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarRessonanciaMagnetica;
|
||||
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarTesteOlho;
|
||||
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarTesteOrelha;
|
||||
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarTomografiaComputadorizada;
|
||||
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarUsTransfontanela;
|
||||
use App\Models\AtencaoBasica\Parametrizacao\OutrosPermissaoOcupacao;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Geral\Turno;
|
||||
use App\Services\Service;
|
||||
use App\Utils\AtencaoBasica\EsusUtil;
|
||||
use App\Utils\AtencaoBasica\EsusUtil\Eloquent\Model;
|
||||
use App\Utils\AtencaoBasica\EsusUtil\Query\Builder;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Collection;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class FichaComplementarService extends Service
|
||||
{
|
||||
/**
|
||||
* @param int $pacienteId
|
||||
* @return Collection
|
||||
*/
|
||||
private static function getHistoricoFichaComplementar(int $pacienteId)
|
||||
{
|
||||
return DB::table('atencao_basica_ficha_complementar')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', '=', 'atencao_basica_ficha_complementar.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', '=', 'cadastro_cidadao.id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', '=', 'atencao_basica_ficha_complementar.unidade_id')
|
||||
->join('cadastro_usuario', 'cadastro_usuario.id', '=', 'atencao_basica_ficha_complementar.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao_usuario', 'cidadao_usuario.id', '=', 'cadastro_usuario.cidadao_id')
|
||||
->join('geral_turno', 'geral_turno.id', '=', 'atencao_basica_ficha_complementar.turno_id')
|
||||
->leftJoin('cadastro_usuario as usuario_exportacao', 'usuario_exportacao.id', 'atencao_basica_ficha_complementar.usuario_exportacao_id')
|
||||
->leftJoin('cadastro_cidadao as cidadao_exportacao', 'cidadao_exportacao.id', 'usuario_exportacao.cidadao_id')
|
||||
->leftJoin('atencao_basica_exportacao as exportacao', 'exportacao.id', 'atencao_basica_ficha_complementar.exportacao_id')
|
||||
->select(
|
||||
'atencao_basica_ficha_complementar.id',
|
||||
'cadastro_cidadao.nome',
|
||||
'cadastro_cidadao.preferencia_nome_id AS preferencia_nome_id',
|
||||
'cadastro_cidadao.nome_social AS nome_social',
|
||||
DB::raw('UPPER(cidadao_usuario.nome) AS profissional'),
|
||||
'cadastro_unidade.nome_fantasia AS unidade',
|
||||
DB::raw("
|
||||
DATE_FORMAT(atencao_basica_ficha_complementar.data_atendimento, '%d/%m/%Y') AS data_atendimento
|
||||
"),
|
||||
DB::raw('UPPER(geral_turno.nome) AS turno'),
|
||||
'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"),
|
||||
)
|
||||
->where('cadastro_paciente.id', $pacienteId)
|
||||
->get();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param int $pacienteId
|
||||
* @return array
|
||||
*/
|
||||
public static function historico(int $pacienteId)
|
||||
{
|
||||
return [
|
||||
'form' => self::getHistoricoFichaComplementar($pacienteId),
|
||||
'paciente' => self::getPaciente($pacienteId)
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $pacienteId
|
||||
* @return Builder|Model|object|null
|
||||
*/
|
||||
private static function getPaciente(int $pacienteId)
|
||||
{
|
||||
return DB::table('cadastro_paciente')
|
||||
->join(
|
||||
'cadastro_cidadao',
|
||||
'cadastro_cidadao.id',
|
||||
'=',
|
||||
'cadastro_paciente.cidadao_id'
|
||||
)
|
||||
->select(
|
||||
'cadastro_paciente.id',
|
||||
'cadastro_paciente.subclassificacao_id',
|
||||
DB::raw("IFNULL(concat(cadastro_cidadao.nome, ' (', cadastro_cidadao.nome_social, ')'), cadastro_cidadao.nome) as nome"),
|
||||
'cadastro_cidadao.cns',
|
||||
DB::raw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') AS data_nascimento")
|
||||
)
|
||||
->where('cadastro_paciente.id', $pacienteId)
|
||||
->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Turno[]|\Illuminate\Database\Eloquent\Collection|Collection
|
||||
*/
|
||||
private static function getTurnos()
|
||||
{
|
||||
return Turno::all()->map(fn ($turno) => ['value' => $turno->id, 'text' => $turno->nome]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FichaComplementarTesteOlho[]|\Illuminate\Database\Eloquent\Collection|Collection
|
||||
*/
|
||||
private static function getResultadoTesteOlhinho()
|
||||
{
|
||||
return FichaComplementarTesteOlho::all()->map(fn ($testeOlhinho) => [
|
||||
'value' => $testeOlhinho->id, 'text' => $testeOlhinho->descricao
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FichaComplementarFundoOlho[]|\Illuminate\Database\Eloquent\Collection|Collection
|
||||
*/
|
||||
private static function getResultadoExameFundoOlho()
|
||||
{
|
||||
return FichaComplementarFundoOlho::all()->map(fn ($exameFundoOlho) => [
|
||||
'value' => $exameFundoOlho->id, 'text' => $exameFundoOlho->descricao
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FichaComplementarTesteOrelha[]|\Illuminate\Database\Eloquent\Collection|Collection
|
||||
*/
|
||||
private static function getResultadoTesteOrelhinha()
|
||||
{
|
||||
return FichaComplementarTesteOrelha::all()->map(fn ($testeOrelhinha) => [
|
||||
'value' => $testeOrelhinha->id, 'text' => $testeOrelhinha->descricao
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FichaComplementarUsTransfontanela[]|\Illuminate\Database\Eloquent\Collection|Collection
|
||||
*/
|
||||
private static function getResultadoUsTransfontanela()
|
||||
{
|
||||
return FichaComplementarUsTransfontanela::all()->map(fn ($usTransfontanela) => [
|
||||
'value' => $usTransfontanela->id, 'text' => $usTransfontanela->descricao
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FichaComplementarTomografiaComputadorizada[]|\Illuminate\Database\Eloquent\Collection|Collection
|
||||
*/
|
||||
private static function getResultadoTomografiaComputadorizada()
|
||||
{
|
||||
return FichaComplementarTomografiaComputadorizada::all()->map(fn ($tomografiaComputadorizada) => [
|
||||
'value' => $tomografiaComputadorizada->id, 'text' => $tomografiaComputadorizada->descricao
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FichaComplementarRessonanciaMagnetica[]|\Illuminate\Database\Eloquent\Collection|Collection
|
||||
*/
|
||||
private static function getResultadoRessonanciaMagnetica()
|
||||
{
|
||||
return FichaComplementarRessonanciaMagnetica::all()->map(fn ($ressonanciaMagnetica) => [
|
||||
'value' => $ressonanciaMagnetica->id, 'text' => $ressonanciaMagnetica->descricao
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $pacienteId
|
||||
* @return array
|
||||
*/
|
||||
public static function create(int $pacienteId)
|
||||
{
|
||||
return [
|
||||
'form' => [
|
||||
'data_atual' => Carbon::now()->format('Y-m-d'),
|
||||
'informacoes_paciente' => self::getPaciente($pacienteId),
|
||||
'turnos' => self::getTurnos(),
|
||||
'exames' => [
|
||||
'teste_olhinho' => self::getResultadoTesteOlhinho(),
|
||||
'fundo_olho' => self::getResultadoExameFundoOlho(),
|
||||
'teste_orelhinha' => self::getResultadoTesteOrelhinha(),
|
||||
'us_transfontanela' => self::getResultadoUsTransfontanela(),
|
||||
'tomografia_computadorizada' => self::getResultadoTomografiaComputadorizada(),
|
||||
'ressonancia_magnetica' => self::getResultadoRessonanciaMagnetica()
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $unidadeId
|
||||
* @return string
|
||||
*/
|
||||
private static function geraFichaUuid(int $unidadeId)
|
||||
{
|
||||
$unidade = Unidade::findOrFail($unidadeId);
|
||||
$uuid = EsusUtil::v4UUID();
|
||||
|
||||
return "{$unidade->cnes}-{$uuid}";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return array
|
||||
*/
|
||||
private static function getParams($request)
|
||||
{
|
||||
return [
|
||||
'paciente_id' => $request->paciente,
|
||||
'usuario_id' => $request->usuario,
|
||||
'cbo_id' => $request->cbo,
|
||||
'unidade_id' => $request->unidade,
|
||||
'equipe_id' => $request->equipe,
|
||||
'tipo_cds_origem' => CDSOrigem::SISTEMA_TERCEIROS,
|
||||
'turno_id' => $request->turno,
|
||||
'data_atendimento' => Carbon::parse($request->data_atendimento)->format('Y-m-d'),
|
||||
'data_realizacao_teste_olhinho' => !is_null($request->data['teste_olhinho'])
|
||||
? Carbon::parse($request->data['teste_olhinho'])->format('Y-m-d')
|
||||
: null,
|
||||
'resultado_teste_olhinho_id' => !is_null($request->resultado['teste_olhinho'])
|
||||
? $request->resultado['teste_olhinho']
|
||||
: null,
|
||||
'data_realizacao_fundo_olho' => !is_null($request->data['fundo_olho'])
|
||||
? Carbon::parse($request->data['fundo_olho'])->format('Y-m-d')
|
||||
: null,
|
||||
'resultado_fundo_olho_id' => !is_null($request->resultado['fundo_olho'])
|
||||
? $request->resultado['fundo_olho']
|
||||
: null,
|
||||
'data_realizacao_teste_orelhinha' => !is_null($request->data['teste_orelhinha'])
|
||||
? Carbon::parse($request->data['teste_orelhinha'])->format('Y-m-d')
|
||||
: null,
|
||||
'resultado_teste_orelhinha_id' => !is_null($request->resultado['teste_orelhinha'])
|
||||
? $request->resultado['teste_orelhinha']
|
||||
: null,
|
||||
'data_realizacao_us_transfontanela' => !is_null($request->data['us_transfontanela'])
|
||||
? Carbon::parse($request->data['us_transfontanela'])->format('Y-m-d')
|
||||
: null,
|
||||
'resultado_us_transfontanela_id' => !is_null($request->resultado['us_transfontanela'])
|
||||
? $request->resultado['us_transfontanela']
|
||||
: null,
|
||||
'data_realizacao_tomografia_computadorizada' => !is_null($request->data['tomografia_computadorizada'])
|
||||
? Carbon::parse($request->data['tomografia_computadorizada'])->format('Y-m-d')
|
||||
: null,
|
||||
'resultado_tomografia_computadorizada_id' => !is_null($request->resultado['tomografia_computadorizada'])
|
||||
? $request->resultado['tomografia_computadorizada']
|
||||
: null,
|
||||
'data_realizacao_ressonancia_magnetica' => !is_null($request->data['ressonancia_magnetica'])
|
||||
? Carbon::parse($request->data['ressonancia_magnetica'])->format('Y-m-d')
|
||||
: null,
|
||||
'resultado_ressonancia_magnetica_id' => !is_null($request->resultado['ressonancia_magnetica'])
|
||||
? $request->resultado['ressonancia_magnetica']
|
||||
: null,
|
||||
'latitude' => !is_null($request->latitude)
|
||||
? $request->latitude
|
||||
: null,
|
||||
'longitude' => !is_null($request->longitude)
|
||||
? $request->longitude
|
||||
: null,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return void
|
||||
*/
|
||||
public static function store(Request $request)
|
||||
{
|
||||
|
||||
self::saveStore($request);
|
||||
}
|
||||
|
||||
public static function saveStore($request)
|
||||
{
|
||||
$params = self::getParams((object) $request);
|
||||
|
||||
DB::transaction(function () use ($params) {
|
||||
$params = array_merge($params, ['uuid_ficha' => self::geraFichaUuid($params['unidade_id'])]);
|
||||
FichaComplementar::create($params);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
* @return mixed
|
||||
*/
|
||||
private static function getFichaComplementar(int $id)
|
||||
{
|
||||
return FichaComplementar::findOrFail($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $fichaComplementarId
|
||||
* @return array[]
|
||||
*/
|
||||
public static function edit(int $fichaComplementarId)
|
||||
{
|
||||
$fichaComplementar = self::getFichaComplementar($fichaComplementarId);
|
||||
|
||||
$form = [
|
||||
'informacoes_paciente' => self::getPaciente($fichaComplementar->paciente_id),
|
||||
'turnos' => self::getTurnos(),
|
||||
'exames' => [
|
||||
'teste_olhinho' => self::getResultadoTesteOlhinho(),
|
||||
'fundo_olho' => self::getResultadoExameFundoOlho(),
|
||||
'teste_orelhinha' => self::getResultadoTesteOrelhinha(),
|
||||
'us_transfontanela' => self::getResultadoUsTransfontanela(),
|
||||
'tomografia_computadorizada' => self::getResultadoTomografiaComputadorizada(),
|
||||
'ressonancia_magnetica' => self::getResultadoRessonanciaMagnetica()
|
||||
],
|
||||
];
|
||||
|
||||
$model = [
|
||||
'profissional' => [
|
||||
'id' => $fichaComplementar->usuario->id ?? null,
|
||||
'cidadao_nome' => $fichaComplementar->usuario->cidadao->nome ?? null,
|
||||
],
|
||||
'turno' => $fichaComplementar->turno_id,
|
||||
'unidade' => $fichaComplementar->unidade_id,
|
||||
'infraestrutura' => $fichaComplementar->equipe->infraestrutura_id ?? null,
|
||||
'cbo' => $fichaComplementar->cbo_id,
|
||||
'equipe' => $fichaComplementar->equipe_id,
|
||||
'data_atendimento' => $fichaComplementar->data_atendimento,
|
||||
'datas' => [
|
||||
'teste_olhinho' => $fichaComplementar->data_realizacao_teste_olhinho,
|
||||
'fundo_olho' => $fichaComplementar->data_realizacao_fundo_olho,
|
||||
'teste_orelhinha' => $fichaComplementar->data_realizacao_teste_orelhinha,
|
||||
'us_transfontanela' => $fichaComplementar->data_realizacao_us_transfontanela,
|
||||
'tomografia_computadorizada' => $fichaComplementar->data_realizacao_tomografia_computadorizada,
|
||||
'ressonancia_magnetica' => $fichaComplementar->data_realizacao_ressonancia_magnetica
|
||||
],
|
||||
'resultados' => [
|
||||
'teste_olhinho' => $fichaComplementar->resultado_teste_olhinho_id,
|
||||
'fundo_olho' => $fichaComplementar->resultado_fundo_olho_id,
|
||||
'teste_orelhinha' => $fichaComplementar->resultado_teste_orelhinha_id,
|
||||
'us_transfontanela' => $fichaComplementar->resultado_us_transfontanela_id,
|
||||
'tomografia_computadorizada' => $fichaComplementar->resultado_tomografia_computadorizada_id,
|
||||
'ressonancia_magnetica' => $fichaComplementar->resultado_ressonancia_magnetica_id
|
||||
]
|
||||
];
|
||||
|
||||
return ['form' => $form, 'model' => $model];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $fichaComplementarId
|
||||
* @param Request $request
|
||||
* @return void
|
||||
*/
|
||||
public static function update(int $fichaComplementarId, Request $request)
|
||||
{
|
||||
$fichaComplementar = self::getFichaComplementar($fichaComplementarId);
|
||||
$params = self::getParams($request);
|
||||
|
||||
DB::transaction(function () use ($fichaComplementar, $params) {
|
||||
$params = array_merge($params, ['uuid_ficha' => self::geraFichaUuid($params['unidade_id'])]);
|
||||
$fichaComplementar->fill($params)->save();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $fichaComplementarId
|
||||
* @return void
|
||||
*/
|
||||
public static function destroy(int $fichaComplementarId)
|
||||
{
|
||||
$fichaComplementar = self::getFichaComplementar($fichaComplementarId);
|
||||
|
||||
DB::transaction(function () use ($fichaComplementarId, $fichaComplementar) {
|
||||
$fichaComplementar->delete($fichaComplementarId);
|
||||
});
|
||||
}
|
||||
|
||||
public static function getEquipes(){
|
||||
|
||||
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
|
||||
->select([
|
||||
'atencao_basica_parametrizacao_equipe.id AS id',
|
||||
DB::raw("CONCAT(
|
||||
'INE: ', atencao_basica_parametrizacao_area.numero_ine,
|
||||
CASE
|
||||
WHEN atencao_basica_parametrizacao_area.descricao
|
||||
THEN CONCAT(' - Área: ', atencao_basica_parametrizacao_area.descricao)
|
||||
ELSE ''
|
||||
END,
|
||||
' - Microárea: ', 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')
|
||||
->join('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
|
||||
->join('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 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 getUnidades(){
|
||||
|
||||
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
|
||||
->select([
|
||||
'cadastro_unidade.id AS id',
|
||||
DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', 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 getOcupacoes()
|
||||
{
|
||||
$usuario = Usuario::findOrFail(request()->usuario_id);
|
||||
$permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::FICHA_COMPLEMENTAR)->get();
|
||||
$codigos = $permissao->pluck('ocupacao');
|
||||
|
||||
return $usuario->lotacoes
|
||||
->filter(function ($lotacao) use ($codigos) {
|
||||
return $lotacao->infraestrutura->id == request()->infraestrutura_id &&
|
||||
$codigos->contains($lotacao->ocupacao->codigo);
|
||||
})
|
||||
->pluck('ocupacao');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user