疫苗預約系統開發
💉

疫苗預約系統開發

Tags
Project
2021
Published
Published October 25, 2021

動機

  1. 實習的公司有在幫忙社區老人家做疫苗預約的服務,因為大多數 75 歲以上的老人家都不太會使用電腦或是手機

開發前準備工作

  1. 原先公司是採用紙本登記老人家的資料,但用紙本登記有以下幾個缺點:
      • 紙本文件越翻越爛
      • 疫苗種類有 4 種,就要準備 4 種文件夾,很佔空間
      • 大多數老人家並不記得他登記過什麼疫苗,因此常來公司詢問,公司員工只能從那 4 本文件夾中一個一個找
      • 每一梯次疫苗預約只能逐一將符合資格的老人家找出來,除了浪費時間之外,又很擔心漏掉符合資格的人,畢竟人工嘛...什麼事情都有可能發生,然後老人家脾氣不好就慘了
  1. 那身為在資訊部實習的我,就想到應該要用電腦來整理這些資料,但要用什麼方式開發系統又是一個很大的問題,原因如下:
      • 公司除了秘書之外其他員工平均年齡在 55 歲以上,但幫忙服務是每個員工的責任,因此不能只有秘書會,其他人也必須要會,可是有一半以上的員工都是 3C 白癡,所以開發前必須想好他們需要會什麼功能,然後盡可能的將這些功能開發的越簡單越好
  1. 確定好上面的問題後就開始進入開發的階段啦,首先需要思考的是,這個系統會有哪些人需要使用,那經過跟秘書的討論後,我們劃分了以下 3 種角色 (以工程的角度來說就是 3 種權限):
      • 開發者:我
        • 擁有所有權限
        • 開發、開發、再開發
        • 處理 bug
      • 公司秘書
        • 擁有編輯權限
        • 能夠將老人家的資料加進系統中
        • 能夠編輯系統中的資料
      • 其他員工
        • 擁有檢視權限
        • 能夠檢視資料表
        • 能夠快速查詢資料表
  1. 那確定好權限劃分之後,接著就是討論系統需要哪些資料欄位,這些資料欄位的類型又是什麼,以下是我們最後使用到的資料欄位:
    1. 資料欄位名稱
      資料型別
      資料範例
      資料敘述
      姓名
      STRING
      王XX
      老人家姓名
      出生年月日
      DATE
      260802
      老人家生日
      手機號碼
      STRING
      0912345678
      老人家手機號碼
      身分證字號
      STRING
      A123456789
      老人家身分證字號
      健保卡卡號
      STRING
      0000/XXXX/XXXX
      老人家健保卡卡號
      預約疫苗種類
      STRING
      AZ
      老人家想預約的疫苗品牌
      第一劑是否打過
      BOOLEAN
      0 or 1
      老人家是否打過第一劑疫苗
      第二劑是否打過
      BOOLEAN
      0 or 1
      老人家是否打過第二劑疫苗
      第一劑時間
      DATE
      1100727
      老人家第一劑疫苗施打時間
      第二劑時間
      DATE
      1100827
      老人家第二劑疫苗施打時間
      備註
      STRING
      備註老人家的需求
  1. 確認完資料表後,進入正式開發階段,原本想要用 Python Flask 當作後端,然後串 sqlite3 套件當作資料庫的,但你們知道的,既然寫原本,就代表最後不是用這個方式,待會下面會繼續說明我用什麼方法來管理近 350 位所有老人家的資料,可是先讓我說明為什麼最後沒有用上述所說的方法,其實原因很單純,就是在 9 月底的時候,疫苗進來很多,基本上每隔幾天就要預約一次,因此時間不允許我慢慢開發啊啊啊,一天其實可以整個架構大概寫完,但上線前還要測試有沒有 bug 也要花個幾天的時間,可是我記得當時後天就要進行疫苗預約了,所以最終就放棄自己開發的這個方法了

