煙霧稽核
與AI代理一起建立
煙霧探測器審核後端

煙霧探測器審核後端範本
電池更換記錄和現場測試地圖

一個可投入生產的煙霧探測器審核後端在 Back4app,擁有電池更換記錄、敏感度測試和檢查路線的地圖釘。包括ER 圖、資料字典、JSON 架構、API 體驗區,以及一個AI 代理提示以快速設置。

稽核要點

此模板為您提供煙霧探測器稽核後端,包括電池更換日志、靈敏度測試和現場地圖,方便協調員和現場工作人員以較少的手動工作跟蹤檢查。

  1. 電池更換歷史記錄每個 `BatteryLog` 條目,包括探測器序號、更換日期和技術人員備註。
  2. 按探測器進行靈敏度測試存儲每個 `Detector` 的 `SensitivityTest` 結果,以便容易發現和跟進失敗的檢查。
  3. 準備好地圖的現場追蹤使用 `Site` 和 `MapPin` 記錄將探測器放置在地圖上並規劃現場訪問。

煙霧探測器審核模板是什麼?

當煙霧探測器審核團隊在不同場地運作時,使用一致的分類法可以防止在審核記錄中出現「同樣的問題,五個不同的名稱」。解決方案是操作性,而不是動機性。Back4app 使得網站、探測器、電池紀錄、靈敏度測試和地圖釘的時間戳和可歸責性得以保持——這是煙霧探測器審核團隊在面對審查時所需的基線資料。該架構涵蓋用戶(用戶名、電子郵件、密碼)、網站(名稱、地址、地圖位置)、探測器(場地、序列號、狀態)、電池紀錄(探測器、更換時間、电池類型)、靈敏度測試(探測器、測試時間、結果)和地圖釘(場地、緯度、經度),並內建身份驗證、報告和地圖友好的紀錄。連接您的前端並開始更快地跟踪審核。

最佳用途:

煙霧探測器檢查應用程式電池更換紀錄工具靈敏度測試跟踪基於地圖的現場審核系統維護協調員定期現場訪問的操作團隊

煙霧探測器審計後端概述

在煙霧探測器審計中,操作員通常在交接時首先感受到痛苦:一個團隊更新了一張表,而另一個團隊依賴於一個聊天主題,兩者都與客戶所告知的內容不符。

無論您是交付網頁還是移動應用,Site、Detector 和 BatteryLog 仍然是骨幹——這個頁面是協調利益相關者的最快方式。

核心煙霧探測器審計功能

此中心中的每個技術卡片都使用相同的煙霧探測器審核架構,包括站點、探測器、電池日誌、靈敏度測試和地圖釘。

站點註冊和地圖錨點

`Site` 存儲每個建築或樓層計劃的名稱、地址和 mapLocation。

檢測器庫存

`Detector` 連結序列號、狀態和位置。

電池更換日誌

`BatteryLog` 儲存更換時間、電池類型和技術人員備註。

靈敏度測試結果

`SensitivityTest` 記錄 testedAt、結果和檢測器。

地圖釘放置

`MapPin` 使用緯度、經度和站點。

為什麼要使用 Back4app 構建您的煙霧探測器審計後端?

Back4app 為您提供網站、探測器和審計原語,讓您的團隊可以專注於電池、測試和路線規劃,而不是後端管道。

  • 將探測器和網站記錄集中在一個地方: `Detector` 類別鏈接到 `Site`,因此電池檢查和靈敏度測試保持與正確的地址和地圖標記相連。
  • 易於查詢的電池日誌歷史: `BatteryLog` 行捕獲 `replacedAt`、`batteryType` 和 `technicianNote`,這有助於經理按檢測器或日期審查更換工作。
  • 檢查和路線變更的即時狀態: 在保持 REST 和 GraphQL 為網頁儀表板和移動現場工具準備好的同時,使用 Live Queries 進行 `SensitivityTest` 和 `MapPin` 更新。

一次構建審計後端,然後重複使用相同的類進行路線規劃、檢查歷史和跟進工作。

核心好處

一個煙霧探測器審核後端,幫助團隊保持組織,同時不失去重要的細節。

更快的字段更新

在訪問發生時寫入 `BatteryLog` 和 `SensitivityTest` 條目,而不是等待電子表格清理。

清除檢測器歷史

使用 `Detector.serialNumber` 以及鏈接的日誌來查看任何單元的維護歷史。

基於地圖的規劃

`Site.mapLocation` 和 `MapPin.latitude` / `MapPin.longitude` 使路徑規劃減少猜測。

對於失敗測試的更好跟進

