90 lines
4.0 KiB
PHP
90 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Services\WebService\Ambulatorio\ConectaSus;
|
|
|
|
use App\Exceptions\WebService\Ambulatorio\ConectaSus\PacienteNotFoundException;
|
|
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
|
|
use App\Services\Service;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Carbon\Carbon;
|
|
|
|
class PacienteService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
return DB::table('cadastro_cidadao')
|
|
->leftJoin('cadastro_cidadao_telefone', function ($join) {
|
|
$join->on('cadastro_cidadao_telefone.cidadao_id', '=', 'cadastro_cidadao.id')
|
|
->where('cadastro_cidadao_telefone.principal', 1);
|
|
})
|
|
->leftJoin('cadastro_sexo', 'cadastro_sexo.id', 'cadastro_cidadao.sexo_id')
|
|
->leftJoin('cadastro_nacionalidade', 'cadastro_nacionalidade.id', 'cadastro_cidadao.nacionalidade_id')
|
|
->leftJoin('cadastro_raca_cor', 'cadastro_raca_cor.id', 'cadastro_cidadao.raca_cor_id')
|
|
->join('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
|
|
->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao.domicilio_id')
|
|
->leftJoin('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id')
|
|
->leftJoin('cadastro_logradouro', 'cadastro_logradouro.id', 'cadastro_endereco.logradouro_id')
|
|
->leftJoin('cadastro_logradouro_tipo', 'cadastro_logradouro_tipo.id', 'cadastro_logradouro.tipo_id')
|
|
->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id')
|
|
->whereNull('cadastro_cidadao.deleted_at')
|
|
->select([
|
|
'cadastro_cidadao.cidadao_id',
|
|
'cadastro_paciente.id as paciente_id',
|
|
'cadastro_cidadao.nome AS name',
|
|
'cadastro_cidadao.cns',
|
|
'cadastro_cidadao.cpf',
|
|
'cadastro_cidadao.data_nascimento AS birthdate',
|
|
DB::raw("COALESCE(cadastro_cidadao_telefone.numero, '-') AS phone"),
|
|
'cadastro_sexo.descricao AS sex',
|
|
DB::raw("COALESCE(cadastro_cidadao.nome_mae, '-') AS motherName"),
|
|
DB::raw("COALESCE(cadastro_nacionalidade.descricao, '-') AS nationality"),
|
|
DB::raw("COALESCE(cadastro_raca_cor.descricao, '-') AS race"),
|
|
'cadastro_logradouro_tipo.descricao as type',
|
|
'cadastro_logradouro.nome as street',
|
|
'cadastro_endereco.numero as number',
|
|
'cadastro_bairro.nome as neighborhood',
|
|
'cadastro_logradouro.cep as zipCode'
|
|
])
|
|
->distinct()
|
|
->orderBy('cadastro_cidadao.nome')
|
|
->get();
|
|
}
|
|
|
|
public static function show($idPaciente)
|
|
{
|
|
$paciente = self::getPacienteModel($idPaciente);
|
|
|
|
return (object) [
|
|
'cidadao_id' => $paciente->cidadao_id,
|
|
'paciente_id' => $paciente->paciente->id,
|
|
'name' => $paciente->nome,
|
|
'cns' => $paciente->cns,
|
|
'cpf' => $paciente->cpf,
|
|
'birthdate' => Carbon::parse($paciente->data_nascimento)->format('Y/m/d'),
|
|
'phone' => $paciente->numero ?? '-',
|
|
'sex' => $paciente->sexo->descricao,
|
|
'motherName' => $paciente->nome_mae ?? '-',
|
|
'nationality' => $paciente->nacionalidade->descricao ?? '-',
|
|
'race' => $paciente->racaCor->descricao ?? '-',
|
|
'address' => [
|
|
'street' => $paciente->domicilio->endereco->logradouro->tipo_nome ?? '-',
|
|
'number' => $paciente->domicilio->endereco->numero ?? '-',
|
|
'neighborhood' => $paciente->domicilio->endereco->logradouro->bairro->nome ?? '-',
|
|
'zipCode' => $paciente->domicilio->endereco->logradouro->cep ?? '-',
|
|
]
|
|
];
|
|
}
|
|
|
|
private static function getPacienteModel($idPaciente)
|
|
{
|
|
$paciente = Cidadao::find($idPaciente);
|
|
|
|
if (is_null($paciente)) {
|
|
|
|
throw new PacienteNotFoundException();
|
|
}
|
|
|
|
return $paciente;
|
|
}
|
|
}
|