This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ReceitaMedicaEspecialController extends Controller
|
||||
{
|
||||
private const TITLE = 'RECEITUÁRIO ESPECIAL';
|
||||
private const TEMPLATE = 'ambulatorio.receita-medica-especial';
|
||||
|
||||
public static function getTemplate($atendimentoId, $dados = [])
|
||||
{
|
||||
|
||||
$receitas = collect();
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$receitas[] = self::getReceitasNaoSalvas($atendimentoId);
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => true,
|
||||
'receitas' => $receitas
|
||||
];
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL);
|
||||
} else {
|
||||
|
||||
self::getAtendimento($atendimentoId, $receitas, $dados);
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => !$paraAssinaturaEletronica,
|
||||
'receitas' => $receitas->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all()
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public static function getReceitasNaoSalvas($pacienteId) {
|
||||
|
||||
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
|
||||
|
||||
$medicamentos = request()->medicamentos;
|
||||
|
||||
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
|
||||
|
||||
$query
|
||||
->whereHas('soap', function ($query) {
|
||||
|
||||
$query->where('atendimento_id', request()->atendimento_id);
|
||||
});
|
||||
})
|
||||
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
|
||||
->first();
|
||||
|
||||
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
|
||||
$createdAt = $item->created_at;
|
||||
} else {
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
}
|
||||
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
$medicamentos = [];
|
||||
|
||||
if (request()->has('multiple') && request()->multiple == true) {
|
||||
|
||||
foreach (request()->medicamentos as $solicitacao) {
|
||||
|
||||
$medicamentos[] = [
|
||||
'id' => uniqid(),
|
||||
'nome' => $solicitacao['material']['descricao'],
|
||||
'usoContinuo' => $solicitacao['is_uso_continuo'] == 'true' ? true : false,
|
||||
'imprimirSeparado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] == 'true' ? true : false,
|
||||
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
|
||||
'doseUnica' => $solicitacao['is_dose_unica'] == 'true' ? true : false,
|
||||
'livre' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']),
|
||||
'viaAdministracao' => $solicitacao['material']['via_administracao'] ?? '-',
|
||||
'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset($solicitacao['posologia']) ? $solicitacao['posologia'] : null),
|
||||
'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '',
|
||||
'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id'])
|
||||
? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
|
||||
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : ''
|
||||
];
|
||||
}
|
||||
} else {
|
||||
|
||||
$medicamentos[] = [
|
||||
'id' => uniqid(),
|
||||
'nome' => request()->material['descricao'],
|
||||
'usoContinuo' => request()->is_uso_continuo == 'true' ? true : false,
|
||||
'imprimirSeparado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado == 'true' ? true : false,
|
||||
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
|
||||
'doseUnica' => request()->is_dose_unica == 'true' ? true : false,
|
||||
'livre' => isset(request()->descricao) && !is_null(request()->descricao),
|
||||
'viaAdministracao' => request()->material['via_administracao'] ?? '-',
|
||||
'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) ? request()->posologia : null),
|
||||
'duracao' => !is_null(request()->duracao) ? request()->duracao : '',
|
||||
'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id)
|
||||
? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => request()->recomendacoes ?? '',
|
||||
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : ''
|
||||
];
|
||||
}
|
||||
|
||||
$medicamentos = collect($medicamentos)->filter(fn ($m) => !$m['removerImpressao'])->sortBy('usoContinuo')->values();
|
||||
|
||||
return [
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $currentLotacao->infraestrutura->endereco->completo
|
||||
. (isset($currentLotacao->infraestrutura->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep))
|
||||
: ''),
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cns' => $paciente->cidadao->cns,
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => request()->has('is_duplicated') && request()->is_duplicated == true
|
||||
? Carbon::parse($createdAt)->translatedFormat('d \de F \de Y')
|
||||
: Carbon::now()->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => $medicamentos,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, $receitas, $dados = []) {
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos->each(fn ($prescricaoMedicamento) => $receitas
|
||||
->push([
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
|
||||
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
|
||||
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
|
||||
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo
|
||||
. (isset($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep))
|
||||
: ''),
|
||||
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => $prescricaoMedicamento->itens
|
||||
->whereIn('material.receita_tipo_id', [
|
||||
TipoReceita::ESPECIAL
|
||||
])
|
||||
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
|
||||
->map(fn ($item) => [
|
||||
'id' => $item->id,
|
||||
'nome' => $item->material->descricao,
|
||||
'usoContinuo' => $item->is_uso_continuo,
|
||||
'imprimirSeparado' => $item->is_imprimir_separado,
|
||||
'removerImpressao' => $item->is_remover_impressao,
|
||||
'doseUnica' => $item->is_dose_unica,
|
||||
'livre' => !is_null($item->descricao),
|
||||
'viaAdministracao' => $item->material->viaAdministracao->nome ?? '-',
|
||||
'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia,
|
||||
'duracao' => !is_null($item->duracao) ? $item->duracao : '',
|
||||
'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => $item->recomendacoes ?? '',
|
||||
'descricao' => $item->descricao ?? ''
|
||||
])
|
||||
->filter(fn ($m) => !$m['removerImpressao'])
|
||||
->sortBy('usoContinuo')
|
||||
->values()
|
||||
])
|
||||
));
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId, $output = null, $dados = [])
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $output
|
||||
? $pdf->output(self::getTemplate($atendimentoId, $dados))
|
||||
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user