可以立即過濾失敗的 `SensitivityTest.result`,使監督者知道哪個檢測器需要注意。

一個後端適用於移動和桌面

REST 和 GraphQL 將相同的 `Site`、`Detector` 和日誌數據暴露給每個需要它的應用程序。

可重複使用的未來審核設置

稍後添加額外字段,但保持 `BatteryLog` 和 `SensitivityTest` 的相同核心模式。

準備好啟動您的煙霧探測器審核應用程序嗎?

讓 Back4app AI 代理搭建您的審核後端,並從一個提示生成電池日誌、靈敏度測試和地圖視圖。

免費啟動 — 每月 50 次 AI 代理提示,不需要信用卡

技術堆棧

此煙霧探測器審核後端範本中包含所有內容。

前端
13+ 種技術
後端
Back4app
資料庫
MongoDB
認證
內建認證 + 會話
API
REST 和 GraphQL
即時
Live Queries

煙霧審計 ER 圖示

煙霧探測器審計後端架構的實體關係模型。

查看圖表來源
Mermaid
erDiagram
    Inspector ||--o{ Building : "primaryCoordinator"
    Inspector ||--o{ Audit : "inspector"
    Inspector ||--o{ BatteryReplacement : "replacedBy"
    Inspector ||--o{ SensitivityTest : "testedBy"
    Building ||--o{ Detector : "building"
    Building ||--o{ Audit : "building"
    Building ||--o{ SiteMap : "building"
    Detector ||--o{ BatteryReplacement : "detector"
    Detector ||--o{ SensitivityTest : "detector"

    Inspector {
        String objectId PK
        String username
        String email
        String password
        String role
        String phoneNumber
        Date createdAt
        Date updatedAt
    }

    Building {
        String objectId PK
        String buildingName
        String address
        String city
        String state
        Number latitude
        Number longitude
        String primaryCoordinatorId FK
        Date createdAt
        Date updatedAt
    }

    Detector {
        String objectId PK
        String buildingId FK
        String roomLabel
        String deviceId
        String modelNumber
        Number batteryLevel
        Date lastBatteryChangeAt
        String status
        Date createdAt
        Date updatedAt
    }

    Audit {
        String objectId PK
        String buildingId FK
        String inspectorId FK
        Date auditDate
        String overallStatus
        String notes
        Date createdAt
        Date updatedAt
    }

    BatteryReplacement {
        String objectId PK
        String detectorId FK
        String replacedById FK
        Date replacementDate
        String batteryType
        String oldBatteryCondition
        Date createdAt
        Date updatedAt
    }

    SensitivityTest {
        String objectId PK
        String detectorId FK
        String testedById FK
        Date testDate
        String testResult
        Number readingValue
        String notes
        Date createdAt
        Date updatedAt
    }

    SiteMap {
        String objectId PK
        String buildingId FK
        String mapName
        Number floorNumber
        String mapUrl
        String legendNotes
        Date createdAt
        Date updatedAt
    }

審計整合流程

身份驗證、站點查找、電池日誌、靈敏度測試和地圖更新的典型執行流程。

查看圖表來源
Mermaid
sequenceDiagram
  participant Inspector
  participant App as Smoke Detector Audit App
  participant Back4app as Back4app Cloud

  Inspector->>App: Sign in
  App->>Back4app: POST /login
  Back4app-->>App: Session token

  Inspector->>App: Open building list
  App->>Back4app: GET /classes/Building?include=primaryCoordinator
  Back4app-->>App: Buildings and coordinators

  Inspector->>App: Review detector batteries
  App->>Back4app: GET /classes/Detector?include=building&order=-updatedAt
  Back4app-->>App: Detector battery levels and statuses

  Inspector->>App: Save a battery replacement or sensitivity test
  App->>Back4app: POST /classes/BatteryReplacement
  App->>Back4app: POST /classes/SensitivityTest
  Back4app-->>App: Saved audit trail records

  Inspector->>App: Load site maps for a building
  App->>Back4app: GET /classes/SiteMap?include=building
  Back4app-->>App: Floor plans and detector locations

審計數據字典

煙霧探測器審計架構中每個類的完整字段級參考。

字段類型描述必填
objectIdStringAuto-generated unique identifier自動
usernameStringInspector login name
emailStringInspector email address
passwordStringHashed password (write-only)
roleStringRole of the user (e.g., manager, coordinator, field_tech)
phoneNumberStringContact number for site coordination
createdAtDateAuto-generated creation timestamp自動
updatedAtDateAuto-generated last-update timestamp自動

8 欄位在 Inspector

安全性和權限

ACL 和 CLP 策略如何保護網站記錄、檢測器歷史和審核日誌。

技術人員擁有的審核條目

只有創建 `BatteryLog` 或 `SensitivityTest` 條目的用戶應能夠編輯或刪除它。

網站級別讀取訪問

在共享審核路由時,限制 `Site` 和 `Detector` 的可見性僅限於指定的工作人員或管理角色。

變更控制檢測器狀態

使用 Cloud Code 來驗證 `Detector.status` 的轉換,以便干淨地記錄失敗的測試或更換。

架構 (JSON)

原始 JSON 架構定義,準備複製到 Back4app 或用作實施參考。

JSON
{
  "classes": [
    {
      "className": "Inspector",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "username": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "password": {
          "type": "String",
          "required": true
        },
        "role": {
          "type": "String",
          "required": true
        },
        "phoneNumber": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Building",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "buildingName": {
          "type": "String",
          "required": true
        },
        "address": {
          "type": "String",
          "required": true
        },
        "city": {
          "type": "String",
          "required": true
        },
        "state": {
          "type": "String",
          "required": true
        },
        "latitude": {
          "type": "Number",
          "required": false
        },
        "longitude": {
          "type": "Number",
          "required": false
        },
        "primaryCoordinator": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Inspector"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Detector",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "building": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Building"
        },
        "roomLabel": {
          "type": "String",
          "required": true
        },
        "deviceId": {
          "type": "String",
          "required": true
        },
        "modelNumber": {
          "type": "String",
          "required": true
        },
        "batteryLevel": {
          "type": "Number",
          "required": false
        },
        "lastBatteryChangeAt": {
          "type": "Date",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Audit",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "building": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Building"
        },
        "inspector": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Inspector"
        },
        "auditDate": {
          "type": "Date",
          "required": true
        },
        "overallStatus": {
          "type": "String",
          "required": true
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "BatteryReplacement",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "detector": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Detector"
        },
        "replacedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Inspector"
        },
        "replacementDate": {
          "type": "Date",
          "required": true
        },
        "batteryType": {
          "type": "String",
          "required": true
        },
        "oldBatteryCondition": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "SensitivityTest",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "detector": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Detector"
        },
        "testedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Inspector"
        },
        "testDate": {
          "type": "Date",
          "required": true
        },
        "testResult": {
          "type": "String",
          "required": true
        },
        "readingValue": {
          "type": "Number",
          "required": false
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "SiteMap",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "building": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Building"
        },
        "mapName": {
          "type": "String",
          "required": true
        },
        "floorNumber": {
          "type": "Number",
          "required": false
        },
        "mapUrl": {
          "type": "String",
          "required": true
        },
        "legendNotes": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

使用 AI 代理構建

使用 Back4app AI 代理從此模板生成一個實際的煙霧探測器審核應用,包括前端、後端、身份驗證以及電池、測試和地圖流程。

Back4app AI 代理
準備好構建
基於 Back4app 創建一個煙霧探測器審計應用程序的後端,使用這個精確的架構和行為。

架構:
1. 用戶(使用 Back4app 內建):用戶名、電子郵件、密碼;objectId、createdAt、updatedAt(系統)。
2. 現場:名稱(字串,必需)、地址(字串,必需)、地圖位置(地理點,必需)、備註(字串);objectId、createdAt、updatedAt(系統)。
3. 探測器:現場(指向現場的指針,必需)、序列號(字串,必需,唯一)、狀態(字串,必需)、型號(字串)、上次更換電池時間(日期);objectId、createdAt、updatedAt(系統)。
4. 電池日誌:探測器(指向探測器的指針,必需)、更換時間(日期,必需)、電池類型(字串,必需)、技術人員備註(字串)、更換者(指向用戶的指針);objectId、createdAt、updatedAt(系統)。
5. 敏感度測試:探測器(指向探測器的指針,必需)、測試時間(日期,必需)、結果(字串,必需)、讀值(數字)、技術人員備註(字串);objectId、createdAt、updatedAt(系統)。
6. 地圖釘:現場(指向現場的指針,必需)、緯度(數字,必需)、經度(數字,必需)、標籤(字串)、路線順序(數字);objectId、createdAt、updatedAt(系統)。

安全性:
- 使用ACL/CLP,使技術人員能夠撰寫自己的電池日誌和敏感度測試條目,而經理可以查看現場和探測器歷史。
- 使用雲代碼來驗證探測器狀態的變更並要求連結的現場數據。

身份驗證:
- 註冊、登錄、登出。

行為:
- 列出現場,按現場顯示探測器,創建電池更換日誌,提交敏感度測試,並刷新下一個路線的地圖釘。

交付:
- Back4app 應用程序,具有架構、ACL、CLP;前端用於現場、探測器、電池日誌、敏感度測試和地圖視圖。

按下下面的按鈕以用此模板提示填充打開代理。

這是沒有技術後綴的基本提示。您可以在後續調整生成的前端堆棧。

幾分鐘內部署每月 50 條免費提示無需信用卡

API 操場

根據煙霧探測器審計架構嘗試 REST 和 GraphQL 端點。響應使用模擬數據,並不需要 Back4app 賬戶。

載入操作環境…

使用與此模板相同的架構。

選擇您的技術

展開每個卡片以查看如何將網站、檢測器和電池日誌與您選擇的技術棧集成。

Flutter 煙霧探測器審計後端

React 煙霧探測器審計後端

React 原生 煙霧探測器審計後端

Next.js 煙霧探測器審計後端

JavaScript 煙霧探測器審計後端

Android 煙霧探測器審計後端

iOS 煙霧探測器審計後端

Vue 煙霧探測器審計後端

Angular 煙霧探測器審計後端

GraphQL 煙霧探測器審計後端

REST API 煙霧探測器審計後端

PHP 煙霧探測器審計後端

.NET 煙霧探測器審計後端

您每種技術獲得的內容

每個技術棧使用相同的煙霧檢測器稽核後端架構和 API 合約。

統一的稽核數據結構

以一致的架構管理網站、檢測器、電池日誌、靈敏度測試和地圖標記。

供現場團隊使用的電池更換日誌

跟踪每次電池更換的時間戳、檢測器指針和技術人員備註。

符合性檢查的靈敏度測試跟踪

根據檢測器記錄通過或失敗的結果,以便後續工作明顯。

地圖感知的網站規劃

使用網站坐標和釘選記錄規劃路線,減少漏檢。

REST/GraphQL 版本用於審核應用程式

通過一個後端合約整合網頁、行動和內部工具。

煙霧審計技術比較

比較所有支援技術的設置速度、SDK 風格和 AI 支持。

框架設定時間審核益處SDK 類型AI 支援
約 5 分鐘在行動設備和網頁上進行現場審核的單一程式碼庫。類型化 SDK完整
少於 5 分鐘快速網頁儀表板,用於檢測器歷史記錄。輸入式 SDK完整
約 3–7 分鐘跨平台的行動應用程式,用於電池日誌。輸入式 SDK完整
快速(5 分鐘)設置伺服器渲染的網站地圖和審核儀表板。輸入式 SDK完整
約 3–5 分鐘輕量級瀏覽器整合以進行檢查表單。輸入式 SDK完整
約 5 分鐘原生 Android 應用程式用於現場檢查。輸入式 SDK完整
少於 5 分鐘原生 iPhone 應用程式用於技術人員工作流程。輸入式 SDK完整
約 3–7 分鐘Reactive 網頁 UI 用於站點地圖。輸入式 SDK完整
快速 (5 分鐘) 設置供運營團隊使用的企業審核門戶。輸入型 SDK完整
少於 2 分鐘靈活的 GraphQL API 用於嵌套檢測器數據。GraphQL API完整
快速 (2 分鐘) 設置REST API 整合以提交日誌。REST API完整
約 3 分鐘伺服器端 PHP 後端用於審核管理工具。REST API完整
約 3–7 分鐘.NET 後端用於檢測器檢查工作流程。類型化 SDK完整

設定時間反映從專案啟動到首次使用此模板架構的網站、檢測器或日誌查詢的預期持續時間。

常見問題解答

有關使用此模板構建煙霧探測器審核後端的常見問題。

煙霧探測器稽核範本使用哪些類別?
我如何為探測器記錄電池更換?
靈敏度測試如何融入稽核流程?
實時更新如何運作於稽核路線?
我可以離線緩存場地和探測器嗎?
如何在 React 中初始化此模板的 SDK?
何時應該選擇 GraphQL 而不是 REST 進行煙霧探測器審核?
哪些移動堆棧最適合離線檢查探測器?
我如何防止其他技術人員編輯自己的電池日誌?
當探測器未通過靈敏度測試時會發生什麼?

全球開發者信賴的

與 Back4app 模板一起,讓團隊更快地推出煙霧探測器審核產品

G2 Users Love Us Badge

準備好建立您的煙霧探測器審核應用程式了嗎?

在幾分鐘內開始您的煙霧探測器審核項目。無需信用卡。

選擇技術