PetClinic is an existing veterinary platform focused on managing owners, pets, vets and visits on the clinic by that very same name. As means to develop new business lines, the clinic’s manager has decided to enter a new field in a planned and strategic approach, exploring how to offer new services by taking advantage of technological tools and processes that will be integrated into PetClinic. The field of choice was Pet Beauty Care, since it’s expected to become a growing market and has a high-income target audience.
Thus, a new approach to the business was designed by the name of “Charming Whiskers Program”, planning to use the PetClinic platform to manage and develop marketing techniques to incentivize recurrent consumer spending. Some of these techniques will be an online catalog of services, discount vouchers, timed promotions and beauty contests.
A Beauty Solution offered by PetClinic. For example, “dog haircut” or “cat nail clipping”. It has a fixed price and is given by a certain Vet.
- It's related to PetType.
- It's related to Vet.
A visit that an owner books for a beauty solution on a certain date and for a certain Pet. Vouchers can be used. The actual priced is stored on booking. It serves as a participation for the current beauty contest of that month, if wanted (the owner can add a photo of the Pet after the visit in order to participate on the contest).
- It’s related to BeautySolution.
- It’s related to Pet.
Discount voucher that can be given to owners for a variety of reasons, either manually or programmatically, and that can be used when booking a new visit for a beauty solution. For example, a 5% discount voucher after a visit, 50% discount voucher for winning a contest…
- It’s related to BeautySolution.
- It’s related to BeautySolutionVisit.
- It’s related to WorkshopAttendance.
- It’s related to Owner.
Discount, during a certain period, on a certain beauty solution.
- It’s related to BeautySolution.
Beauty contest that lasts a month (one is held every month), and where a winner is chosen after the end of every month. Owners can enter their pets once for every beauty solution visit they make during that month.
- It’s related to BeautySolutionVisit (winner)
As an administrator
So that owners can have a catalogue of solutions to pay for
I want to add new beauty solutions to the system.
Details:
- No two BeautySolutions can have the same title and be of the same PetType
- No BeautySolution can have a negative price
- All BeautySolutions need to be assigned to a PetType
- No Beauty Solution can have a blank title
- Beauty solutions can be "enabled" or not, being shown in the page to owners and guests only if set as such
Use cases:
Creation order | Title | PetType | Successfully created |
---|---|---|---|
1st | Grooming | Cat | ✔️ |
2nd | Grooming | Dog | ✔️ |
3rd (after 2nd!) | Grooming | Dog | ❌ |
4th | *blank | Cat | ❌ |
5th | Grooming | Null | ❌ |
- Creating a beauty solution with the title 'Grooming' and PetType 'Cat', and it is created successfully. - ✔️
- Creating a beauty solution with the title 'Grooming' and PetType 'Dog', and it is created successfully. - ✔️
- Creating a beauty solution with the title 'Grooming' and PetType 'Dog', and it is not created since a beauty solution with that title and type was just created before. - ❌
- Creating a beauty solution with a blank title or no PetType selected, and it is not created successfully. - ❌
As an user of the system or a guest
So that I can look up for information about which beauty solutions can interest me
I want to be able to list all beauty solutions provided by PetClinic
Use cases:
- Creating a beauty solution with "enabled" set to true, and it appears on the listing. - ✔️
- Creating a beauty solution with "enabled" set to false, and it doesn't appear on the listing. - ❌
As an user of the system or a guest
So that I can search for the solutions that interest me more efficiently
I want to be able to filter beauty solutions by PetType
Use cases:
- Creating a beauty solution with "cat" PetType, and it appears on the filtering set on "cat". - ✔️
- Creating a beauty solution with "dog" PetType, and it doesn't appear on the filtering set on "cat". - ❌
As an administrator
So that I can keep up to date the information displayed on the web about a solution of our clinic
I want to be able to update information of the solutions on the system
Details:
- PetType cannot be changed
- All the creating restrictions are also applied on updating
- If you change the "enabled" property to false, previously booked solutions remain unaffected even if the date is on the future.
Use cases:
- Edit a beauty solution with a given name and enabled set to true, and change it to "Test A" and enabled set to false. It's successful. - ✔️
- Edit a beauty solution with a given name, and change it to "Test A" and change the PetType. It's not successful. - ❌
- Edit a beauty solution with a given name, and change it to "". It's not successful. - ❌
As an owner
So that my pet remains beautiful, healthy and happy
I want to be able to book a visit for a beauty solution I’m interested in
Details:
- You can’t book more than one visit at the same time for the same pet.
- You can only book visits for tomorrow at the earliest.
- Visit hours are divided in X minutes intervals (a different amount of time depending on each solution).
- You can’t select a time slot for a visit if the vet that provides that solution is already booked on it.
Use Cases:
- Book a beauty solution visit for a free timeslot, for a pet you own, for a solution of that PetType. It's successful. - ✔️
- Book a beauty solution visit for a free timeslot, for a pet you own, for a solution of other PetType. It's not successful. - ❌
- Book a beauty solution visit for a free timeslot, for a pet you own, for a solution of that PetType. It's successful. The, with another owner, do the same for that very same timeslot, and a another solution of the same Vet. It's not successful. - ❌
As an owner
So that I can change my plans after booking a visit
I want to be able to withdraw my booked beauty solution visits
Details:
- You can only remove it if one day before the booked day at the latest.
- You can only remove it if it's yours (of your pet).
- If it's removed and a voucher was used, the voucher remains redeemed and unable to be used again.
Use Cases:
- Book a beauty solution visit for a free timeslot for tomorrow, for a pet you own, for a solution of that PetType. It's successful. Remove it inmediately after. It's successful. - ✔️
- Book a beauty solution visit for a free timeslot of today, for a pet you own, for a solution of that PetType. It's successful. Remove it inmediately after. It's not successful. - ❌
- Book a beauty solution visit for a free timeslot for tomorrow, for a pet you own, for a solution of that PetType. It's successful. Remove it inmediately after logged as another user. It's not successful. - ❌
As an administrator
So that I can make individual offers or solve voucher incidents
I want to be able to create a custom discount voucher for an owner, with a discount percentage and a description
Details:
- Discount percentage can't be either higher than 100% nor lower than 0%.
- Description can't be empty.
Use Cases:
- Create a discount voucher for an existing owner, with 15% discount percentage and the description "Test.". It's successful. - ✔️
- Create a discount voucher for an existing owner, with -1% discount percentage and the description "Test.". It's not successful. - ❌
- Create a discount voucher for an existing owner, with 15% discount percentage and the description "". It's not successful. - ❌
As an owner
So that I can pay less for a solution I’m interested in
I want to redeem one of my vouchers while booking a beauty solution.
Details:
- Only non-used vouchers can be redeemed on a new visit, being marked as used immediately after.
- No more than one voucher can be used on the same visit.
- No voucher can be used if there’s a promotion set up for that solution on that date (booked date, not booking date).
- Voucher redemption is done during visit booking.
Use Cases:
- Book a beauty solution visit and while doing it, assign a voucher to be redeemed, being it a non used voucher and being there no promotion set for that solution and date. It's successful. - ✔️
- Book a beauty solution visit and while doing it, assign a voucher to be redeemed, being it an used voucher and being there no promotion set for that solution and date. It's not successful. - ❌
- Book a beauty solution visit and while doing it, assign a voucher to be redeemed, being it a non used voucher and being there a promotion set for that solution and date. It's not successful. - ❌
As an owner
So that I can keep track of my vouchers
I want to display a list of them, with their info and sorted by date
Details:
- Used vouchers don’t appear.
Use Cases:
- As an administrator, create a voucher for an owner. It's successful. As an owner, list your vouchers. It appears listed. - ✔️
- As an administrator, create a voucher for an owner. It's successful. As an owner, use that voucher on a beauty solution visit. Then, list your voucher. It doesn't appear listed. - ❌
As an administrator
So that I can keep track of any user’s vouchers
I want to display a list of them, with their info and sorted by date
Details:
- Used vouchers do appear.
Use Cases:
- As an administrator, create a voucher for an owner. It's successful. List that owner's vouchers. It appears listed. - ✔️
- As an administrator, create a voucher for an owner. It's successful. As an owner, use that voucher on a beauty solution visit. Then, as an administrator, list that owner's vouchers. It appears listed. - ✔️
- As an administrator, create a voucher for an owner. It's successful. As another owner, list the first owner's vouchers. It's forbidden. - ❌
As an administrator
So that I can make a solution more appealing during a certain time
I want to be able to set up promotions for any solution
Details:
- The end date needs to be after the start date, and neither of them can be past dates
- The percentage of discount can’t be neither higher than 100 nor lower than 0
- Percentage of discount, end date and start date are all mandatory values
- The promotion isn’t applied to already booked visits, even if the booked date is during the promotion
- No promotions can be set on the same period and solution
Use Cases:
- As an administrator, create a promotion with proper dates and 15% discount. It's successful. As an owner, book a solution visit for the same solution both during the promotion and not. The difference between prices should be of 15% - ✔️
- As an owner, book a solution visit for a certain date. It's successful. As an administrator, create a promotion with proper dates that fall into the previously booked date and 15% discount. It's successful. The price before creating the promotion and after creating the promotion can't be different. - ❌
- As an administrator, create a promotion with past dates and 15% discount. It's not successful. - ❌
- As an administrator, create a promotion with proper dates and 101% discount. It's not successful. - ❌
- As an administrator, create a promotion with proper dates and 15% discount. It's successful. Create another promotion that coincides in period but doesn't have the exact same one, and with the same solution. It's not successful. - ❌
As an administrator
So that I can create monthly contests without having to be constantly on the lookout
I want the system to automatically set them up a week before its month starts
Details:
- Trigger for this action is still undecided, it will depend on the technology
- Beauty contests can’t be created for a past month
- Beauty contests can’t be created for a month that already has a beauty solution created
- Even though the trigger for the automation will happen a week before, it’s not a problem if beauty solutions are created sooner than that for any reason (although the system wont support that kind of action on its UI as of now, it can evolve and change in the future)
Use Cases:
- Create a beauty contest for the next month, being it not created yet. It's successful. - ✔️
- Create a beauty contest for the next month, being it already created. It's not successful. - ❌
- Create a beauty contest for the past month, being it not created yet. It's not successful. - ❌
As an user of the system or a guest
So that I can browse and see information about past contests
I want to be able to list all beauty contests sorted by date
Details:
- Future contests, if already created, are not listed if you’re not an administrator
Use Cases:
- Create a beauty contest for the current month, being it not created yet. It's successful. As an owner, list contests. It appears listed. - ✔️
- Create a beauty contest for the next month, being it not created yet. It's successful. As an owner, list contests. It does not appear - ❌
- Create a beauty contest for the next month, being it not created yet. It's successful. As an administrator, list contests. It appears listed - ✔️
As an user of the system or a guest
So that I can see information about a contest, be it past or current
I want to be able to display detailed information about the selected contest
Details:
- Month, participants and winner (if elapsed and selected) are shown
- Future contests, if already created, are not allowed to be displayed if you’re not an administrator
Use Cases:
- Create a beauty contest for the current month, being it not created yet. It's successful. As an owner, try to display it. It's successful. - ✔️
- Create a beauty contest for the next month, being it not created yet. It's successful. As an owner, try to display it. It's not successful - ❌
- Create a beauty contest for the next month, being it not created yet. It's successful. As an administrator, try to display it. It's successful - ✔️
As an owner
So that me and my pet can have fun participating on a beauty contest
I want to be able to register a participation by adding a photo after a beauty solution visit
Details:
- You can only add a photo after the visit date has elapsed
- You cannot add a photo if one has already been added before
- You cannot add a photo if the date of the contest has already ended (usually, the month of the visit)
Use Cases:
- Register participation with to the current month's contest, having a visit (already past) in this month with no participation registered. It's successful. ✔️
- Register participation with to the current month's contest, having a visit (not yet past) in this month with no participation registered. It's not successful. ❌
- Register participation with to the past month's contest, having a visit (already past) in this month with no participation registered. It's not successful. ❌
- Register participation with to the current month's contest, having a visit (already past) in the past month with no participation registered. It's not successful. ❌
- Register participation with to the current month's contest, having a visit (already past) in this month with a participation already registered. It's not successful. ❌
As an owner
So that I can be able to change my mind about participating on a contest
I want to be able to withdraw my participation
Details:
- You can only withdraw your participation if it's yours
- You can only withdraw your participation if the contest has not elapsed
Use Cases:
- Withdraw a participation to the current month's contest of a visit done on that month. It's successful. ✔️
- Withdraw a participation to the past month's contest of a visit done on that month. It's not successful. ❌
As an administrator
So that contest winners can be chosen depending on the management’s criterion
I want to be able to choose a winner for a past contest
Details:
- A winner can’t be chosen if the contest hasn’t ended
- A winner can’t be chosen for a contest that already has a winner
- A winner can’t be chosen if it hasn’t signed up in that contest (the beauty solution visit took place during that month and a visit photo was uploaded)
- Only an administrator can choose a winner for a contest
Use Cases:
- Choose a winner of the past month's contest, which has no winner selected yet. It's successful. ✔️
- Choose a winner of the current month's contest, which has no winner selected yet. It's not successful. ❌
- Choose a winner of the next month's contest, which has no winner selected yet. It's not successful. ❌
- Choose a winner of the current month's contest, which already has a winner selected. It's not successful. ❌
As an administrator
So that customers get an incentive to visit our clinic again
I want 5% discount vouchers to be given away automatically after every beauty solution visit valued at 10€ or more
Details:
- If the beauty solution that was booked has a price lower than 10€, no discount voucher is given
- The voucher is given at the time of the visit
- Trigger for this action is still undecided, it will depend on the technology
Use Cases:
- As an owner, list your vouchers. Book a beauty solution visit valued at 15€. Wait for that visit to take place. After that, list your vouchers again. There has to be only one new voucher valued at 5% discount. It's successful. ✔️
- As an owner, list your vouchers. Book a beauty solution visit valued at 9€. Wait for that visit to take place. After that, list your vouchers again. There has to be no new voucher. It's successful(ly not found). ❌
As an administrator
So that customers get involved in contests and our solutions are booked more often
I want the winner of a contest to earn a 50% discount voucher when selected as such
Details:
- The voucher is automatically given at the winner selection
- If the winner could not be selected (because of any of its listed reasons), the voucher is not given either
Use Cases:
- Have various participants on the current month's contest. Wait for the month to end. After that, choose a winner. List that owner's vouchers before and after selecting him as a winner. There must only be one more voucher valued at 50% discount. It's successful. ✔️
- Have various participants on the current month's contest. Wait for the month to end. After that, choose a winner. List another owner's vouchers before and after selecting the first one as a winner. Check if there's any new voucher. There's no new voucher. ❌
As an administrator
So that I can engage owners in the contest and have a final push of solution purchase at the end of the month
I want to automatically set up a promotion of 10% at the final natural week of the month
Details:
- It's not applied to previously booked solutions
- Trigger for this action is still undecided, it will depend on the technology
Use cases:
- As an owner, book a new beauty solution visit the day before the last week of the month. When the last week starts, book that same solution again. The second time the price should be 10% less. The promotion is effective. ✔️
- As an owner, book a new beauty solution visit two days before the last week of the month. At the next day, book that same solution again. The price should be exactly the same. The promotion is not effective. ❌
Sprint | User Story | Asignee |
---|---|---|
Sprint 2 | US01 | Youssef San José Khamer |
Sprint 2 | US02 | Youssef San José Khamer |
Sprint 2 | US03 | Youssef San José Khamer |
Sprint 2 | US04 | Youssef San José Khamer |
Sprint 2 | US05 | Youssef San José Khamer |
Sprint 2 | US06 | Youssef San José Khamer |
Sprint 2 | US07 | Youssef San José Khamer |
Sprint 2 | US08 | Youssef San José Khamer |
Sprint 2 | US09 | Youssef San José Khamer |
Sprint 2 | US10 | Youssef San José Khamer |
Sprint 2 | US11 | Youssef San José Khamer |
Sprint 2 | US18 | Youssef San José Khamer |
Sprint 2 | US19 | Youssef San José Khamer |
Sprint 2 | US20 | Youssef San José Khamer |
Sprint 3 | US12 | Youssef San José Khamer |
Sprint 3 | US14 | Youssef San José Khamer |
Sprint 3 | US15 | Youssef San José Khamer |
Sprint 4 | US13 | Youssef San José Khamer |
Sprint 4 | US16 | Youssef San José Khamer |
Sprint 4 | US17 | Youssef San José Khamer |
The Spring PetClinic sample application is released under version 2.0 of the Apache License.