Aller au contenu

omnibase/health Référence de l’API

Étage
Structure préparée · Omnibase
Version
main
Vérifié en réel
Son README ne le dit pas
Licence
MIT
composer require omnibase/health:dev-main

Lue dans les fichiers PHP du paquet au commit 9d3181f0c5d8 : ses espaces de noms, classes, interfaces et énumérations, leurs constantes, propriétés et méthodes publiques avec leur PHPDoc, et les options que prennent ses fabriques. Rien n’en est exécuté.

Base\Health

  • HealthBundle class

    The health regime, on omnibase/office: a practice of care (a multi-professional health centre, a nursing practice, a physiotherapist, a midwife), its practitioners read from the RPPS, patients and their dependants, home care requests, fees, results sent through the office's encrypted vault - and medical secrecy in who may read what: the patient, the practitioner who wrote it, the care team unless the patient objected; the secretariat files and sends, it does not read. No e-mail ever holds health data, not even a document's title or an appointment's reason.

    3 methods

Base\Health\Admin\Settings

  • HealthKeySection class

    The API keys page's health line: the Annuaire Santé's key (the ANS's Gravitee portal), read at each "Lire l'Annuaire Santé". FranceConnect's, Pro Santé Connect's and TURN's are not typed here: the first two are read when the container is built, the third is shared with the coturn server - they live in the environment and the secrets vault.

    3 methods

  • HealthSettingsSection class

    The settings' health line: which certified host (HDS) keeps the data - the legal notice prints it, the compliance widget checks it.

    3 methods

Base\Health\Admin\Widget

  • HomeCareWidgetType class

    The dashboard's "Home care asked": the requests waiting for the practice's answer.

    4 methods

  • InboxWidgetType class

    The dashboard's "Messages": what waits at the desks the member answers at (the secretariat's), and their own unread conversations. Counts only: a message is read in the mailbox, not on a dashboard someone may see over a shoulder.

    4 methods

Base\Health\Command

  • PurgeCommand class

    What has outlived its retention goes (health.retention, in months; the contact requests after office.contact.retention_months): past appointments, decided home care requests, the access log, documents expired or withdrawn - their files destroyed -, the video rooms' handshakes. From the cron container, each night. --dry-run counts only.

    1 method

Base\Health\Compliance

  • EmergencyCheck class

    The emergencies page says what to do out of hours.

    2 methods

  • FeesDisplayedCheck class

    Fees are displayed: French law has every practitioner post theirs.

    2 methods

  • HdsHostCheck class

    Health data are hosted by a certified host (HDS), and the legal notice says which.

    2 methods

  • MailboxKeyCheck class

    Messages are stored encrypted, and there is a key to do it with.

    2 methods

  • StaffTwoFactorCheck class

    Every staff account signs in with a second factor: the application requires it of the staff's role through glitchr/omnibase (base.security.two_factor.required_roles: [ROLE_STAFF], postpone: false - docs/secrecy.md), which sends an account without one to its enrolment page.

    2 methods

  • TeleconsultationCheck class

    The built-in video is not listed by the ANS: no reimbursable teleconsultation through it.

    2 methods

Base\Health\Controller\Admin

  • HomeCareController class

    The home care requests waiting, in the back office: who asks, where, what care and how often - then who goes and when the first visit is: accepted, the visits enter the agenda as a series; or refused.

    3 methods

Base\Health\Controller\Admin\Crud

  • FeeCrudController class

    The fees as they are displayed: a practitioner's, or the whole practice's.

    6 methods

  • HomeCareRequestCrudController class

    Every home care request, as a list; the screen to answer them is the agenda's "Soins à domicile" page.

    6 methods

  • PatientProfileCrudController class

    The patients as the practice knows them: who, how to reach them, where they live. Nothing clinical is kept here.

    6 methods

  • PracticeCrudController class

    The practice: its kind, its FINESS number, what its pages say of emergencies and of care out of hours.

    5 methods

  • PractitionerCrudController class

    The team's health professionals: profession, agreement with the health insurance, Carte Vitale, MSSanté address. "Lire l'Annuaire Santé" reads the profession and the MSSanté address from the RPPS number on the member's record.

    7 methods

Base\Health\Controller\Client

  • HealthController class

    The health regime's public pages: the fees (which the law has posted), care at home - where the practice goes, and the request -, video consultations, and what to do in an emergency.

    5 methods

  • SpaceController class

    The patient's space: what comes next (appointments, a video room to join, documents not read yet, home care asked), who they are for the practice (their profile, their dependants), and their data - to take away or to have erased.

    8 methods

