131 lines
5.5 KiB
PHP
131 lines
5.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
|
use App\Models\ProntoAtendimento\Atendimento\AvaliacaoAntropometrica;
|
|
use App\Models\ProntoAtendimento\Atendimento\PrescricaoInterna;
|
|
use App\Utils\Exports\Pdf;
|
|
use App\Utils\Exports\Template;
|
|
use App\Utils\MaskUtil;
|
|
|
|
class PrescricaoInternaController extends Controller
|
|
{
|
|
private const TITLE = 'Prescrição interna';
|
|
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.prescricao-interna';
|
|
|
|
public static function getTemplate($atendimentoId, bool $onlyContent = false)
|
|
{
|
|
|
|
$prescricao = [];
|
|
|
|
$prescricao = array_map(function ($atendimento){
|
|
return $atendimento['id'];
|
|
}, request()->atendimentos);
|
|
|
|
$prescricoesInternas = PrescricaoInterna::orderByDesc('created_at')
|
|
->whereHas('atendimentoMedico', function ($query) use ($atendimentoId) {
|
|
$query->where('atendimento_id', $atendimentoId);
|
|
})
|
|
->whereIn('atendimento_medico_id', $prescricao)
|
|
->get();
|
|
|
|
$avaliacaoAntropometrica = AvaliacaoAntropometrica::where('atendimento_id', $atendimentoId)
|
|
->orderByDesc('created_at')
|
|
->first();
|
|
|
|
$massa = empty($avaliacaoAntropometrica->massa ?? null)
|
|
? ''
|
|
: "{$avaliacaoAntropometrica->massa} {$avaliacaoAntropometrica->massaUnidadeMedida->sigla}";
|
|
|
|
$altura = empty($avaliacaoAntropometrica->altura ?? null)
|
|
? ''
|
|
: "{$avaliacaoAntropometrica->altura} {$avaliacaoAntropometrica->alturaUnidadeMedida->sigla}";
|
|
|
|
$data['paciente'] = self::getPacienteData(Atendimento::findOrFail($atendimentoId));
|
|
|
|
$data['avaliacaoAntropometrica'] = [
|
|
'massa' => $massa,
|
|
'altura' => $altura,
|
|
];
|
|
|
|
$data['prescricoesInternas'] = [];
|
|
|
|
foreach ($prescricoesInternas as $key => $prescricaoInterna) {
|
|
$avaliacaoAntropometrica = $prescricaoInterna->atendimentoMedico->avaliacaoAntropometrica;
|
|
|
|
$massa = empty($avaliacaoAntropometrica->massa ?? null)
|
|
? ''
|
|
: "{$avaliacaoAntropometrica->massa} {$avaliacaoAntropometrica->massaUnidadeMedida->sigla}";
|
|
|
|
$data['prescricoesInternas'][$key] = [
|
|
'massa' => $massa,
|
|
'dataHora' => $prescricaoInterna->updated_at->format('d/m/Y H:i:s'),
|
|
'profissional' => [
|
|
'nome' => $prescricaoInterna->updatedLotacao->usuario->cidadao->nome,
|
|
'cbo' => $prescricaoInterna->updatedLotacao->ocupacao->nome,
|
|
],
|
|
'doseUnica' => $prescricaoInterna->dose_unica,
|
|
'frequencia' => $prescricaoInterna->frequencia,
|
|
'observacoes' => $prescricaoInterna->observacoes ?? '',
|
|
'medicamentos' => [],
|
|
'id' => $prescricaoInterna->id,
|
|
'atendimento_medico_id' => $prescricaoInterna->atendimento_medico_id,
|
|
];
|
|
|
|
foreach ($prescricaoInterna->medicamentos as $medicamento) {
|
|
|
|
$data['prescricoesInternas'][$key]['medicamentos'][] = [
|
|
'nome' => $medicamento->medicamento->nome,
|
|
'quantidade' => $medicamento->quantidade,
|
|
'formaFarmaceutica' => $medicamento->medicamento->formaFarmaceutica->nome,
|
|
'administracao' => $medicamento->administracao,
|
|
];
|
|
}
|
|
}
|
|
|
|
$template = $onlyContent ? self::TEMPLATE . '-conteudo' : self::TEMPLATE;
|
|
|
|
return Template::make(self::TITLE, $template)->withData($data)->getHtml();
|
|
}
|
|
|
|
private static function getPacienteData($atendimento)
|
|
{
|
|
$paciente = $atendimento->faa->paciente;
|
|
$cidadao = $paciente->cidadao;
|
|
$gestacao = $atendimento->gestacoes->sortByDesc('created_at')->first();
|
|
|
|
return [
|
|
'nome' => $cidadao->nome,
|
|
'nome_social' => $cidadao->nome_social,
|
|
'prontuario' => $paciente->prontuario,
|
|
'cns' => $cidadao->cns ? MaskUtil::getCnsMasked($cidadao->cns) : 'NÃO INFORMADO',
|
|
'cpf' => $cidadao->cpf ? MaskUtil::getCpfMasked($cidadao->cpf) : 'NÃO INFORMADO',
|
|
'sexo' => $cidadao->sexo->descricao,
|
|
'data_nascimento' => $cidadao->data_nascimento
|
|
? $cidadao->data_nascimento->format('d/m/Y')
|
|
: 'NÃO INFORMADA',
|
|
'idade' => $cidadao->data_nascimento
|
|
? "{$cidadao->idade['anos']} ano(s), "
|
|
. "{$cidadao->idade['meses']} mês(es) e "
|
|
. "{$cidadao->idade['dias']} dia(s) "
|
|
: 'NÃO INFORMADA',
|
|
'idade_gestacional' => $gestacao && $gestacao->idade_gestacional
|
|
? "{$gestacao->idade_gestacional['semanas']} semana(s) e {$gestacao->idade_gestacional['dias']} dia(s)"
|
|
: null,
|
|
'nome_mae' => $cidadao->nome_mae ?? 'NÃO INFORMADO',
|
|
'endereco' => $cidadao->domicilio
|
|
? "{$cidadao->domicilio->endereco->completo}, "
|
|
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
|
: 'NÃO INFORMADO',
|
|
'telefones' => $cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
|
];
|
|
}
|
|
|
|
public function __invoke(int $atendimentoId)
|
|
{
|
|
return (new Pdf)->stream(self::getTemplate($atendimentoId), 'prescricao-interna');
|
|
}
|
|
}
|