import { useMemo, useState } from 'react'
import { medicalRecordRepository } from '../repositories/medicalRecordRepository.js'
const inputClass =
'h-10 w-full rounded-lg border border-[#404040] bg-[#1a1a1a] px-3 text-sm text-[#e5e5e5] outline-none transition placeholder:text-[#a3a3a3] focus:border-[#3b82f6] focus:ring-1 focus:ring-[#3b82f6]'
const labelClass = 'mb-1 block text-xs font-medium text-[#e5e5e5]'
const cardClass = 'rounded-2xl border border-[#404040] bg-[#262626] shadow-sm'
export function MedicalRecordsPage() {
const recordTypes = medicalRecordRepository.getRecordTypes()
const [records, setRecords] = useState(() => medicalRecordRepository.getInitialRecords())
const [search, setSearch] = useState('')
const [filterType, setFilterType] = useState('')
const [editorOpen, setEditorOpen] = useState(false)
const filteredRecords = useMemo(() => {
return records.filter((record) => {
const matchesSearch = [record.patient, record.cid, record.doctor]
.join(' ')
.toLowerCase()
.includes(search.toLowerCase())
const matchesType = !filterType || record.type === filterType
return matchesSearch && matchesType
})
}, [filterType, records, search])
function handleCreateRecord(record) {
setRecords((currentRecords) => [record, ...currentRecords])
setEditorOpen(false)
}
return (
Prontuário Médico
Registro de consultas, diagnósticos e evolução
{filteredRecords.length ? (
filteredRecords.map((record) =>
)
) : (
Nenhum registro encontrado nos dados locais.
)}
{editorOpen ? (
setEditorOpen(false)}
onSave={handleCreateRecord}
recordTypes={recordTypes}
/>
) : null}
)
}
function RecordCard({ record }) {
const statusClass =
record.status === 'completo'
? 'bg-emerald-500/20 text-emerald-400'
: 'bg-amber-500/20 text-amber-400'
return (
{record.patient}
{record.status === 'completo' ? 'Completo' : 'Rascunho'}
{record.date}
{record.doctor}
{record.type}
{record.cid}
{record.summary}
)
}
function IconButton({ label, name }) {
return (
)
}
function RecordEditorModal({ onClose, onSave, recordTypes }) {
const [formData, setFormData] = useState({
patient: '',
date: '',
type: 'Primeira Consulta',
cid: '',
anamnesis: '',
physicalExam: '',
conduct: '',
prescriptions: '',
returnDate: '',
status: 'completo',
})
function updateField(event) {
const { name, value } = event.target
setFormData((currentData) => ({ ...currentData, [name]: value }))
}
function handleSubmit(event) {
event.preventDefault()
const submitter = event.nativeEvent.submitter
const status = submitter?.value || formData.status
onSave({
id: `record-${Date.now()}`,
patient: formData.patient || 'Paciente sem nome',
date: formData.date ? formatDate(formData.date) : '07/04/2026',
doctor: 'Dr. Henrique Cardoso',
type: formData.type,
cid: formData.cid || 'CID nao informado',
status,
summary: formData.conduct || formData.anamnesis || 'Registro criado localmente para simulação.',
})
}
return (
)
}
function DarkField({ children, label }) {
return (
)
}
function formatDate(value) {
const [year, month, day] = value.split('-')
return `${day}/${month}/${year}`
}
function RecordIcon({ className = 'size-4', name }) {
const common = {
className,
fill: 'none',
stroke: 'currentColor',
strokeLinecap: 'round',
strokeLinejoin: 'round',
strokeWidth: 1.8,
viewBox: '0 0 24 24',
}
if (name === 'search') {
return (
)
}
if (name === 'plus') {
return (
)
}
if (name === 'file') {
return (
)
}
if (name === 'calendar') {
return (
)
}
if (name === 'user') {
return (
)
}
if (name === 'activity') {
return (
)
}
if (name === 'eye') {
return (
)
}
if (name === 'edit') {
return (
)
}
if (name === 'printer') {
return (
)
}
return (
)
}