平台選擇

  1. 摁對,沒有自己開發後,開始尋尋覓覓找尋有沒有簡單可是又要有我需要的那些功能,最後找出了 2 個:
      • Google spreadsheet
      • Notion
  1. 以上兩個平台我之前都用過了,但還是都給他們一個機會,然後自己思考了一下發現其實這兩個平台都可以達成我所需要的功能,但最後我選擇了 Notion,原因如下:
      • Notion 有強大的 Database 關聯系統 (但其實我在用的時候有碰到一些問題,等等後面會提到)
      • Notion 的 UI 介面設計的真的很好看 (這應該算是我最後決定使用 Notion 的原因)
      • 學生可以用學校信箱無條件升級成 Personal Pro Plan (Education) 版本

使用 Notion 建立資料表

  1. 在 Notion 中的 PRIVATE 區塊中建立一個以 Table 為形式的 DATABASE
    1. notion image
  1. 將前期討論所需要用到的資料欄位,設定在剛剛建立好的 Table 當中,這裡我以 Notion 所提供的資料型別,加上我所需要的資料欄位,再寫一次給大家看:
    1. 資料欄位名稱
      資料型別
      姓名
      Title
      出生年月日
      Number
      手機號碼
      Number
      身分證字號
      Text
      健保卡卡號
      Text
      預約疫苗種類
      Multi-select
      第一劑是否打過
      Checkbox
      第二劑是否打過
      Checkbox
      第一劑時間
      Date
      第二劑時間
      Date
      備註
      Text
      • 設定完成後我可以得到這個 Table Header
        • notion image
  1. 接著就是快速將紙本名單的內容輸入進系統中啦,完成後大概長成這樣
    1. notion image

資料表優化

  1. 填完老人家的資料後,基本上就是完成 75% 左右了,接下來是如何讓公司其他員工能夠更好的去檢視這份資料表
      • 首先先將整個資料表進行排序,在資料表的右上方可以找到 Sort,點下去後再點選 Add a sort,就可以將自己想要的排序方式新增上去啦
      • 在這個 Table 中,我的排序方式如下:
        • 疫苗種類 Ascending (有小至大)
        • 出生年月日 Ascending (有小至大)
          • notion image
      • 這樣排序的好處在於,員工在檢視資料表的時候,會發現名單已經先將老人家依疫苗種類先分類好了,接著再依照生日由年經較長排到年紀較輕
  1. 將不同類別疫苗種類單獨拉出一個獨立的資料表,原因在於公司需配合政府每期預約不同種類的疫苗,這樣能夠更清楚地去檢視哪些老人家選擇了哪種廠牌的疫苗
      • 首先先複製剛剛完成好的資料表,接著一樣從資料表的右上方找到 Filter,這裡我以 BNT 疫苗廠牌 + 我想知道還有哪些人還沒打第二劑作舉例
      • 在這個 Table 中,我的 Filter 方式如下:
        • 疫苗種類 Contains BNT
        • 第一劑 Is not Check
        • 第二劑 Is not Check
          • notion image
      • 完成後當今天政府宣布要開始接踵第 2 劑 BNT 疫苗,我們就可以很快速地知道有哪些人還沒打過第 2 劑 BNT 疫苗

資料表條件設定

  1. 依照政府每期疫苗種類、疫苗劑次及年齡限制去抓出符合名單的長者
      • 舉一反三,一樣先複製一份完整的名單
      • 接著我們以第 12 輪第 2 階段的 AZ 疫苗預約作舉例
        • notion image
      • 清楚的列出 AZ 疫苗條件:
        • 第 2 劑 / 18 歲以上 (921028 前出生) / 0730 前接踵第一劑 (1008 後可接踵第二劑)
        • 第 2 劑 / 45 歲以上 (651231 前出生) / 0731 至 0806 接踵第一劑 (1009 至 1015 後可接踵第二劑)
      • 列清楚後,一樣使用 Notion 所提供的 Filter 工具篩選符合資格的長者
        • notion image
      • 完成後就會得到符合資格的表單啦
        • notion image