Base\Health\Demo

  • HealthDemoAccounts class

    The demonstration accounts of a practice (glitchr/omnibase's `demo` environment): one for each role this bundle and omnibase/office know, with the identifiers the practices' fixtures have always used. The roles of the staff come from two groups, as in a real practice - "Praticiens" (ROLE_PRACTITIONER) and "Secrétariat" (ROLE_SECRETARY), both ROLE_STAFF through the application's role hierarchy; the coordination is the practice's administrator.

    1 method · 3 constants

Base\Health\DependencyInjection

Base\Health\Entity

  • Dependent class

    Someone an account holder books for: a child, a parent they care for.

    15 methods

  • Fee class

    A fee as it must be displayed (French law has practitioners post their fees and the reimbursement base): what for, how much, what the health insurance refunds on, for one practitioner or for the whole practice.

    15 methods

  • HomeCareRequest class

    Care asked at home: where (checked against the practice's service areas before it is accepted at all), what care, how often, from when to when, the prescription deposited in the vault. Accepted by the practice, it becomes a series of appointments in the agenda. The note the patient typed is kept encrypted.

    43 methods · 1 constant

  • IdentityLink class

    Whose account an identity of FranceConnect or Pro Santé Connect is: the provider and its `sub` - the provider's own, stable identifier of the person - never an e-mail address, which proves nothing about who someone is. One identity, one account; an account may hold several identities.

    9 methods

  • PatientProfile class

    What the practice needs to know of an account to receive its holder: who they are, how to reach them, where they live (home visits), whether one of the practice's physicians is their "médecin traitant", and whether they object to their documents being shared within the care team. Not a medical record: nothing clinical is kept here.

    28 methods

  • Practice class

    The practice of care an office is: its kind (a multi-professional health centre, a nursing practice...), its FINESS number when it has one, what to do in an emergency and how care is given out of hours.

    24 methods

  • Practitioner class

    What a member of the team is as a health professional: the profession (the Annuaire Santé's code and its name), a specialty, the agreement with the health insurance, whether the Carte Vitale and third-party payment are taken, the MSSanté address. The RPPS number is the member's registryId: "Lire l'Annuaire Santé" fills the profession and the MSSanté address.

    25 methods

Base\Health\Enum

  • CareFrequency enum

    3 methods · 4 cases

  • CareStatus enum

    1 method · 4 cases

  • PracticeType enum

    What kind of practice the site is for; the pages put forward what suits it.

    3 methods · 7 cases

  • Relation enum

    1 method · 4 cases

  • Sector enum

    A practitioner's agreement with the health insurance (conventionnement).

    1 method · 5 cases

Base\Health\Exception

  • HomeCareException class

    A home care request refused, its reason a translation key of the health domain.

    3 methods

Base\Health\Mailbox

  • CareTeamRecipients class

    Whom a patient may write to besides the secretariat's desk: the practitioners who follow them - by name, never by a username to guess.

    2 methods

Base\Health\Repository

Base\Health\Security

  • CareTeamAudience class

    Medical secrecy, as the practice's tool applies it to a patient's documents (beyond the patient and the author, who always read theirs):

    2 methods

Base\Health\Service

  • AppointmentNaming class

    An appointment booked online carries the patient's name as their profile writes it ("Camille ÉRABLE"), not the account's identifier: it is what the agenda shows the staff.

    2 methods

  • CareTeam class

    Who follows a patient - their care team in the practice: the members they have, or had, an appointment with (not a cancelled one), and the physician of the practice they declared as their "médecin traitant".

    4 methods

  • DependentBeneficiaries class

    A patient books for themselves or for one of their dependants: a child, a parent they care for.

    2 methods

  • HomeCare class

    Care at home, from the request to the agenda. A request is checked against the practice's service areas first: outside all of them it is refused at once, with the reason, rather than left waiting for a call back. Accepted by the practice - who goes, the first visit's day and hour - it becomes a series of appointments (omnibase/office's Booker).

    7 methods

  • PatientData class

    A patient's rights over their data (GDPR art. 15, 17, 20): everything the practice's site holds about them as one JSON document, or a zip with their documents decrypted; and erasure - what identifies them goes at once, what must be kept (past appointments, the access log) stays, bare, until health:purge's retention runs out.

    4 methods

  • PatientProfiles class

    A patient's profile, made when first needed - or when the account opens from the practice's invitation.

    3 methods

  • PractitionerRegistry class

    "Lire l'Annuaire Santé": a practitioner read from the ANS's directory by their RPPS number (glitchr/omnistate with omnistate/annuaire-sante), their profession and MSSanté address written on the record. The key is the one typed in the back office (API keys) if there is one, else the configuration's (omnistate.annuaire_sante.api_key).

    3 methods · 1 constant

  • ResultSender class

    A result, a prescription, a report sent to a patient: kept in the office's encrypted vault, the patient told by an e-mail that says only "a document awaits you" (never by an e-mail that carries it: that would break medical secrecy), and, when asked, a word in the mailbox - itself stored encrypted, its notice without content.

    2 methods

Base\Health\Transmission

  • MssanteTransmitterInterface interface

    Reserved, not implemented: sending a document to a patient's Mon espace santé, or to another professional, through MSSanté - the official secure messaging of health. It takes an MSSanté operator and a professional's CPS card, which a practice's site does not have: a practice that gets them writes this interface's implementation; ResultSender would then offer it beside the vault.

    2 methods

Base\Health\Twig

  • HealthExtension class

    Health in templates: health_practice(), health_practitioner(member), health_fees(practitioner|null), health_emergency() (the banner's numbers), health_profile(user), health_care_team(user), health_types(member) (what can be booked with them), health_pending_care(), health_teleconsultation_referenced().

    2 methods

Base\Health

HealthBundle class

class HealthBundle extends AbstractBaseBundle HealthBundle.php:19

The health regime, on omnibase/office: a practice of care (a multi-professional health centre, a nursing practice, a physiotherapist, a midwife), its practitioners read from the RPPS, patients and their dependants, home care requests, fees, results sent through the office's encrypted vault - and medical secrecy in who may read what: the patient, the practitioner who wrote it, the care team unless the patient objected; the secretariat files and sends, it does not read. No e-mail ever holds health data, not even a document's title or an appointment's reason.

HealthBundle::__construct()

public function __construct()

HealthBundle::getPath()

public function getPath(): string

Modern layout: the class lives in src/, the bundle root is the package root.

HealthBundle::build()

public function build(ContainerBuilder $container): void

Base\Health\Admin\Settings

HealthKeySection class

final class HealthKeySection implements SettingsSectionInterface HealthKeySection.php:17

The API keys page's health line: the Annuaire Santé's key (the ANS's Gravitee portal), read at each "Lire l'Annuaire Santé". FranceConnect's, Pro Santé Connect's and TURN's are not typed here: the first two are read when the container is built, the third is shared with the coturn server - they live in the environment and the secrets vault.

HealthKeySection::__construct()

public function __construct(readonly TranslatorInterface $translator)

HealthKeySection::getPage()

public function getPage(): string

HealthKeySection::getFields()

public function getFields(): array

HealthSettingsSection class

final class HealthSettingsSection implements SettingsSectionInterface HealthSettingsSection.php:10

The settings' health line: which certified host (HDS) keeps the data - the legal notice prints it, the compliance widget checks it.

HealthSettingsSection::__construct()

public function __construct(readonly TranslatorInterface $translator)

HealthSettingsSection::getPage()

public function getPage(): string

HealthSettingsSection::getFields()

public function getFields(): array

Base\Health\Admin\Widget

HomeCareWidgetType class

final class HomeCareWidgetType implements DashboardWidgetTypeInterface HomeCareWidgetType.php:10

The dashboard's "Home care asked": the requests waiting for the practice's answer.

HomeCareWidgetType::__construct()

public function __construct(readonly HomeCareRequestRepository $requests)

HomeCareWidgetType::getName()

public static function getName(): string

HomeCareWidgetType::getTemplate()

public function getTemplate(): string

HomeCareWidgetType::getTemplateVars()

public function getTemplateVars(MenuItem $widget): array

InboxWidgetType class

final class InboxWidgetType implements DashboardWidgetTypeInterface InboxWidgetType.php:16

The dashboard's "Messages": what waits at the desks the member answers at (the secretariat's), and their own unread conversations. Counts only: a message is read in the mailbox, not on a dashboard someone may see over a shoulder.

InboxWidgetType::__construct()

public function __construct(readonly Security $security, readonly ?object $mailbox = null, readonly ?object $desks = null)

InboxWidgetType::getName()

public static function getName(): string

InboxWidgetType::getTemplate()

public function getTemplate(): string

InboxWidgetType::getTemplateVars()

public function getTemplateVars(MenuItem $widget): array

Base\Health\Command

PurgeCommand class

class PurgeCommand extends Command PurgeCommand.php:26

What has outlived its retention goes (health.retention, in months; the contact requests after office.contact.retention_months): past appointments, decided home care requests, the access log, documents expired or withdrawn - their files destroyed -, the video rooms' handshakes. From the cron container, each night. --dry-run counts only.

PurgeCommand::__construct()

public function __construct(readonly AppointmentRepository $appointments, readonly HomeCareRequestRepository $homeCare, readonly AccessLogRepository $logs, readonly DocumentRepository $documents, readonly ContactRequestRepository $contacts, readonly DocumentVault $vault, readonly Rooms $rooms, readonly array $retention, readonly int $contactMonths = 12)

Base\Health\Compliance

EmergencyCheck class

final class EmergencyCheck implements ComplianceCheckInterface EmergencyCheck.php:10

The emergencies page says what to do out of hours.

EmergencyCheck::__construct()

public function __construct(readonly PracticeRepository $practices)

EmergencyCheck::check()

public function check(): ComplianceResult

FeesDisplayedCheck class

final class FeesDisplayedCheck implements ComplianceCheckInterface FeesDisplayedCheck.php:11

Fees are displayed: French law has every practitioner post theirs.

FeesDisplayedCheck::__construct()

public function __construct(readonly PractitionerRepository $practitioners, readonly FeeRepository $fees)

FeesDisplayedCheck::check()

public function check(): ComplianceResult

HdsHostCheck class

final class HdsHostCheck implements ComplianceCheckInterface HdsHostCheck.php:10

Health data are hosted by a certified host (HDS), and the legal notice says which.

HdsHostCheck::__construct()

public function __construct(readonly SettingBagInterface $settings)

HdsHostCheck::check()

public function check(): ComplianceResult

MailboxKeyCheck class

final class MailboxKeyCheck implements ComplianceCheckInterface MailboxKeyCheck.php:10

Messages are stored encrypted, and there is a key to do it with.

MailboxKeyCheck::__construct()

public function __construct(readonly ?object $cipher = null)

MailboxKeyCheck::check()

public function check(): ComplianceResult

StaffTwoFactorCheck class

final class StaffTwoFactorCheck implements ComplianceCheckInterface StaffTwoFactorCheck.php:20

Every staff account signs in with a second factor: the application requires it of the staff's role through glitchr/omnibase (base.security.two_factor.required_roles: [ROLE_STAFF], postpone: false - docs/secrecy.md), which sends an account without one to its enrolment page.

Missing while nothing requires it; a warning while accounts have none yet.

StaffTwoFactorCheck::__construct()

public function __construct(readonly EntityManagerInterface $entityManager, readonly SecurityPolicy $policy, readonly RoleHierarchyInterface $roles, readonly string $staffRole = 'ROLE_STAFF')

StaffTwoFactorCheck::check()

public function check(): ComplianceResult

TeleconsultationCheck class

final class TeleconsultationCheck implements ComplianceCheckInterface TeleconsultationCheck.php:10

The built-in video is not listed by the ANS: no reimbursable teleconsultation through it.

TeleconsultationCheck::__construct()

public function __construct(readonly bool $referenced = false, readonly bool $visio = true)

TeleconsultationCheck::check()

public function check(): ComplianceResult

Base\Health\Controller\Admin

HomeCareController class

class HomeCareController extends AbstractController HomeCareController.php:25

The home care requests waiting, in the back office: who asks, where, what care and how often - then who goes and when the first visit is: accepted, the visits enter the agenda as a series; or refused.

HomeCareController::__construct()

public function __construct(readonly HomeCareRequestRepository $requests, readonly HomeCare $homeCare, readonly MemberRepository $members, readonly SlotFinder $slots, readonly TranslatorInterface $translator)

HomeCareController::index()

public function index(): Response

HomeCareController::decide()

public function decide(Request $request, HomeCareRequest $care, string $action): Response

Base\Health\Controller\Admin\Crud

FeeCrudController class

class FeeCrudController extends AbstractCrudController FeeCrudController.php:24

The fees as they are displayed: a practitioner's, or the whole practice's.

FeeCrudController::setTranslator()

public function setTranslator(TranslatorInterface $translator): void

FeeCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

FeeCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

FeeCrudController::configureCrud()

public function configureCrud(Crud $crud): Crud

FeeCrudController::configureActions()

public function configureActions(Actions $actions): Actions

FeeCrudController::configureFields()

public function configureFields(string $pageName): iterable

HomeCareRequestCrudController class

class HomeCareRequestCrudController extends AbstractCrudController HomeCareRequestCrudController.php:26

Every home care request, as a list; the screen to answer them is the agenda's "Soins à domicile" page.

HomeCareRequestCrudController::setTranslator()

public function setTranslator(TranslatorInterface $translator): void

HomeCareRequestCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

HomeCareRequestCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

HomeCareRequestCrudController::configureCrud()

public function configureCrud(Crud $crud): Crud

HomeCareRequestCrudController::configureActions()

public function configureActions(Actions $actions): Actions

HomeCareRequestCrudController::configureFields()

public function configureFields(string $pageName): iterable

PatientProfileCrudController class

class PatientProfileCrudController extends AbstractCrudController PatientProfileCrudController.php:26

The patients as the practice knows them: who, how to reach them, where they live. Nothing clinical is kept here.

PatientProfileCrudController::setTranslator()

public function setTranslator(TranslatorInterface $translator): void

PatientProfileCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

PatientProfileCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

PatientProfileCrudController::configureCrud()

public function configureCrud(Crud $crud): Crud

PatientProfileCrudController::configureActions()

public function configureActions(Actions $actions): Actions

PatientProfileCrudController::configureFields()

public function configureFields(string $pageName): iterable

PracticeCrudController class

class PracticeCrudController extends AbstractCrudController PracticeCrudController.php:28

The practice: its kind, its FINESS number, what its pages say of emergencies and of care out of hours.

PracticeCrudController::setTranslator()

public function setTranslator(TranslatorInterface $translator): void

PracticeCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

PracticeCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

PracticeCrudController::configureActions()

public function configureActions(Actions $actions): Actions

PracticeCrudController::configureFields()

public function configureFields(string $pageName): iterable

PractitionerCrudController class

class PractitionerCrudController extends AbstractCrudController PractitionerCrudController.php:30

The team's health professionals: profession, agreement with the health insurance, Carte Vitale, MSSanté address. "Lire l'Annuaire Santé" reads the profession and the MSSanté address from the RPPS number on the member's record.

PractitionerCrudController::setTranslator()

public function setTranslator(TranslatorInterface $translator): void

PractitionerCrudController::getEntityFqcn()

public static function getEntityFqcn(): string

PractitionerCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

PractitionerCrudController::configureActions()

public function configureActions(Actions $actions): Actions

PractitionerCrudController::configureFields()

public function configureFields(string $pageName): iterable

PractitionerCrudController::setRegistry()

public function setRegistry(PractitionerRegistry $registry): void

PractitionerCrudController::registry()

public function registry(Request $request, string $entityId): Response

"Lire l'Annuaire Santé".

Base\Health\Controller\Client

HealthController class

class HealthController extends AbstractController HealthController.php:35

The health regime's public pages: the fees (which the law has posted), care at home - where the practice goes, and the request -, video consultations, and what to do in an emergency.

HealthController::__construct()

public function __construct(readonly PracticeRepository $practices, readonly TranslatorInterface $translator, readonly EntityManagerInterface $entityManager)

HealthController::fees()

public function fees(FeeRepository $fees): Response

HealthController::homeCare()

public function homeCare(Request $request, ServiceAreaRepository $areas, HomeCare $homeCare, DependentRepository $dependents, DocumentVault $vault, PatientProfiles $profiles): Response

HealthController::teleconsultation()

public function teleconsultation(MemberRepository $members, AppointmentTypeRepository $types): Response

HealthController::emergencies()

public function emergencies(): Response

SpaceController class

class SpaceController extends AbstractController SpaceController.php:35

The patient's space: what comes next (appointments, a video room to join, documents not read yet, home care asked), who they are for the practice (their profile, their dependants), and their data - to take away or to have erased.

SpaceController::__construct()

public function __construct(readonly PatientProfiles $profiles, readonly EntityManagerInterface $entityManager, readonly TranslatorInterface $translator)

SpaceController::index()

public function index(AppointmentRepository $appointments, DocumentRepository $documents, HomeCareRequestRepository $homeCare, CareTeam $careTeam): Response

SpaceController::profile()

public function profile(Request $request, PractitionerRepository $practitioners): Response

SpaceController::dependents()

public function dependents(Request $request, DependentRepository $dependents): Response

SpaceController::cancelCare()

public function cancelCare(Request $request, int $id, HomeCareRequestRepository $requests, HomeCare $homeCare): Response

SpaceController::data()

public function data(AccessLogRepository $logs): Response

One's data: what is held, who looked at one's documents, the export, the erasure.

SpaceController::export()

public function export(Request $request, string $format, PatientData $data): Response

SpaceController::erase()

public function erase(Request $request, PatientData $data): Response

Base\Health\Demo

HealthDemoAccounts class

final class HealthDemoAccounts implements DemoAccountProviderInterface HealthDemoAccounts.php:26

The demonstration accounts of a practice (glitchr/omnibase's demo environment): one for each role this bundle and omnibase/office know, with the identifiers the practices' fixtures have always used. The roles of the staff come from two groups, as in a real practice - "Praticiens" (ROLE_PRACTITIONER) and "Secrétariat" (ROLE_SECRETARY), both ROLE_STAFF through the application's role hierarchy; the coordination is the practice's administrator.

An application's fixtures take them from Base\Demo\DemoAccountFactory ($accounts->account('docteur', $manager)) and attach what makes them worth signing in as: a team member and an agenda to the practitioners, a file and appointments to the patients. A practice without one of these roles (a nursing practice has no physician) leaves it out: base.demo.exclude.

Registered when the installed glitchr/omnibase has the demo environment (config/services.php).

const PRACTITIONERS = 'Praticiens'
const SECRETARIES = 'Secrétariat'
const PATIENTS = 'Patients'

HealthDemoAccounts::getDemoAccounts()

public function getDemoAccounts(): iterable

Base\Health\DependencyInjection

HealthConfiguration class

class HealthConfiguration extends AbstractBaseConfiguration HealthConfiguration.php:8

HealthConfiguration::getConfigTreeBuilder()

public function getConfigTreeBuilder(): TreeBuilder

HealthExtension class

class HealthExtension extends AbstractBaseExtension implements PrependExtensionInterface HealthExtension.php:12

HealthExtension::getConfiguration()

public function getConfiguration(array $config, ContainerBuilder $container): HealthConfiguration

HealthExtension::prepend()

public function prepend(ContainerBuilder $container): void

The office's public pages in the health regime's words: the team as practitioners (profession, sector, fees, next slots), the contact form's warning (no medical data: the patient space is for that).

HealthExtension::load()

public function load(array $configs, ContainerBuilder $container): void

Base\Health\Entity

Dependent class

class Dependent Dependent.php:15

Someone an account holder books for: a child, a parent they care for.

No account of their own; their appointments and documents are the holder's to see.

Dependent::__construct()

public function __construct(?User $holder = null, string $givenName = '', string $familyName = '', Relation $relation = Relation::CHILD)

Dependent::__toString()

public function __toString(): string

Dependent::getId()

public function getId(): ?int

Dependent::getHolder()

public function getHolder(): ?User

Dependent::setHolder()

public function setHolder(?User $holder): self

Dependent::getGivenName()

public function getGivenName(): string

Dependent::setGivenName()

public function setGivenName(?string $name): self

Dependent::getFamilyName()

public function getFamilyName(): string

Dependent::setFamilyName()

public function setFamilyName(?string $name): self

Dependent::getBirthDate()

public function getBirthDate(): ?\DateTimeImmutable

Dependent::setBirthDate()

public function setBirthDate(?\DateTimeInterface $date): self

Dependent::getRelation()

public function getRelation(): Relation

Dependent::setRelation()

public function setRelation(Relation|string $relation): self

Dependent::getRelationValue()

public function getRelationValue(): string

Dependent::setRelationValue()

public function setRelationValue(?string $value): self

Fee class

class Fee Fee.php:13

A fee as it must be displayed (French law has practitioners post their fees and the reimbursement base): what for, how much, what the health insurance refunds on, for one practitioner or for the whole practice.

Fee::__construct()

public function __construct(string $label = '', string $amount = '', ?Practitioner $practitioner = null, ?string $reimbursement = null, ?string $category = null)

Fee::__toString()

public function __toString(): string

Fee::getId()

public function getId(): ?int

Fee::getPractitioner()

public function getPractitioner(): ?Practitioner

Fee::setPractitioner()

public function setPractitioner(?Practitioner $practitioner): self

Fee::getCategory()

public function getCategory(): ?string

Fee::setCategory()

public function setCategory(?string $category): self

Fee::getLabel()

public function getLabel(): string

Fee::setLabel()

public function setLabel(?string $label): self

Fee::getAmount()

public function getAmount(): string

Fee::setAmount()

public function setAmount(?string $amount): self

Fee::getReimbursement()

public function getReimbursement(): ?string

Fee::setReimbursement()

public function setReimbursement(?string $text): self

Fee::getPosition()

public function getPosition(): int

Fee::setPosition()

public function setPosition(?int $position): self

HomeCareRequest class

class HomeCareRequest HomeCareRequest.php:21

Care asked at home: where (checked against the practice's service areas before it is accepted at all), what care, how often, from when to when, the prescription deposited in the vault. Accepted by the practice, it becomes a series of appointments in the agenda. The note the patient typed is kept encrypted.

const CARE_TYPES = ['injection', 'dressing', 'blood_test', 'hygiene', 'infusion', 'monitoring', 'medication', 'other']

HomeCareRequest::__construct()

public function __construct(?User $patient = null)

HomeCareRequest::__toString()

public function __toString(): string

HomeCareRequest::getId()

public function getId(): ?int

HomeCareRequest::getPatient()

public function getPatient(): ?User

HomeCareRequest::setPatient()

public function setPatient(?User $patient): self

HomeCareRequest::getDependent()

public function getDependent(): ?Dependent

HomeCareRequest::setDependent()

public function setDependent(?Dependent $dependent): self

HomeCareRequest::getStreet()

public function getStreet(): string

HomeCareRequest::setStreet()

public function setStreet(?string $street): self

HomeCareRequest::getPostalCode()

public function getPostalCode(): string

HomeCareRequest::setPostalCode()

public function setPostalCode(?string $code): self

HomeCareRequest::getCity()

public function getCity(): string

HomeCareRequest::setCity()

public function setCity(?string $city): self

HomeCareRequest::getAddress()

public function getAddress(): string

HomeCareRequest::getPhone()

public function getPhone(): ?string

HomeCareRequest::setPhone()

public function setPhone(?string $phone): self

HomeCareRequest::getCareType()

public function getCareType(): string

HomeCareRequest::setCareType()

public function setCareType(?string $type): self

HomeCareRequest::getFrequency()

public function getFrequency(): CareFrequency

HomeCareRequest::setFrequency()

public function setFrequency(CareFrequency|string $frequency): self

HomeCareRequest::getStartDate()

public function getStartDate(): \DateTimeImmutable

HomeCareRequest::setStartDate()

public function setStartDate(\DateTimeInterface $date): self

HomeCareRequest::getEndDate()

public function getEndDate(): ?\DateTimeImmutable

HomeCareRequest::setEndDate()

public function setEndDate(?\DateTimeInterface $date): self

HomeCareRequest::getPreferredTime()

public function getPreferredTime(): ?string

HomeCareRequest::setPreferredTime()

public function setPreferredTime(?string $time): self

HomeCareRequest::getPrescription()

public function getPrescription(): ?Document

HomeCareRequest::setPrescription()

public function setPrescription(?Document $document): self

HomeCareRequest::getNotesCipher()

public function getNotesCipher(): ?string

HomeCareRequest::setNotesCipher()

public function setNotesCipher(?string $cipher): self

HomeCareRequest::getStatus()

public function getStatus(): CareStatus

HomeCareRequest::setStatus()

public function setStatus(CareStatus $status): self

HomeCareRequest::getStatusValue()

public function getStatusValue(): string

HomeCareRequest::isPending()

public function isPending(): bool

HomeCareRequest::getArea()

public function getArea(): ?ServiceArea

HomeCareRequest::setArea()

public function setArea(?ServiceArea $area): self

HomeCareRequest::getAssignedTo()

public function getAssignedTo(): ?Member

HomeCareRequest::setAssignedTo()

public function setAssignedTo(?Member $member): self

HomeCareRequest::getSeries()

public function getSeries(): ?string

HomeCareRequest::setSeries()

public function setSeries(?string $series): self

HomeCareRequest::getCreatedAt()

public function getCreatedAt(): \DateTimeImmutable

HomeCareRequest::getDecidedAt()

public function getDecidedAt(): ?\DateTimeImmutable

HomeCareRequest::getVisitCount()

public function getVisitCount(): int

How many visits it asks for.

class IdentityLink IdentityLink.php:15

Whose account an identity of FranceConnect or Pro Santé Connect is: the provider and its sub - the provider's own, stable identifier of the person - never an e-mail address, which proves nothing about who someone is. One identity, one account; an account may hold several identities.

public function __construct(User $user, string $provider, string $sub)
public function getId(): ?int
public function getUser(): User
public function getProvider(): string
public function getSub(): string
public function getAcr(): ?string
public function getCreatedAt(): \DateTimeImmutable
public function getLastUsedAt(): ?\DateTimeImmutable
public function used(?string $acr = null): self

PatientProfile class

class PatientProfile PatientProfile.php:16

What the practice needs to know of an account to receive its holder: who they are, how to reach them, where they live (home visits), whether one of the practice's physicians is their "médecin traitant", and whether they object to their documents being shared within the care team. Not a medical record: nothing clinical is kept here.

PatientProfile::__construct()

public function __construct(?User $user = null, string $givenNames = '', string $familyName = '')

PatientProfile::__toString()

public function __toString(): string

PatientProfile::getId()

public function getId(): ?int

PatientProfile::getUser()

public function getUser(): ?User

PatientProfile::setUser()

public function setUser(?User $user): self

PatientProfile::getFamilyName()

public function getFamilyName(): string

PatientProfile::setFamilyName()

public function setFamilyName(?string $name): self

PatientProfile::getGivenNames()

public function getGivenNames(): string

PatientProfile::setGivenNames()

public function setGivenNames(?string $names): self

PatientProfile::getFullName()

public function getFullName(): string

PatientProfile::getBirthDate()

public function getBirthDate(): ?\DateTimeImmutable

PatientProfile::setBirthDate()

public function setBirthDate(?\DateTimeInterface $date): self

PatientProfile::getPhone()

public function getPhone(): ?string

PatientProfile::setPhone()

public function setPhone(?string $phone): self

PatientProfile::getStreet()

public function getStreet(): ?string

PatientProfile::setStreet()

public function setStreet(?string $street): self

PatientProfile::getPostalCode()

public function getPostalCode(): ?string

PatientProfile::setPostalCode()

public function setPostalCode(?string $code): self

PatientProfile::getCity()

public function getCity(): ?string

PatientProfile::setCity()

public function setCity(?string $city): self

PatientProfile::getAddress()

public function getAddress(): string

PatientProfile::getReferringPhysician()

public function getReferringPhysician(): ?Practitioner

PatientProfile::setReferringPhysician()

public function setReferringPhysician(?Practitioner $practitioner): self

PatientProfile::isSharingOpposition()

public function isSharingOpposition(): bool

PatientProfile::setSharingOpposition()

public function setSharingOpposition(bool $opposition): self

PatientProfile::getCreatedAt()

public function getCreatedAt(): \DateTimeImmutable

PatientProfile::getErasedAt()

public function getErasedAt(): ?\DateTimeImmutable

PatientProfile::erase()

public function erase(): self

Practice class

class Practice Practice.php:15

The practice of care an office is: its kind (a multi-professional health centre, a nursing practice...), its FINESS number when it has one, what to do in an emergency and how care is given out of hours.

Practice::__construct()

public function __construct(?Office $office = null, PracticeType $type = PracticeType::MSP)

Practice::__toString()

public function __toString(): string

Practice::getId()

public function getId(): ?int

Practice::getOffice()

public function getOffice(): ?Office

Practice::setOffice()

public function setOffice(?Office $office): self

Practice::getType()

public function getType(): PracticeType

Practice::setType()

public function setType(PracticeType|string $type): self

Practice::getTypeValue()

public function getTypeValue(): string

Practice::setTypeValue()

public function setTypeValue(?string $value): self

Practice::getFiness()

public function getFiness(): ?string

Practice::setFiness()

public function setFiness(?string $finess): self

Practice::getPresentation()

public function getPresentation(): ?string

Practice::setPresentation()

public function setPresentation(?string $text): self

Practice::getEmergencyInstructions()

public function getEmergencyInstructions(): ?string

Practice::setEmergencyInstructions()

public function setEmergencyInstructions(?string $text): self

Practice::getOutOfHours()

public function getOutOfHours(): ?string

Practice::setOutOfHours()

public function setOutOfHours(?string $text): self

Practice::isAcceptsNewPatients()

public function isAcceptsNewPatients(): bool

Practice::setAcceptsNewPatients()

public function setAcceptsNewPatients(bool $accepts): self

Practice::isTeleconsultation()

public function isTeleconsultation(): bool

Practice::setTeleconsultation()

public function setTeleconsultation(bool $on): self

Practice::isHomeCare()

public function isHomeCare(): bool

Practice::setHomeCare()

public function setHomeCare(bool $on): self

Practice::isHomeCareFirst()

public function isHomeCareFirst(): bool

Home care first on the pages: a nursing practice, or any practice that only visits.

Practitioner class

class Practitioner Practitioner.php:17

What a member of the team is as a health professional: the profession (the Annuaire Santé's code and its name), a specialty, the agreement with the health insurance, whether the Carte Vitale and third-party payment are taken, the MSSanté address. The RPPS number is the member's registryId: "Lire l'Annuaire Santé" fills the profession and the MSSanté address.

Practitioner::__construct()

public function __construct(?Member $member = null, ?string $profession = null, ?string $professionCode = null)

Practitioner::__toString()

public function __toString(): string

Practitioner::getId()

public function getId(): ?int

Practitioner::getMember()

public function getMember(): ?Member

Practitioner::setMember()

public function setMember(?Member $member): self

Practitioner::getRpps()

public function getRpps(): ?string

Practitioner::getProfessionCode()

public function getProfessionCode(): ?string

Practitioner::setProfessionCode()

public function setProfessionCode(?string $code): self

Practitioner::getProfession()

public function getProfession(): ?string

Practitioner::setProfession()

public function setProfession(?string $profession): self

Practitioner::getSpecialty()

public function getSpecialty(): ?string

Practitioner::setSpecialty()

public function setSpecialty(?string $specialty): self

Practitioner::getSector()

public function getSector(): ?Sector

Practitioner::setSector()

public function setSector(Sector|string|null $sector): self

Practitioner::getSectorValue()

public function getSectorValue(): ?string

Practitioner::setSectorValue()

public function setSectorValue(?string $value): self

Practitioner::isCarteVitale()

public function isCarteVitale(): bool

Practitioner::setCarteVitale()

public function setCarteVitale(bool $on): self

Practitioner::isThirdPartyPayment()

public function isThirdPartyPayment(): bool

Practitioner::setThirdPartyPayment()

public function setThirdPartyPayment(bool $on): self

Practitioner::isAcceptsNewPatients()

public function isAcceptsNewPatients(): bool

Practitioner::setAcceptsNewPatients()

public function setAcceptsNewPatients(bool $on): self

Practitioner::getMssante()

public function getMssante(): ?string

Practitioner::setMssante()

public function setMssante(?string $address): self

Practitioner::isPhysician()

public function isPhysician(): bool

A physician (the only profession a patient declares as "médecin traitant").

Base\Health\Enum

CareFrequency enum

enum CareFrequency CareFrequency.php:5

case ONCE = 'once'
case DAILY = 'daily'
case EVERY_OTHER_DAY = 'every_other_day'
case WEEKLY = 'weekly'

CareFrequency::label()

public function label(): string

CareFrequency::interval()

public function interval(): ?\DateInterval

The interval between two visits; null: a single visit.

CareFrequency::count()

public function count(\DateTimeInterface $from, ?\DateTimeInterface $until): int

How many visits between two calendar days, both included: the days as written, whatever the hour and the timezone.

CareStatus enum

enum CareStatus CareStatus.php:5

case PENDING = 'pending'
case ACCEPTED = 'accepted'
case REFUSED = 'refused'
case CANCELLED = 'cancelled'

CareStatus::label()

public function label(): string

PracticeType enum

enum PracticeType PracticeType.php:6

What kind of practice the site is for; the pages put forward what suits it.

case MSP = 'msp'
case HEALTH_CENTRE = 'health_centre'
case MEDICAL = 'medical'
case NURSING = 'nursing'
case PHYSIOTHERAPY = 'physiotherapy'
case MIDWIFERY = 'midwifery'
case PARAMEDICAL = 'paramedical'

PracticeType::label()

public function label(): string

PracticeType::isHomeCareFirst()

public function isHomeCareFirst(): bool

A practice that mostly goes to its patients: home care comes first on its pages.

PracticeType::schemaType()

public function schemaType(): string

schema.org's type for the JSON-LD.

Relation enum

enum Relation Relation.php:5

case CHILD = 'child'
case PARENT = 'parent'
case SPOUSE = 'spouse'
case OTHER = 'other'

Relation::label()

public function label(): string

Sector enum

enum Sector Sector.php:6

A practitioner's agreement with the health insurance (conventionnement).

case SECTOR_1 = 'sector_1'
case SECTOR_2 = 'sector_2'
case OPTAM = 'optam'
case NOT_CONTRACTED = 'not_contracted'
case CONTRACTED = 'contracted'

Professions with a single agreement (nurses, physiotherapists, midwives): "conventionné".

Sector::label()

public function label(): string

Base\Health\Exception

HomeCareException class

class HomeCareException extends RuntimeException HomeCareException.php:6

A home care request refused, its reason a translation key of the health domain.

HomeCareException::__construct()

public function __construct(string $key, readonly array $parameters = [])

HomeCareException::getKey()

public function getKey(): string

HomeCareException::getParameters()

public function getParameters(): array

Base\Health\Mailbox

CareTeamRecipients class

final class CareTeamRecipients implements RecipientProviderInterface CareTeamRecipients.php:13

Whom a patient may write to besides the secretariat's desk: the practitioners who follow them - by name, never by a username to guess.

CareTeamRecipients::__construct()

public function __construct(readonly CareTeam $careTeam)

CareTeamRecipients::recipients()

public function recipients(User $sender): array

Base\Health\Repository

DependentRepository class

class DependentRepository extends ServiceEntityRepository DependentRepository.php:10

DependentRepository::__construct()

public function __construct(ManagerRegistry $registry)

DependentRepository::findForHolder()

public function findForHolder(object $holder): array

FeeRepository class

class FeeRepository extends ServiceEntityRepository FeeRepository.php:10

FeeRepository::__construct()

public function __construct(ManagerRegistry $registry)

FeeRepository::findForPractitioner()

public function findForPractitioner(object $practitioner): array

FeeRepository::findOrdered()

public function findOrdered(): array
Returns

every fee, the practice's first then each practitioner's

HomeCareRequestRepository class

class HomeCareRequestRepository extends ServiceEntityRepository HomeCareRequestRepository.php:10

HomeCareRequestRepository::__construct()

public function __construct(ManagerRegistry $registry)

HomeCareRequestRepository::findPending()

public function findPending(int $limit = 20): array

HomeCareRequestRepository::countPending()

public function countPending(): int

HomeCareRequestRepository::findForPatient()

public function findForPatient(object $patient): array

HomeCareRequestRepository::purgeDecidedBefore()

public function purgeDecidedBefore(\DateTimeInterface $before): int

IdentityLinkRepository class

class IdentityLinkRepository extends ServiceEntityRepository IdentityLinkRepository.php:10

IdentityLinkRepository::__construct()

public function __construct(ManagerRegistry $registry)

IdentityLinkRepository::findOneBySub()

public function findOneBySub(string $provider, string $sub): ?IdentityLink

IdentityLinkRepository::findForUser()

public function findForUser(object $user): array

PatientProfileRepository class

class PatientProfileRepository extends ServiceEntityRepository PatientProfileRepository.php:10

PatientProfileRepository::__construct()

public function __construct(ManagerRegistry $registry)

PatientProfileRepository::findOneByUser()

public function findOneByUser(?object $user): ?PatientProfile
public function search(string $query, int $limit = 20): array
Returns

by name, for the staff's search

PracticeRepository class

class PracticeRepository extends ServiceEntityRepository PracticeRepository.php:10

PracticeRepository::__construct()

public function __construct(ManagerRegistry $registry)

PracticeRepository::findMain()

public function findMain(): ?Practice

The practice of the main office (a site is one practice).

PractitionerRepository class

class PractitionerRepository extends ServiceEntityRepository PractitionerRepository.php:10

PractitionerRepository::__construct()

public function __construct(ManagerRegistry $registry)

PractitionerRepository::findOneByMember()

public function findOneByMember(?object $member): ?Practitioner

PractitionerRepository::findOneByUser()

public function findOneByUser(?object $user): ?Practitioner

PractitionerRepository::findOneByRpps()

public function findOneByRpps(string $rpps): ?Practitioner

By RPPS number: how Pro Santé Connect names a practitioner.

PractitionerRepository::findPhysicians()

public function findPhysicians(): array
Returns

the practice's physicians, for "médecin traitant"

Base\Health\Security

CareTeamAudience class

final class CareTeamAudience implements AudienceResolverInterface CareTeamAudience.php:26

Medical secrecy, as the practice's tool applies it to a patient's documents (beyond the patient and the author, who always read theirs):

  • a practitioner who follows the patient (Base\Health\Service\CareTeam) reads them - unless the patient objected to sharing within the team;
  • the secretariat files and sends: it sees that a document exists and what it is called, not what it says;
  • a document not marked confidential (an administrative letter) is read by the staff;
  • nobody else: neither another patient, nor the site's administrators as such.

CareTeamAudience::__construct()

public function __construct(readonly CareTeam $careTeam, readonly RoleHierarchyInterface $roles, readonly string $practitionerRole = 'ROLE_PRACTITIONER', readonly string $secretaryRole = 'ROLE_SECRETARY', readonly string $staffRole = 'ROLE_STAFF')

CareTeamAudience::decide()

public function decide(string $attribute, Document $document, UserInterface $user): ?bool

Base\Health\Service

AppointmentNaming class

final class AppointmentNaming AppointmentNaming.php:15

An appointment booked online carries the patient's name as their profile writes it ("Camille ÉRABLE"), not the account's identifier: it is what the agenda shows the staff.

AppointmentNaming::__construct()

public function __construct(readonly PatientProfileRepository $profiles, readonly EntityManagerInterface $entityManager)

AppointmentNaming::name()

public function name(AppointmentEvent $event): void

CareTeam class

class CareTeam CareTeam.php:20

Who follows a patient - their care team in the practice: the members they have, or had, an appointment with (not a cancelled one), and the physician of the practice they declared as their "médecin traitant".

It is what lets a practitioner read a patient's documents, and what a patient is offered to write to.

CareTeam::__construct()

public function __construct(readonly EntityManagerInterface $entityManager, readonly MemberRepository $members, readonly PatientProfileRepository $profiles)

CareTeam::members()

public function members(User $patient): array

CareTeam::follows()

public function follows(User $staff, User $patient): bool

Whether that account is a member who follows the patient.

CareTeam::hasOpposition()

public function hasOpposition(User $patient): bool

The patient objected to their documents being shared within the team.

DependentBeneficiaries class

final class DependentBeneficiaries implements BeneficiaryProviderInterface DependentBeneficiaries.php:10

A patient books for themselves or for one of their dependants: a child, a parent they care for.

DependentBeneficiaries::__construct()

public function __construct(readonly DependentRepository $dependents, readonly TranslatorInterface $translator)

DependentBeneficiaries::beneficiaries()

public function beneficiaries(object $user): array

HomeCare class

class HomeCare HomeCare.php:29

Care at home, from the request to the agenda. A request is checked against the practice's service areas first: outside all of them it is refused at once, with the reason, rather than left waiting for a call back. Accepted by the practice - who goes, the first visit's day and hour - it becomes a series of appointments (omnibase/office's Booker).

HomeCare::__construct()

public function __construct(readonly EntityManagerInterface $entityManager, readonly ServiceAreaRepository $areas, readonly AppointmentTypeRepository $types, readonly Booker $booker, readonly Cipher $cipher)

HomeCare::submit()

public function submit(User $patient, array $data, ?Dependent $dependent = null, ?Document $prescription = null): HomeCareRequest
Throws

HomeCareException home_care.error.outside_area, .incomplete, .dates

HomeCare::accept()

public function accept(HomeCareRequest $request, Member $member, \DateTimeInterface $first, ?User $by = null, ?AppointmentType $type = null): array

Accepted: the visits enter the agenda, the first on $first (day and hour), the others at the request's frequency until its end date.

Throws

HomeCareException|\BookingException

HomeCare::refuse()

public function refuse(HomeCareRequest $request): void

HomeCare::cancel()

public function cancel(HomeCareRequest $request): void

HomeCare::visitors()

public function visitors(): array
Returns

the members who go to patients: those with a home-visit appointment type

HomeCare::notes()

public function notes(HomeCareRequest $request): ?string

PatientData class

class PatientData PatientData.php:26

A patient's rights over their data (GDPR art. 15, 17, 20): everything the practice's site holds about them as one JSON document, or a zip with their documents decrypted; and erasure - what identifies them goes at once, what must be kept (past appointments, the access log) stays, bare, until health:purge's retention runs out.

PatientData::__construct()

public function __construct(readonly PatientProfileRepository $profiles, readonly DependentRepository $dependents, readonly HomeCareRequestRepository $homeCare, readonly IdentityLinkRepository $links, readonly AppointmentRepository $appointments, readonly DocumentRepository $documents, readonly AccessLogRepository $logs, readonly DocumentVault $vault, readonly Cipher $cipher, readonly Booker $booker, readonly HomeCare $care, readonly EntityManagerInterface $entityManager)

PatientData::export()

public function export(User $user): array

PatientData::zip()

public function zip(User $user): string

A zip - data.json and each available document, decrypted - written to a temporary file whose path is returned.

PatientData::erase()

public function erase(User $user): void

Erased: the profile emptied, the dependants removed, the upcoming appointments cancelled, the pending home care requests cancelled, the documents the patient deposited destroyed, those sent to them withdrawn. The account itself is closed from its own settings.

PatientProfiles class

class PatientProfiles PatientProfiles.php:13

A patient's profile, made when first needed - or when the account opens from the practice's invitation.

PatientProfiles::__construct()

public function __construct(readonly PatientProfileRepository $profiles, readonly EntityManagerInterface $entityManager)

PatientProfiles::of()

public function of(User $user): PatientProfile

PatientProfiles::onAccountCreated()

public function onAccountCreated(ClientAccountEvent $event): void

PractitionerRegistry class

class PractitionerRegistry PractitionerRegistry.php:18

"Lire l'Annuaire Santé": a practitioner read from the ANS's directory by their RPPS number (glitchr/omnistate with omnistate/annuaire-sante), their profession and MSSanté address written on the record. The key is the one typed in the back office (API keys) if there is one, else the configuration's (omnistate.annuaire_sante.api_key).

const KEY_SETTING = 'api.annuaire_sante.key'

PractitionerRegistry::__construct()

public function __construct(readonly MemberRegistry $members, readonly EntityManagerInterface $entityManager, readonly SettingBagInterface $settings, readonly ?HttpClientInterface $http = null)

PractitionerRegistry::isAvailable()

public function isAvailable(): bool

PractitionerRegistry::refresh()

public function refresh(Practitioner $practitioner): ?object
Returns

null: no RPPS on the record, or the directory does not know it

Throws

Omnistate\Exception\OmnistateException the directory did not answer, or no key

ResultSender class

class ResultSender ResultSender.php:21

A result, a prescription, a report sent to a patient: kept in the office's encrypted vault, the patient told by an e-mail that says only "a document awaits you" (never by an e-mail that carries it: that would break medical secrecy), and, when asked, a word in the mailbox - itself stored encrypted, its notice without content.

The official channel to a patient's Mon espace santé is MSSanté: see Base\Health\Transmission\MssanteTransmitterInterface, reserved.

ResultSender::__construct()

public function __construct(readonly DocumentVault $vault, readonly ?object $mailbox = null)
$mailbox

wired when omnibase/mailbox is installed

ResultSender::send()

public function send(File|string $file, User $patient, User $sender, string $title, DocumentKind $kind = DocumentKind::RESULT, ?string $message = null, ?\DateTimeInterface $expiresAt = null): Document
Throws

Base\Office\Exception\ShareException|\Base\Office\Exception\KeyMissingException

Base\Health\Transmission

MssanteTransmitterInterface interface

interface MssanteTransmitterInterface MssanteTransmitterInterface.php:15

Reserved, not implemented: sending a document to a patient's Mon espace santé, or to another professional, through MSSanté - the official secure messaging of health. It takes an MSSanté operator and a professional's CPS card, which a practice's site does not have: a practice that gets them writes this interface's implementation; ResultSender would then offer it beside the vault.

MssanteTransmitterInterface::supports()

public function supports(string $address): bool

Whether this address can be written to (a patient's "<INS>@patient.mssante.fr", a professional's box).

MssanteTransmitterInterface::transmit()

public function transmit(Document $document, string $from, string $to, string $subject, string $body): string
$from

the sender's own MSSanté address

Returns

the operator's message id

Base\Health\Twig

HealthExtension class

class HealthExtension extends AbstractExtension HealthExtension.php:28

Health in templates: health_practice(), health_practitioner(member), health_fees(practitioner|null), health_emergency() (the banner's numbers), health_profile(user), health_care_team(user), health_types(member) (what can be booked with them), health_pending_care(), health_teleconsultation_referenced().

HealthExtension::__construct()

public function __construct(readonly PracticeRepository $practices, readonly PractitionerRepository $practitioners, readonly FeeRepository $fees, readonly PatientProfileRepository $profiles, readonly DependentRepository $dependents, readonly HomeCareRequestRepository $homeCare, readonly AppointmentTypeRepository $types, readonly CareTeam $careTeam, readonly array $emergency = [], readonly bool $referenced = false)

HealthExtension::getFunctions()

public function getFunctions(): array