关键要点
此模板为食品供应商审计团队提供了一个用于 GFSI 认证日志、设施照片和非合规跟进的后端,无需从头设计数据模型。
- GFSI 认证日志 — 在 GFSILog 类中存储检查日期、证书参考和审查结果。
- 设施照片证据 — 将带时间戳的 FacilityPhoto 记录附加到审计中,以便现场团队可以记录他们发现的内容。
- 非合规跟踪 — 以清晰的状态和截止日期打开、分配和关闭非合规项。
- 供应商和审计历史 — 使用供应商、审计和审计分配指针将每个站点审核与正确的设施联系起来。
- 移动和网页的单一后台 — 通过一个REST和GraphQL API为您的前端提供管理者和检查员服务。
概述:食品供应商审计应用
审计费用已经很高,如果食品供应商审计团队手动重建历史;带时间戳的工作流程能够迅速回本。细节不是可选的。此模板在Back4app上构建了审计员、供应商、审计、设施照片和GFSILog,并内置审计轨迹,以便食品供应商审计评审能够展示可辩护的时间线。该架构涵盖审计员(姓名、电子邮件、角色)、供应商(供应商名称、现场位置、联系人姓名)、审计(供应商、审计日期、结果、备注)、设施照片(审计、图像、说明、拍摄时间)、GFSILog(审计、证书ID、标准、签发时间、到期时间)和不合规(审计、严重性、状态、纠正措施、到期日期),以及内置的身份验证、审计轨迹和支持照片的评审流程。
最佳适用:
这个食品供应商审核后端是如何组织的
食品供应商审核不仅仅是速度的问题;当有人问“给我看你怎么知道那是真的”时,这更关乎可辩护性。
无论您是从Flutter、React、Next.js还是其他支持的路径开始,都可以期待相同的审核员、供应商和审核。
核心食品供应商审计功能
该中心中的每个技术卡都使用相同的供应商审计后端架构,包括审计员、供应商、审计、设施照片、GFSILog和不合规。
审计员账户和分配
审计员存储经理和现场员工的姓名、电子邮件和角色。
供应商站点配置文件
供应商跟踪供应商名称、站点位置和联系姓名。
GFSI 认证日志
GFSILog 存储 certificateId、标准、issuedAt 和 expiresAt。
设施照片证据
FacilityPhoto 将图像、标题和拍摄时间链接到审核。
不合规跟踪
NonCompliance 保存严重性、状态、纠正措施和截止日期。
为什么使用Back4app构建您的食品供应商审计应用后端?
Back4app为审计团队提供了一种干净的方式来存储供应商访问记录、GFSI证据和不合规跟进,同时将API和认证模型保持在一个地方。
- •具有真实架构的审计记录: 审计类将每次访问与一个供应商关联,GFSILog将certificateId、标准、issuedAt和expiresAt一并保留以供审查。
- •设施照片保持附加: FacilityPhoto记录指向它们所属的审计,因此检查员可以按地点和访问排序图像,而不是搜索一个文件转储。
- •不合规保持可操作: 使用NonCompliance字段,如severity、status、correctiveAction和dueDate,在检查结束后跟踪需要关注的事项。
启动一个供应商审计后端,将检查、照片证据和纠正措施保持在一个API合同中。
核心优势
一个供应商审计后端,帮助您记录检查,管理证据,并以更少的返工关闭问题。
更快速的审计设置
从供应商、审计和GFSILog类开始,而不是在第一次现场访问已安排后定义每个字段。
有照片支持的发现
将设施照片链接到审计,以便对每个不合规项进行确切设施图像的审查。
清晰的纠正措施跟踪
使用不合规.status和不合规.dueDate来显示哪些是开放的、逾期的或已验证的。
一致的供应商历史
查询供应商记录及相关审计,以查看一个站点在检查中的表现。
一个 API 用于所有审计客户端
REST 和 GraphQL 支持网页仪表板、移动检查应用程序和后台审核界面。
基于提示的启动
通过 AI 代理生成供应商审计的后端框架、认证规则和种子数据。
准备好启动您的食品供应商审计应用程序了吗?
让 Back4app AI 代理搭建您的供应商审计后端,并通过一个提示生成 GFSI 日志、设施照片和不合规流程。
免费开始 — 每月50个AI代理提示,无需信用卡
技术栈
此食品供应商审计后端模板包含一切。
ER 图
食品供应商审核后台架构的实体关系模型。
覆盖审计员、供应商、审核、设施照片、GFSI日志和不合规项的架构。
查看图表源
erDiagram
Auditor ||--o{ FacilityAudit : "audits"
Supplier ||--o{ FacilityAudit : "site"
FacilityAudit ||--o{ FacilityPhoto : "evidence"
FacilityAudit ||--o{ GfsiCertificationLog : "references"
FacilityAudit ||--o{ NonComplianceFinding : "finds"
FacilityAudit ||--o{ AuditComment : "commented on"
Supplier ||--o{ FacilityPhoto : "site"
Supplier ||--o{ GfsiCertificationLog : "certification log"
Supplier ||--o{ NonComplianceFinding : "supplier"
Auditor ||--o{ AuditComment : "author"
Auditor {
String objectId PK
String username
String email
String password
String role
Date createdAt
Date updatedAt
}
Supplier {
String objectId PK
String supplierCode
String name
String siteType
String status
String primaryContact
Date createdAt
Date updatedAt
}
FacilityAudit {
String objectId PK
String auditNumber
String supplierId FK
String auditorId FK
Date auditDate
String auditType
Number overallScore
String gfsiStatus
String notes
Date createdAt
Date updatedAt
}
FacilityPhoto {
String objectId PK
String auditId FK
String supplierId FK
String photoUrl
String caption
String photoType
Date takenAt
Date createdAt
Date updatedAt
}
GfsiCertificationLog {
String objectId PK
String supplierId FK
String auditId FK
String certificateName
String certificateNumber
Date issuedAt
Date expiresAt
String verificationStatus
String documentUrl
Date createdAt
Date updatedAt
}
NonComplianceFinding {
String objectId PK
String auditId FK
String supplierId FK
String findingCode
String severity
String description
String correctiveAction
Date dueDate
Date closedAt
Date createdAt
Date updatedAt
}
AuditComment {
String objectId PK
String auditId FK
String authorId FK
String commentText
Date createdAt
Date updatedAt
}
集成流程
登录、供应商审核、GFSI日志捕获、设施照片上传和不合规跟进的典型运行流程。
查看图表源
sequenceDiagram
participant User
participant App as Food Supplier Audit App
participant Back4app as Back4app Cloud
User->>App: Sign in to the audit dashboard
App->>Back4app: POST /login
Back4app-->>App: Session token
User->>App: Open supplier audit list
App->>Back4app: GET /classes/FacilityAudit?include=supplier,auditor&order=-auditDate
Back4app-->>App: FacilityAudit rows
User->>App: Add GFSI certification log
App->>Back4app: POST /classes/GfsiCertificationLog
Back4app-->>App: GfsiCertificationLog objectId
User->>App: Upload facility photo and non-compliance finding
App->>Back4app: POST /classes/FacilityPhoto
App->>Back4app: POST /classes/NonComplianceFinding
Back4app-->>App: Photo and finding saved
App->>Back4app: Subscribe to audit updates
Back4app-->>App: LiveQuery pushes updated audits数据字典
食品供应商审核方案中每个类的字段级引用。
| 字段 | 类型 | 描述 | 必需 |
|---|---|---|---|
| objectId | String | Auto-generated unique identifier | 自动 |
| username | String | Auditor login name | |
| String | Auditor email address | ||
| password | String | Hashed password (write-only) | |
| role | String | Role of the user (e.g., manager, coordinator, field_staff) | |
| createdAt | Date | Auto-generated creation timestamp | 自动 |
| updatedAt | Date | Auto-generated last-update timestamp | 自动 |
7 字段在 Auditor 中
安全性和权限
ACL 和 CLP 规则如何保护审计员、供应商记录、审计笔记、设施照片和不合规项。
审计员个人资料控制
只有登录的审计员应该更改他们自己的审计员记录;其他用户不应编辑角色或电子邮件字段。
供应商和审计所有权
使用云代码,以便只有被允许的协调员可以为他们的项目创建或编辑供应商、审计和GFSILog记录。
照片和查找访问
限制设施照片和不合规读取权限仅限于审计团队和经过批准的审查人员,特别是在现场证据应保持有限时。
架构 JSON
准备好复制到Back4app或用作实施参考的原始 JSON 架构定义。
{
"classes": [
{
"className": "Auditor",
"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
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "Supplier",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"supplierCode": {
"type": "String",
"required": true
},
"name": {
"type": "String",
"required": true
},
"siteType": {
"type": "String",
"required": true
},
"status": {
"type": "String",
"required": true
},
"primaryContact": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "FacilityAudit",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"auditNumber": {
"type": "String",
"required": true
},
"supplier": {
"type": "Pointer",
"required": true,
"targetClass": "Supplier"
},
"auditor": {
"type": "Pointer",
"required": true,
"targetClass": "Auditor"
},
"auditDate": {
"type": "Date",
"required": true
},
"auditType": {
"type": "String",
"required": true
},
"overallScore": {
"type": "Number",
"required": false
},
"gfsiStatus": {
"type": "String",
"required": true
},
"notes": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "FacilityPhoto",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"audit": {
"type": "Pointer",
"required": true,
"targetClass": "FacilityAudit"
},
"supplier": {
"type": "Pointer",
"required": true,
"targetClass": "Supplier"
},
"photoUrl": {
"type": "String",
"required": true
},
"caption": {
"type": "String",
"required": false
},
"photoType": {
"type": "String",
"required": true
},
"takenAt": {
"type": "Date",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "GfsiCertificationLog",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"supplier": {
"type": "Pointer",
"required": true,
"targetClass": "Supplier"
},
"audit": {
"type": "Pointer",
"required": false,
"targetClass": "FacilityAudit"
},
"certificateName": {
"type": "String",
"required": true
},
"certificateNumber": {
"type": "String",
"required": true
},
"issuedAt": {
"type": "Date",
"required": true
},
"expiresAt": {
"type": "Date",
"required": true
},
"verificationStatus": {
"type": "String",
"required": true
},
"documentUrl": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "NonComplianceFinding",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"audit": {
"type": "Pointer",
"required": true,
"targetClass": "FacilityAudit"
},
"supplier": {
"type": "Pointer",
"required": true,
"targetClass": "Supplier"
},
"findingCode": {
"type": "String",
"required": true
},
"severity": {
"type": "String",
"required": true
},
"description": {
"type": "String",
"required": true
},
"correctiveAction": {
"type": "String",
"required": false
},
"dueDate": {
"type": "Date",
"required": false
},
"closedAt": {
"type": "Date",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "AuditComment",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"audit": {
"type": "Pointer",
"required": true,
"targetClass": "FacilityAudit"
},
"author": {
"type": "Pointer",
"required": true,
"targetClass": "Auditor"
},
"commentText": {
"type": "String",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
}
]
}与 AI Agent 一起构建
使用 Back4app AI Agent 从此模板生成一个真实食品供应商审计应用,包括前端、后端、认证以及 GFSI 日志、照片和不合规流程。
在 Back4app 上创建一个食品供应商审计应用后端,使用此确切的架构和行为。 架构: 1. 审计员:姓名(字符串,必填)、电子邮件(字符串,必填)、角色(字符串,必填);objectId、createdAt、updatedAt(系统)。 2. 供应商:供应商名称(字符串,必填)、现场位置(字符串,必填)、联系人姓名(字符串)、联系人电子邮件(字符串);objectId、createdAt、updatedAt(系统)。 3. 审计:供应商(指向供应商的指针,必填)、审计员(指向审计员的指针,必填)、审计日期(日期,必填)、结果(字符串,必填)、备注(字符串);objectId、createdAt、updatedAt(系统)。 4. 设施照片:审计(指向审计的指针,必填)、图像(文件,必填)、标题(字符串)、拍摄时间(日期,必填);objectId、createdAt、updatedAt(系统)。 5. GFSILog:审计(指向审计的指针,必填)、证书 ID(字符串,必填)、标准(字符串,必填)、发放时间(日期,必填)、到期时间(日期,必填);objectId、createdAt、updatedAt(系统)。 6. 不合规:审计(指向审计的指针,必填)、严重性(字符串,必填)、状态(字符串,必填)、纠正措施(字符串)、截至日期(日期);objectId、createdAt、updatedAt(系统)。 安全性: - 审计员仅管理自己的个人资料。使用云代码,只有被允许的协调员可以创建或编辑供应商、审计和 GFSILog 记录。限制设施照片和不合规读取权限仅限于审计团队。 认证: - 注册、登录、注销。 行为: - 列出供应商、记录审计、上传设施照片、注册 GFSI 认证详情,以及打开或关闭不合规项目。 交付: - 带有架构、ACL、CLP 的 Back4app 应用;供应商列表、审计输入、照片上传、认证日志以及不合规后续行为的前端。
按下面的按钮打开带有此模板提示预填的代理。
这是没有技术后缀的基本提示。您可以在之后调整生成的前端堆栈。
API 游乐场
尝试对供应商审核架构使用 REST 和 GraphQL 端点。响应使用模拟数据,不需要 Back4app 账户。
与此模板使用相同的架构。
选择您的技术
展开每个卡片以查看如何将审计员、供应商和审计与您选择的堆栈集成。
Flutter 食品供应商审计后端
React 食品供应商审计后端
React 原生 食品供应商审计后端
Next.js 食品供应商审计后端
JavaScript 食品供应商审计后端
Android 食品供应商审计后端
iOS 食品供应商审计后端
Vue 食品供应商审计后端
Angular 食品供应商审计后端
GraphQL 食品供应商审计后端
REST API 食品供应商审计后端
PHP 食品供应商审计后端
.NET 食品供应商审计后端
您每种技术所获得的内容
每个堆栈使用相同的食品供应商审计后端架构和 API 合同。
统一的供应商审计数据结构
通过一个模型与审计员、供应商、审计、设施照片、GFSI 日志和不合规项工作。
现场检查的照片证据
将设施图像存储在捕获它们的审计旁,而不是在单独的文件系统中。
GFSI 和后续跟踪
保持证书细节和纠正措施可供管理者和协调员查询。
角色感知的审计工作流
使用相同的后端规则定义现场员工、协调员和审核员的访问权限。
REST/GraphQL 供应商审计 API
通过灵活的 API 访问整合移动端、网页和后台屏幕。
食品供应商审计框架比较
比较所有支持技术的设置速度、SDK 风格和 AI 支持。
| 框架 | 设置时间 | 食品供应商审计收益 | SDK 类型 | AI 支持 |
|---|---|---|---|---|
| 约5分钟 | 移动和网络上的供应商审计单一代码库。 | 类型化SDK | 完整 | |
| 少于5分钟 | 用于审计经理的快速网络仪表板。 | 类型化SDK | 完整 | |
| 约3-7分钟 | 用于现场审计的跨平台移动应用。 | 类型化SDK | 完整 | |
| 快速(5分钟)设置 | 用于供应商审核的服务器渲染网页应用。 | 输入的SDK | 完整 | |
| 大约3–5分钟 | 用于审计工作流程的轻量级网页集成。 | 输入的SDK | 完整 | |
| 大约5分钟 | 用于现场检查的原生Android应用。 | 输入的SDK | 完整 | |
| 少于5分钟 | 基于照片的审核的原生 iPhone 应用。 | 输入的SDK | 完整 | |
| 约 3–7 分钟 | React 质量团队的网络用户界面。 | 键入的 SDK | 完整 | |
| 快速 (5分钟) 设置 | 用于供应商合规的企业网络应用。 | 键入的 SDK | 完整 | |
| 少于 2 分钟 | 灵活的 GraphQL API 用于审核仪表板。 | GraphQL API | 完整 | |
| 快速(2分钟)设置 | 为审计工具提供REST API集成。 | REST API | 完整 | |
| ~3分钟 | 审计门户的服务器端PHP后台。 | REST API | 完整 | |
| ~3–7分钟 | 为供应商审计系统提供.NET后台。 | 类型化SDK | 完整 |
设置时间反映从项目启动到使用此模板模式进行第一次供应商或审计查询的预期持续时间。
常见问题
有关使用此模板构建食品供应商审计后台的常见问题。