# Synthetic Avouch example for Avouch Studio: a small clinic with patient visits. # All names and quotes are invented. formatVersion: 1 contexts: Clinic: Patients, visits and clinicians permission_rows_not_commands: [] knownSourceGaps: - id: G1 rule: R6 kind: effect_unspecified keys: ['SCHEDULE_VISIT:visit_clinician'] doc_line: 'guide#booking' conflict: The booking guide says the front desk assigns a clinician at booking; the clinic policy says the clinician is assigned when the visit is confirmed proposed: State in guide#booking whether a clinician is assigned at booking or at confirmation objectTypes: Patient: context: Clinic datasource: patients doc: 'guide#patient' properties: status: class: canonical cite: { doc: 'guide#patient', quote: A patient is active until the record is archived } Visit: context: Clinic datasource: visits doc: 'guide#visit' properties: status: class: canonical cite: { doc: 'guide#visit', quote: Visit status changes only through visit commands } Clinician: context: Clinic datasource: clinicians doc: 'guide#clinician' properties: status: class: canonical cite: { doc: 'guide#clinician', quote: A clinician is either on duty or off duty } stateMachines: Visit: doc: 'guide#visit-states' initial: REQUESTED terminal: [COMPLETED, CANCELLED] transitions: - { from: REQUESTED, to: CONFIRMED, by: [CONFIRM_VISIT] } - { from: CONFIRMED, to: COMPLETED, by: [COMPLETE_VISIT] } - { from: REQUESTED, to: CANCELLED, by: [CANCEL_VISIT] } linkTypes: - { id: visit_patient, from: Visit, to: Patient, cardinality: 'N:1', via: patient_id, doc: 'guide#visit' } - { id: visit_clinician, from: Visit, to: Clinician, cardinality: 'N:1', via: clinician_id, doc: 'guide#visit' } actionTypes: SCHEDULE_VISIT: context: Clinic doc: 'guide#booking' doc_term: Book a visit permission: keys: ['visit:create'] cite: { doc: 'guide#permissions', quote: Booking a visit needs visit:create } submissionCriteria: - id: patient_active reads: [Patient.status] cite: { doc: 'guide#booking', quote: Only an active patient can book a visit } creates: [Visit] edits: [] link_effects: visit_patient: effect: The new visit points to the booking patient cite: { doc: 'guide#booking', quote: The visit records the patient who booked it } visit_clinician: unspecified: The booking guide does not say whether a clinician is assigned at booking cite: { doc: 'guide#booking', quote: The front desk may assign a clinician } emits: [] CONFIRM_VISIT: context: Clinic doc: 'guide#confirm' doc_term: Confirm visit permission: any_of: - keys: ['visit:confirm:nurse'] cite: { doc: 'guide#permissions', quote: A nurse can confirm a visit with visit:confirm:nurse } - keys: ['visit:confirm:doctor'] cite: { doc: 'guide#permissions', quote: A doctor can confirm a visit with visit:confirm:doctor } submissionCriteria: - id: visit_requested reads: [Visit.status] cite: { doc: 'guide#confirm', quote: Only a requested visit can be confirmed } edits: [Visit.status] link_effects: visit_patient: { none: Confirming does not change the patient } visit_clinician: { none: Confirming does not change the clinician } emits: [] COMPLETE_VISIT: context: Clinic doc: 'guide#complete' doc_term: Complete visit permission: keys: ['visit:complete'] cite: { doc: 'guide#permissions', quote: Completing a visit needs visit:complete } submissionCriteria: - id: visit_confirmed reads: [Visit.status] cite: { doc: 'guide#complete', quote: Only a confirmed visit can be completed } edits: [Visit.status] link_effects: visit_patient: { none: Completing does not change the patient } visit_clinician: { none: Completing does not change the clinician } emits: [] CANCEL_VISIT: context: Clinic doc: 'guide#cancel' doc_term: Cancel visit permission: keys: ['visit:cancel'] cite: { doc: 'guide#permissions', quote: Cancelling a visit needs visit:cancel } submissionCriteria: - id: visit_requested reads: [Visit.status] cite: { doc: 'guide#cancel', quote: Only a requested visit can be cancelled } edits: [Visit.status] link_effects: visit_patient: { none: Cancelling does not change the patient } visit_clinician: { none: Cancelling does not change the clinician } emits: []