角色權限劃分

  1. 剛剛前面有提到,角色權限劃分是系統中不可或缺的一個功能模組,原因在於如果開放編輯權限給一般員工,可能會因為他們不會使用然後導致新增一堆空白資料列、任意新增關聯資料表或是更可怕的刪除資料列,因此系統的角色權限劃分相當重要,這裡我來說明我如何在 Notion 中設定權限給不同角色的使用者
      • 開發者 (我):建立 Notion 帳號 (廢話= =) 並開啟完整權限 (Full Access),因為資料表是我建立的,所以預設我就有完整的權限
      • 公司秘書:建立 Notion 帳號,因為秘書需要有編輯的權限 (新增老人家的資料),因此需單獨建一個自己的 Notion 帳號,完成後再由開發者給予編輯權限
      • 其他員工:原則上應該是要每個員工都建立自己的 Notion 帳號,但剛剛前面有提到,公司年紀平均年齡 55 歲,很多人是電腦白癡,然後加上我真的擔心跟大家提出這個看法之後,大家都拒絕學習,因此沒有採用上述這種比較符合邏輯的方法,而是改成開發者將資料表開啟 SHARED 然後分享網址到公司群組,摁然後我知道這個資安風險比較高沒錯,但這是妥協下來的結果,也還好 Notion 預設分享的網址還算是不難被猜到

碰到的問題

  1. 對,剛剛前面有提到,我在使用 Notion 的時候碰到過問題,而且是剛用沒多久就出現問題,也就是資料表 scroll 到最底下後不會自動出現下面的資料,就只會出現 50 筆資料,然後很妙的是我嘗試自己解決問題,然後無意間我就去調整了 Notion 網頁視窗的大小,沒想到竟然調整網頁視窗大小會跑出下面的資料來。只是我想這不是長久解決之際,後來就將這個問題丟給了 Notion 官方,他們一開始以為是 cache 的問題,請我清除餅乾,只是在清除過後依然還是一樣,後來客服人員有跟我說會將問題丟給工程部門去解決,所幸大約 1 天的時間就解決了,這部分還是要給 Notion 官方點個讚的
  1. 另外一個是我不小心發現的問題,但我沒有提交給官方,某一天我在調整 Notion 版面的時候,不小心自己退出了那個資料表的完整權限,結果再次嘗試自己解決,結果試了很久發現不管怎麼樣都沒辦法將完整權限就回來,因此再次求助了 Notion 官方,跟他們說明自己碰到的問題,並請他們幫我把完整權限救回,一樣的大概 1 天左右的時間 Notion 官方就幫我把完整權限弄回給我了,只是我後來左思右想還是不解,為何 Notion 不設計當你要退出資料表的完整權限時,可以先指定要將資料表的完整權限給其他人,這樣能夠保證這個資料表一直都有人持有完整的權限,他們客服至少也少掉使用者找他們的麻煩

後記

除了剛剛上面提到的 2 個問題,其實 Notion 真的還滿好用的,唯一我覺得可以更好的是希望能夠跟 Google spreadsheet 一樣多一些 function 給使用者去做搭配使用,不然不管在 UI 的設計上 或是 UX 使用者體驗上都滿好的,包含現在升上碩二的我開始要忙論文、考英檢,我也是用 Notion 來規劃我的個人行程。
至於這個疫苗系統,目前仍然繼續被公司使用中,原本公司打算 10 月底就準備停掉疫苗服務了,結果公司老闆後來跟我說疫苗預約系統仍希望我開著,因為他們用了這個真的變得很方便,不用跟先前一樣,老人家詢問時,要先猜老人家打什麼疫苗,如果都不知道的話只好 4 本文件夾都翻的困擾。
notion image
媒體報導:中信房屋以服務代替業務 暖心動員「揪甘心」
最後,我自己想表達,雖然念電資的同學,大多遇到問題第一個想到的是,都是努力硬幹,希望用最短的時間透過自己的力量跟技術把系統硬幹出來,但經過我這次的經驗,我覺得可以換個角度思考,當今天有不錯的平台可以使用且你想要的功能都可以在該平台上實現,為何不給那個平台一個機會,也可以減少自己去刻那個系統的時間。