[{"data":1,"prerenderedAt":4040},["ShallowReactive",2],{"nav-docs-en":3,"page-/docs/webspace/examples/my-own-system":1156,"surround-/docs/webspace/examples/my-own-system":4034,"raw-/docs/webspace/examples/my-own-system":4037},[4,67,374,775,902,1074,1084,1109],{"title":5,"tags":6,"slug":6,"path":7,"stem":8,"children":9,"page":66,"sourcePath":7},"Getting Started with SpaceBuilder",null,"/getting-started","00.getting-started",[10,15,20,27,34,39,45,50,55,60],{"title":11,"path":12,"stem":13,"tags":6,"slug":14,"sourcePath":12},"Introducing SpaceBuilder","/getting-started/overview","00.getting-started/00.overview","/getting-started/overview/",{"title":16,"path":17,"stem":18,"tags":6,"slug":19,"sourcePath":17},"Create a SetFN Account","/getting-started/create-setfn-account","00.getting-started/05.create-setfn-account","/getting-started/create-setfn-account/",{"title":21,"path":22,"stem":23,"tags":24,"slug":26,"sourcePath":22},"Installing on Linux","/getting-started/install-linux","00.getting-started/10.install-linux",[25],"recommended","/getting-started/install-linux/",{"title":28,"path":29,"stem":30,"tags":31,"slug":33,"sourcePath":29},"Installing with Docker","/getting-started/install-docker","00.getting-started/12.install-docker",[32],"preparing","/getting-started/install-docker/",{"title":35,"path":36,"stem":37,"tags":6,"slug":38,"sourcePath":36},"Installing on Windows","/getting-started/install-windows","00.getting-started/14.install-windows","/getting-started/install-windows/",{"title":40,"path":41,"stem":42,"tags":43,"slug":44,"sourcePath":41},"Installing on macOS","/getting-started/install-macos","00.getting-started/16.install-macos",[32],"/getting-started/install-macos/",{"title":46,"path":47,"stem":48,"tags":6,"slug":49,"sourcePath":47},"Initial Setup","/getting-started/initial-setup","00.getting-started/20.initial-setup","/getting-started/initial-setup/",{"title":51,"path":52,"stem":53,"tags":6,"slug":54,"sourcePath":52},"License Activation","/getting-started/license-activation","00.getting-started/30.license-activation","/getting-started/license-activation/",{"title":56,"path":57,"stem":58,"tags":6,"slug":59,"sourcePath":57},"Checking Your Access Address (Local/Internal Network)","/getting-started/access-url","00.getting-started/35.access-url","/getting-started/access-url/",{"title":61,"path":62,"stem":63,"tags":64,"slug":65,"sourcePath":62},"Choosing an External Access Method","/getting-started/access-domain","00.getting-started/40.access-domain",[25],"/getting-started/access-domain/",false,{"title":68,"tags":6,"slug":6,"path":69,"stem":70,"children":71,"page":66,"sourcePath":69},"Managing Your Space","/admin","10.admin",[72,92,162,197,249,274,289,299,339],{"title":73,"tags":6,"slug":6,"path":74,"stem":75,"children":76,"page":66,"sourcePath":74},"Admin Home","/admin/home","10.admin/00.home",[77,82,87],{"title":78,"path":79,"stem":80,"tags":6,"slug":81,"sourcePath":79},"Accessing the Admin Page","/admin/home/admin-page-access","10.admin/00.home/00.admin-page-access","/admin/home/admin-page-access/",{"title":83,"path":69,"stem":84,"tags":6,"slug":85,"sourcePath":86},"Explore the Administrator Menus","10.admin/00.home/00.overview","/admin/","/admin/home/overview",{"title":88,"path":89,"stem":90,"tags":6,"slug":91,"sourcePath":89},"License Management","/admin/home/license","10.admin/00.home/20.license","/admin/home/license/",{"title":93,"tags":6,"slug":6,"path":94,"stem":95,"children":96,"page":66,"sourcePath":94},"User Management","/admin/user-management","10.admin/10.user-management",[97,102,107,112,117,122,127,132,137,142,147,152,157],{"title":98,"path":99,"stem":100,"tags":6,"slug":101,"sourcePath":99},"Set signup policy and default permissions","/admin/user-management/signup-policy","10.admin/10.user-management/02.signup-policy","/admin/user-management/signup-policy/",{"title":103,"path":104,"stem":105,"tags":6,"slug":106,"sourcePath":104},"Register signup terms","/admin/user-management/signup-terms","10.admin/10.user-management/04.signup-terms","/admin/user-management/signup-terms/",{"title":108,"path":109,"stem":110,"tags":6,"slug":111,"sourcePath":109},"Creating a User Account","/admin/user-management/invite-new-member","10.admin/10.user-management/10.invite-new-member","/admin/user-management/invite-new-member/",{"title":113,"path":114,"stem":115,"tags":6,"slug":116,"sourcePath":114},"Editing a User Account","/admin/user-management/edit-member","10.admin/10.user-management/11.edit-member","/admin/user-management/edit-member/",{"title":118,"path":119,"stem":120,"tags":6,"slug":121,"sourcePath":119},"Adding an Admin","/admin/user-management/add-new-admin","10.admin/10.user-management/12.add-new-admin","/admin/user-management/add-new-admin/",{"title":123,"path":124,"stem":125,"tags":6,"slug":126,"sourcePath":124},"Team Management","/admin/user-management/team","10.admin/10.user-management/22.team","/admin/user-management/team/",{"title":128,"path":129,"stem":130,"tags":6,"slug":131,"sourcePath":129},"Level management","/admin/user-management/level","10.admin/10.user-management/24.level","/admin/user-management/level/",{"title":133,"path":134,"stem":135,"tags":6,"slug":136,"sourcePath":134},"Checking Access Logs","/admin/user-management/access-log","10.admin/10.user-management/30.access-log","/admin/user-management/access-log/",{"title":138,"path":139,"stem":140,"tags":6,"slug":141,"sourcePath":139},"Manage Active Devices","/admin/user-management/active-devices","10.admin/10.user-management/31.active-devices","/admin/user-management/active-devices/",{"title":143,"path":144,"stem":145,"tags":6,"slug":146,"sourcePath":144},"Configure Account & Security policies","/admin/user-management/account-security","10.admin/10.user-management/32.account-security","/admin/user-management/account-security/",{"title":148,"path":149,"stem":150,"tags":6,"slug":151,"sourcePath":149},"Configure CAPTCHA","/admin/user-management/captcha","10.admin/10.user-management/33.captcha","/admin/user-management/captcha/",{"title":153,"path":154,"stem":155,"tags":6,"slug":156,"sourcePath":154},"Configure Member Notices","/admin/user-management/notice-settings","10.admin/10.user-management/34.notice-settings","/admin/user-management/notice-settings/",{"title":158,"path":159,"stem":160,"tags":6,"slug":161,"sourcePath":159},"Send bulk notices to members","/admin/user-management/bulk-mail","10.admin/10.user-management/36.bulk-mail","/admin/user-management/bulk-mail/",{"title":163,"tags":6,"slug":6,"path":164,"stem":165,"children":166,"page":66,"sourcePath":164},"Service Configuration","/admin/service-config","10.admin/20.service-config",[167,172,177,182,187,192],{"title":168,"path":169,"stem":170,"tags":6,"slug":171,"sourcePath":169},"File Area Settings","/admin/service-config/file-area","10.admin/20.service-config/10.file-area","/admin/service-config/file-area/",{"title":173,"path":174,"stem":175,"tags":6,"slug":176,"sourcePath":174},"Webhook Settings","/admin/service-config/webhook-settings","10.admin/20.service-config/16.webhook-settings","/admin/service-config/webhook-settings/",{"title":178,"path":179,"stem":180,"tags":6,"slug":181,"sourcePath":179},"Community Settings","/admin/service-config/community-space","10.admin/20.service-config/22.community-space","/admin/service-config/community-space/",{"title":183,"path":184,"stem":185,"tags":6,"slug":186,"sourcePath":184},"AI Chatbot Policy Settings","/admin/service-config/community-ai-chatbot","10.admin/20.service-config/24.community-ai-chatbot","/admin/service-config/community-ai-chatbot/",{"title":188,"path":189,"stem":190,"tags":6,"slug":191,"sourcePath":189},"Mail Settings","/admin/service-config/email-settings","10.admin/20.service-config/30.email-settings","/admin/service-config/email-settings/",{"title":193,"path":194,"stem":195,"tags":6,"slug":196,"sourcePath":194},"Branding Settings","/admin/service-config/brand","10.admin/20.service-config/40.brand","/admin/service-config/brand/",{"title":198,"tags":6,"slug":6,"path":199,"stem":200,"children":201,"page":66,"sourcePath":199},"Knowledge Services","/admin/knowledge","10.admin/30.knowledge",[202,207,214,219,224,229,234,239,244],{"title":203,"path":199,"stem":204,"tags":6,"slug":205,"sourcePath":206},"Knowledge Services overview","10.admin/30.knowledge/00.overview","/admin/knowledge/","/admin/knowledge/overview",{"title":208,"path":209,"stem":210,"children":211,"tags":6,"slug":213,"sourcePath":209},"Ingestion & Indexing","/admin/knowledge/indexing","10.admin/30.knowledge/10.indexing",[212],{"title":208,"path":209,"stem":210,"tags":6,"slug":213,"sourcePath":209},"/admin/knowledge/indexing/",{"title":215,"path":216,"stem":217,"tags":6,"slug":218,"sourcePath":216},"Search quality & languages","/admin/knowledge/search","10.admin/30.knowledge/20.search","/admin/knowledge/search/",{"title":220,"path":221,"stem":222,"tags":6,"slug":223,"sourcePath":221},"Knowledge Storage","/admin/knowledge/storage","10.admin/30.knowledge/30.storage","/admin/knowledge/storage/",{"title":225,"path":226,"stem":227,"tags":6,"slug":228,"sourcePath":226},"Operating Knowledge Storage","/admin/knowledge/storage-operations","10.admin/30.knowledge/32.storage-operations","/admin/knowledge/storage-operations/",{"title":230,"path":231,"stem":232,"tags":6,"slug":233,"sourcePath":231},"Connect Qdrant","/admin/knowledge/qdrant","10.admin/30.knowledge/34.qdrant","/admin/knowledge/qdrant/",{"title":235,"path":236,"stem":237,"tags":6,"slug":238,"sourcePath":236},"Setting Up a Qdrant Server","/admin/knowledge/qdrant-server-setup","10.admin/30.knowledge/35.qdrant-server-setup","/admin/knowledge/qdrant-server-setup/",{"title":240,"path":241,"stem":242,"tags":6,"slug":243,"sourcePath":241},"Connect Milvus","/admin/knowledge/milvus","10.admin/30.knowledge/36.milvus","/admin/knowledge/milvus/",{"title":245,"path":246,"stem":247,"tags":6,"slug":248,"sourcePath":246},"External search & evidence","/admin/knowledge/web-search","10.admin/30.knowledge/40.web-search","/admin/knowledge/web-search/",{"title":250,"tags":6,"slug":6,"path":251,"stem":252,"children":253,"page":66,"sourcePath":251},"AI Services","/admin/ai","10.admin/35.ai",[254,259,264,269],{"title":255,"path":251,"stem":256,"tags":6,"slug":257,"sourcePath":258},"Manage AI Services","10.admin/35.ai/00.overview","/admin/ai/","/admin/ai/overview",{"title":260,"path":261,"stem":262,"tags":6,"slug":263,"sourcePath":261},"Configure Models & Runtime","/admin/ai/models","10.admin/35.ai/10.models","/admin/ai/models/",{"title":265,"path":266,"stem":267,"tags":6,"slug":268,"sourcePath":266},"Configure Tools & Integrations","/admin/ai/integrations","10.admin/35.ai/20.integrations","/admin/ai/integrations/",{"title":270,"path":271,"stem":272,"tags":6,"slug":273,"sourcePath":271},"Manage the MCP Server","/admin/ai/mcp","10.admin/35.ai/30.mcp","/admin/ai/mcp/",{"title":275,"tags":6,"slug":6,"path":276,"stem":277,"children":278,"page":66,"sourcePath":276},"Plugins","/admin/plugin","10.admin/40.plugin",[279,284],{"title":280,"path":281,"stem":282,"tags":6,"slug":283,"sourcePath":281},"Managing Plugins","/admin/plugin/overview","10.admin/40.plugin/00.overview","/admin/plugin/overview/",{"title":285,"path":286,"stem":287,"tags":6,"slug":288,"sourcePath":286},"Extension Plugin Settings","/admin/plugin/settings","10.admin/40.plugin/10.settings","/admin/plugin/settings/",{"title":290,"path":291,"stem":292,"children":293,"page":66,"sourcePath":291},"Operations","/admin/operations","10.admin/45.operations",[294],{"title":295,"path":291,"stem":296,"tags":6,"slug":297,"sourcePath":298},"Review Operations & Audit Logs","10.admin/45.operations/00.overview","/admin/operations/","/admin/operations/overview",{"title":300,"tags":6,"slug":6,"path":301,"stem":302,"children":303,"page":66,"sourcePath":301},"Security Management","/admin/security","10.admin/50.security",[304,309,314,319,324,329,334],{"title":305,"path":306,"stem":307,"tags":6,"slug":308,"sourcePath":306},"Security Overview","/admin/security/overview","10.admin/50.security/00.overview","/admin/security/overview/",{"title":310,"path":311,"stem":312,"tags":6,"slug":313,"sourcePath":311},"Checking the Audit Log","/admin/security/audit-log","10.admin/50.security/05.audit-log","/admin/security/audit-log/",{"title":315,"path":316,"stem":317,"tags":6,"slug":318,"sourcePath":316},"Block Management","/admin/security/block-management","10.admin/50.security/10.block-management","/admin/security/block-management/",{"title":320,"path":321,"stem":322,"tags":6,"slug":323,"sourcePath":321},"Security Settings","/admin/security/security-setting","10.admin/50.security/12.security-setting","/admin/security/security-setting/",{"title":325,"path":326,"stem":327,"tags":6,"slug":328,"sourcePath":326},"Process pending device approvals","/admin/security/device-approvals","10.admin/50.security/14.device-approvals","/admin/security/device-approvals/",{"title":330,"path":331,"stem":332,"tags":6,"slug":333,"sourcePath":331},"IP Access Restriction","/admin/security/ip-restriction","10.admin/50.security/16.ip-restriction","/admin/security/ip-restriction/",{"title":335,"path":336,"stem":337,"tags":6,"slug":338,"sourcePath":336},"Set up administrator two-factor authentication","/admin/security/two-factor-auth","10.admin/50.security/18.two-factor-auth","/admin/security/two-factor-auth/",{"title":340,"tags":6,"slug":6,"path":341,"stem":342,"children":343,"page":66,"sourcePath":341},"System Management","/admin/system-admin","10.admin/60.system-admin",[344,349,354,359,364,369],{"title":345,"path":346,"stem":347,"tags":6,"slug":348,"sourcePath":346},"Device Information","/admin/system-admin/device-info","10.admin/60.system-admin/10.device-info","/admin/system-admin/device-info/",{"title":350,"path":351,"stem":352,"tags":6,"slug":353,"sourcePath":351},"Server Restart and System Maintenance","/admin/system-admin/server-restart","10.admin/60.system-admin/12.server-restart","/admin/system-admin/server-restart/",{"title":355,"path":356,"stem":357,"tags":6,"slug":358,"sourcePath":356},"Background Services","/admin/system-admin/background-service","10.admin/60.system-admin/14.background-service","/admin/system-admin/background-service/",{"title":360,"path":361,"stem":362,"tags":6,"slug":363,"sourcePath":361},"Updating SpaceBuilder","/admin/system-admin/update","10.admin/60.system-admin/16.update","/admin/system-admin/update/",{"title":365,"path":366,"stem":367,"tags":6,"slug":368,"sourcePath":366},"Uninstalling SpaceBuilder","/admin/system-admin/uninstall","10.admin/60.system-admin/18.uninstall","/admin/system-admin/uninstall/",{"title":370,"path":371,"stem":372,"tags":6,"slug":373,"sourcePath":371},"Moving to a New Server","/admin/system-admin/server-migration","10.admin/60.system-admin/20.server-migration","/admin/system-admin/server-migration/",{"title":375,"tags":6,"slug":6,"path":376,"stem":377,"children":378,"page":66,"sourcePath":376},"Using the Workspace","/workspace","20.workspace",[379,419,439,523,662,718,754],{"title":380,"tags":6,"slug":6,"path":381,"stem":382,"children":383,"page":66,"sourcePath":381},"Menu","/workspace/menu","20.workspace/05.menu",[384,389,394,399,404,409,414],{"title":385,"path":386,"stem":387,"tags":6,"slug":388,"sourcePath":386},"Workspace Overview","/workspace/menu/overview","20.workspace/05.menu/00.overview","/workspace/menu/overview/",{"title":390,"path":391,"stem":392,"tags":6,"slug":393,"sourcePath":391},"Team Space","/workspace/menu/team-space","20.workspace/05.menu/05.team-space","/workspace/menu/team-space/",{"title":395,"path":396,"stem":397,"tags":6,"slug":398,"sourcePath":396},"Client Space","/workspace/menu/client-space","20.workspace/05.menu/06.client-space","/workspace/menu/client-space/",{"title":400,"path":401,"stem":402,"tags":6,"slug":403,"sourcePath":401},"Favorites","/workspace/menu/favorites","20.workspace/05.menu/10.favorites","/workspace/menu/favorites/",{"title":405,"path":406,"stem":407,"tags":6,"slug":408,"sourcePath":406},"Recent Documents","/workspace/menu/recent","20.workspace/05.menu/20.recent","/workspace/menu/recent/",{"title":410,"path":411,"stem":412,"tags":6,"slug":413,"sourcePath":411},"External Share","/workspace/menu/external-share","20.workspace/05.menu/30.external-share","/workspace/menu/external-share/",{"title":415,"path":416,"stem":417,"tags":6,"slug":418,"sourcePath":416},"Trash","/workspace/menu/trash","20.workspace/05.menu/40.trash","/workspace/menu/trash/",{"title":420,"tags":6,"slug":6,"path":421,"stem":422,"children":423,"page":66,"sourcePath":421},"Account","/workspace/account","20.workspace/10.account",[424,429,434],{"title":425,"path":426,"stem":427,"tags":6,"slug":428,"sourcePath":426},"Sign Up and Log In","/workspace/account/signup","20.workspace/10.account/10.signup","/workspace/account/signup/",{"title":430,"path":431,"stem":432,"tags":6,"slug":433,"sourcePath":431},"Resetting Your Password","/workspace/account/reset-password","20.workspace/10.account/20.reset-password","/workspace/account/reset-password/",{"title":435,"path":436,"stem":437,"tags":6,"slug":438,"sourcePath":436},"Account Settings","/workspace/account/account-settings","20.workspace/10.account/30.account-settings","/workspace/account/account-settings/",{"title":440,"tags":6,"slug":6,"path":441,"stem":442,"children":443,"page":66,"sourcePath":441},"Folders","/workspace/folder","20.workspace/20.folder",[444,449,454,459,464,471,476,481,486,491,496,501,506,511,518],{"title":445,"path":446,"stem":447,"tags":6,"slug":448,"sourcePath":446},"Folder Basics","/workspace/folder/basic","20.workspace/20.folder/10.basic","/workspace/folder/basic/",{"title":450,"path":451,"stem":452,"tags":6,"slug":453,"sourcePath":451},"Creating Multiple Folders at Once","/workspace/folder/bulk-folder-creation","20.workspace/20.folder/12.bulk-folder-creation","/workspace/folder/bulk-folder-creation/",{"title":455,"path":456,"stem":457,"tags":6,"slug":458,"sourcePath":456},"Filter","/workspace/folder/filter","20.workspace/20.folder/13.filter","/workspace/folder/filter/",{"title":460,"path":461,"stem":462,"tags":6,"slug":463,"sourcePath":461},"Configuring Folder View Options","/workspace/folder/folder-view-options","20.workspace/20.folder/14.folder-view-options","/workspace/folder/folder-view-options/",{"title":465,"path":466,"stem":467,"tags":468,"slug":470,"sourcePath":466},"Using a Folder as a Board","/workspace/folder/board-view","20.workspace/20.folder/15.board-view",[469],"hot","/workspace/folder/board-view/",{"title":472,"path":473,"stem":474,"tags":6,"slug":475,"sourcePath":473},"Folder Web View","/workspace/folder/folder-web-view","20.workspace/20.folder/16.folder-web-view","/workspace/folder/folder-web-view/",{"title":477,"path":478,"stem":479,"tags":6,"slug":480,"sourcePath":478},"Folder Organization","/workspace/folder/folder-organize","20.workspace/20.folder/17.folder-organize","/workspace/folder/folder-organize/",{"title":482,"path":483,"stem":484,"tags":6,"slug":485,"sourcePath":483},"Folder Notice (README)","/workspace/folder/folder-readme","20.workspace/20.folder/18.folder-readme","/workspace/folder/folder-readme/",{"title":487,"path":488,"stem":489,"tags":6,"slug":490,"sourcePath":488},"Exporting Folder/File Lists","/workspace/folder/folder-export","20.workspace/20.folder/20.folder-export","/workspace/folder/folder-export/",{"title":492,"path":493,"stem":494,"tags":6,"slug":495,"sourcePath":493},"Setting Level-Based Access Permissions","/workspace/folder/level-access-permissions","20.workspace/20.folder/24.level-access-permissions","/workspace/folder/level-access-permissions/",{"title":497,"path":498,"stem":499,"tags":6,"slug":500,"sourcePath":498},"Setting Team-Based Access Permissions","/workspace/folder/team-access-permissions","20.workspace/20.folder/26.team-access-permissions","/workspace/folder/team-access-permissions/",{"title":502,"path":503,"stem":504,"tags":6,"slug":505,"sourcePath":503},"Setting File Rules","/workspace/folder/file-rules","20.workspace/20.folder/28.file-rules","/workspace/folder/file-rules/",{"title":507,"path":508,"stem":509,"tags":6,"slug":510,"sourcePath":508},"Folder Webhooks","/workspace/folder/webhook","20.workspace/20.folder/30.webhook","/workspace/folder/webhook/",{"title":512,"path":513,"stem":514,"children":515,"tags":6,"slug":517,"sourcePath":513},"Configure folder knowledge indexing","/workspace/folder/knowledge-index","20.workspace/20.folder/32.knowledge-index",[516],{"title":512,"path":513,"stem":514,"tags":6,"slug":517,"sourcePath":513},"/workspace/folder/knowledge-index/",{"title":519,"path":520,"stem":521,"tags":6,"slug":522,"sourcePath":520},"Work Automation Folder","/workspace/folder/automation","20.workspace/20.folder/40.automation","/workspace/folder/automation/",{"title":524,"tags":6,"slug":6,"path":525,"stem":526,"children":527,"page":66,"sourcePath":525},"Files","/workspace/file","20.workspace/30.file",[528,533,538,543,548,553,558,563,568,573,578,583,588,593,598,603,608,613,618,623,628,633,637,642,647,652,657],{"title":529,"path":530,"stem":531,"tags":6,"slug":532,"sourcePath":530},"File Management Basics","/workspace/file/overview","20.workspace/30.file/00.overview","/workspace/file/overview/",{"title":534,"path":535,"stem":536,"tags":6,"slug":537,"sourcePath":535},"Checking the List While Viewing a File","/workspace/file/list-in-file","20.workspace/30.file/05.list-in-file","/workspace/file/list-in-file/",{"title":539,"path":540,"stem":541,"tags":6,"slug":542,"sourcePath":540},"Viewing and Editing Markdown and Text Files","/workspace/file/text-file-viewer","20.workspace/30.file/10.text-file-viewer","/workspace/file/text-file-viewer/",{"title":544,"path":545,"stem":546,"tags":6,"slug":547,"sourcePath":545},"Viewing HTML Files","/workspace/file/html-viewer","20.workspace/30.file/11.html-viewer","/workspace/file/html-viewer/",{"title":549,"path":550,"stem":551,"tags":6,"slug":552,"sourcePath":550},"Viewing and Editing CSV Files","/workspace/file/csv-viewer","20.workspace/30.file/12.csv-viewer","/workspace/file/csv-viewer/",{"title":554,"path":555,"stem":556,"tags":6,"slug":557,"sourcePath":555},"Viewing Image/Video Files","/workspace/file/image-file-viewer","20.workspace/30.file/13.image-file-viewer","/workspace/file/image-file-viewer/",{"title":559,"path":560,"stem":561,"tags":6,"slug":562,"sourcePath":560},"Viewing Office/PDF Files","/workspace/file/office-viewer","20.workspace/30.file/14.office-viewer","/workspace/file/office-viewer/",{"title":564,"path":565,"stem":566,"tags":6,"slug":567,"sourcePath":565},"Pasting Web Pages (HTML)","/workspace/file/paste-html","20.workspace/30.file/20.paste-html","/workspace/file/paste-html/",{"title":569,"path":570,"stem":571,"tags":6,"slug":572,"sourcePath":570},"Pasting Screenshots","/workspace/file/paste-screenshot","20.workspace/30.file/21.paste-screenshot","/workspace/file/paste-screenshot/",{"title":574,"path":575,"stem":576,"tags":6,"slug":577,"sourcePath":575},"Pasting Markdown (MD)","/workspace/file/paste-md","20.workspace/30.file/22.paste-md","/workspace/file/paste-md/",{"title":579,"path":580,"stem":581,"tags":6,"slug":582,"sourcePath":580},"Screen Recording","/workspace/file/screen-recording","20.workspace/30.file/23.screen-recording","/workspace/file/screen-recording/",{"title":584,"path":585,"stem":586,"tags":6,"slug":587,"sourcePath":585},"Quick Note","/workspace/file/quick-note","20.workspace/30.file/24.quick-note","/workspace/file/quick-note/",{"title":589,"path":590,"stem":591,"tags":6,"slug":592,"sourcePath":590},"File Tags","/workspace/file/file-tag","20.workspace/30.file/33.file-tag","/workspace/file/file-tag/",{"title":594,"path":595,"stem":596,"tags":6,"slug":597,"sourcePath":595},"Bulk Renaming Files","/workspace/file/bulk-name-revise","20.workspace/30.file/34.bulk-name-revise","/workspace/file/bulk-name-revise/",{"title":599,"path":600,"stem":601,"tags":6,"slug":602,"sourcePath":600},"File Conversion","/workspace/file/file-convert-overview","20.workspace/30.file/40.file-convert-overview","/workspace/file/file-convert-overview/",{"title":604,"path":605,"stem":606,"tags":6,"slug":607,"sourcePath":605},"Template Files","/workspace/file/templates","20.workspace/30.file/41.templates","/workspace/file/templates/",{"title":609,"path":610,"stem":611,"tags":6,"slug":612,"sourcePath":610},"To-Do List","/workspace/file/template-todo","20.workspace/30.file/42.template-todo","/workspace/file/template-todo/",{"title":614,"path":615,"stem":616,"tags":6,"slug":617,"sourcePath":615},"Approval Form","/workspace/file/template-approval","20.workspace/30.file/43.template-approval","/workspace/file/template-approval/",{"title":619,"path":620,"stem":621,"tags":6,"slug":622,"sourcePath":620},"Kanban Board","/workspace/file/template-kanban","20.workspace/30.file/44.template-kanban","/workspace/file/template-kanban/",{"title":624,"path":625,"stem":626,"tags":6,"slug":627,"sourcePath":625},"Timeline","/workspace/file/template-timeline","20.workspace/30.file/45.template-timeline","/workspace/file/template-timeline/",{"title":629,"path":630,"stem":631,"tags":6,"slug":632,"sourcePath":630},"Memo","/workspace/file/template-memo","20.workspace/30.file/46.template-memo","/workspace/file/template-memo/",{"title":634,"path":635,"stem":636,"tags":6,"slug":635,"sourcePath":635},"AI Chat File","/workspace/file/ai-chat-file","20.workspace/30.file/47.ai-chat-file",{"title":638,"path":639,"stem":640,"tags":6,"slug":641,"sourcePath":639},"Checking the File Change Log","/workspace/file/audit-trail","20.workspace/30.file/50.audit-trail","/workspace/file/audit-trail/",{"title":643,"path":644,"stem":645,"tags":6,"slug":646,"sourcePath":644},"File Version Control","/workspace/file/version-trail","20.workspace/30.file/51.version-trail","/workspace/file/version-trail/",{"title":648,"path":649,"stem":650,"tags":6,"slug":651,"sourcePath":649},"Edit Lock","/workspace/file/file-lock","20.workspace/30.file/52.file-lock","/workspace/file/file-lock/",{"title":653,"path":654,"stem":655,"tags":6,"slug":656,"sourcePath":654},"File Encryption","/workspace/file/file-encrypt","20.workspace/30.file/53.file-encrypt","/workspace/file/file-encrypt/",{"title":658,"path":659,"stem":660,"tags":6,"slug":661,"sourcePath":659},"Register disk files","/workspace/file/disk-file-registration","20.workspace/30.file/60.disk-file-registration","/workspace/file/disk-file-registration/",{"title":663,"tags":6,"slug":6,"path":664,"stem":665,"children":666,"page":66,"sourcePath":664},"Collaboration","/workspace/cooperation","20.workspace/35.cooperation",[667,672,677,682,687,692,697,702,707,713],{"title":668,"path":669,"stem":670,"tags":6,"slug":671,"sourcePath":669},"File/Folder Comments","/workspace/cooperation/file-comments","20.workspace/35.cooperation/00.file-comments","/workspace/cooperation/file-comments/",{"title":673,"path":674,"stem":675,"tags":6,"slug":676,"sourcePath":674},"Chat","/workspace/cooperation/chat","20.workspace/35.cooperation/10.chat","/workspace/cooperation/chat/",{"title":678,"path":679,"stem":680,"tags":6,"slug":681,"sourcePath":679},"Collaborative Chat and Edit Lock","/workspace/cooperation/collaboration-chat","20.workspace/35.cooperation/11.collaboration-chat","/workspace/cooperation/collaboration-chat/",{"title":683,"path":684,"stem":685,"tags":6,"slug":686,"sourcePath":684},"Following a Team Member's Location","/workspace/cooperation/follow-team-location","20.workspace/35.cooperation/12.follow-team-location","/workspace/cooperation/follow-team-location/",{"title":688,"path":689,"stem":690,"tags":6,"slug":691,"sourcePath":689},"Mentions","/workspace/cooperation/mention","20.workspace/35.cooperation/14.mention","/workspace/cooperation/mention/",{"title":693,"path":694,"stem":695,"tags":6,"slug":696,"sourcePath":694},"Direct Messages","/workspace/cooperation/dm","20.workspace/35.cooperation/16.dm","/workspace/cooperation/dm/",{"title":698,"path":699,"stem":700,"tags":6,"slug":701,"sourcePath":699},"Notification Archive","/workspace/cooperation/notification-inbox","20.workspace/35.cooperation/18.notification-inbox","/workspace/cooperation/notification-inbox/",{"title":703,"path":704,"stem":705,"tags":6,"slug":706,"sourcePath":704},"Checking Team Activity","/workspace/cooperation/file-activity","20.workspace/35.cooperation/30.file-activity","/workspace/cooperation/file-activity/",{"title":708,"path":709,"stem":710,"tags":711,"slug":712,"sourcePath":709},"Creating an External Share Link","/workspace/cooperation/share-link-creation","20.workspace/35.cooperation/40.share-link-creation",[469],"/workspace/cooperation/share-link-creation/",{"title":714,"path":715,"stem":716,"tags":6,"slug":717,"sourcePath":715},"Sending an External Share Link by Email","/workspace/cooperation/share-link-email","20.workspace/35.cooperation/42.share-link-email","/workspace/cooperation/share-link-email/",{"title":719,"tags":6,"slug":6,"path":720,"stem":721,"children":722,"page":66,"sourcePath":720},"Search","/workspace/search","20.workspace/40.search",[723,728,734,739,744,749],{"title":724,"path":725,"stem":726,"tags":6,"slug":727,"sourcePath":725},"File Search","/workspace/search/search","20.workspace/40.search/00.search","/workspace/search/search/",{"title":729,"path":730,"stem":731,"tags":732,"slug":733,"sourcePath":730},"Context Search (AI Search)","/workspace/search/context-search","20.workspace/40.search/10.context-search",[469],"/workspace/search/context-search/",{"title":735,"path":736,"stem":737,"tags":6,"slug":738,"sourcePath":736},"Image Search","/workspace/search/image-search","20.workspace/40.search/20.image-search","/workspace/search/image-search/",{"title":740,"path":741,"stem":742,"tags":6,"slug":743,"sourcePath":741},"Chat Search","/workspace/search/chat-search","20.workspace/40.search/30.chat-search","/workspace/search/chat-search/",{"title":745,"path":746,"stem":747,"tags":6,"slug":748,"sourcePath":746},"Comment Search","/workspace/search/comment-search","20.workspace/40.search/40.comment-search","/workspace/search/comment-search/",{"title":750,"path":751,"stem":752,"tags":6,"slug":753,"sourcePath":751},"Synonym Search","/workspace/search/synonym-search","20.workspace/40.search/50.synonym-search","/workspace/search/synonym-search/",{"title":755,"tags":6,"slug":6,"path":756,"stem":757,"children":758,"page":66,"sourcePath":756},"AI","/workspace/ai","20.workspace/50.ai",[759,764,770],{"title":760,"path":761,"stem":762,"tags":6,"slug":763,"sourcePath":761},"AI Features Summary","/workspace/ai/overview","20.workspace/50.ai/00.overview","/workspace/ai/overview/",{"title":765,"path":766,"stem":767,"tags":768,"slug":769,"sourcePath":766},"Requesting Work from the Local AI","/workspace/ai/ai-work","20.workspace/50.ai/10.ai-work",[469],"/workspace/ai/ai-work/",{"title":771,"path":772,"stem":773,"tags":6,"slug":774,"sourcePath":772},"Using External AI","/workspace/ai/external-ai","20.workspace/50.ai/20.external-ai","/workspace/ai/external-ai/",{"title":776,"tags":6,"slug":6,"path":777,"stem":778,"children":779,"page":66,"sourcePath":777},"Webspace","/webspace","40.webspace",[780,785,790,795,800,805,811,816,821,826,831,865],{"title":781,"path":782,"stem":783,"tags":6,"slug":784,"sourcePath":782},"What is WebSpace?","/webspace/overview","40.webspace/00.overview","/webspace/overview/",{"title":786,"path":787,"stem":788,"tags":6,"slug":789,"sourcePath":787},"Deploying a Website","/webspace/website-release","40.webspace/10.website-release","/webspace/website-release/",{"title":791,"path":792,"stem":793,"tags":6,"slug":794,"sourcePath":792},"Create a schema file (.sfn)","/webspace/create-database","40.webspace/20.create-database","/webspace/create-database/",{"title":796,"path":797,"stem":798,"tags":6,"slug":799,"sourcePath":797},"Build APIs and deploy a database","/webspace/api-overview","40.webspace/24.api-overview","/webspace/api-overview/",{"title":801,"path":802,"stem":803,"tags":6,"slug":804,"sourcePath":802},"Checking the Frontend Sample","/webspace/frontend-example","40.webspace/26.frontend-example","/webspace/frontend-example/",{"title":806,"path":807,"stem":808,"tags":809,"slug":810,"sourcePath":807},"Building an Internal Team Web Service","/webspace/internal-webservice","40.webspace/32.internal-webservice",[469],"/webspace/internal-webservice/",{"title":812,"path":813,"stem":814,"tags":6,"slug":815,"sourcePath":813},"Building a Publicly Accessible Web Service","/webspace/external-webservice","40.webspace/34.external-webservice","/webspace/external-webservice/",{"title":817,"path":818,"stem":819,"tags":6,"slug":820,"sourcePath":818},"Import and export SQL","/webspace/sql-converter","40.webspace/42.sql-converter","/webspace/sql-converter/",{"title":822,"path":823,"stem":824,"tags":6,"slug":825,"sourcePath":823},"Convert a schema to code","/webspace/code-converter","40.webspace/44.code-converter","/webspace/code-converter/",{"title":827,"path":828,"stem":829,"tags":6,"slug":830,"sourcePath":828},"Performance and scaling","/webspace/performance","40.webspace/48.performance","/webspace/performance/",{"title":832,"tags":6,"slug":6,"path":833,"stem":834,"children":835,"page":66,"sourcePath":833},"Webspace Management","/webspace/admin","40.webspace/50.admin",[836,841,845,850,855,860],{"title":837,"path":838,"stem":839,"tags":6,"slug":840,"sourcePath":838},"Get started with WebSpace administration","/webspace/admin/overview","40.webspace/50.admin/00.overview","/webspace/admin/overview/",{"title":290,"path":842,"stem":843,"tags":6,"slug":844,"sourcePath":842},"/webspace/admin/operations","40.webspace/50.admin/10.operations","/webspace/admin/operations/",{"title":846,"path":847,"stem":848,"tags":6,"slug":849,"sourcePath":847},"Workspace access","/webspace/admin/workspace-access","40.webspace/50.admin/20.workspace-access","/webspace/admin/workspace-access/",{"title":851,"path":852,"stem":853,"tags":6,"slug":854,"sourcePath":852},"API & site security","/webspace/admin/api-site-security","40.webspace/50.admin/30.api-site-security","/webspace/admin/api-site-security/",{"title":856,"path":857,"stem":858,"tags":6,"slug":859,"sourcePath":857},"Services and capacity","/webspace/admin/service-capacity","40.webspace/50.admin/40.service-capacity","/webspace/admin/service-capacity/",{"title":861,"path":862,"stem":863,"tags":6,"slug":864,"sourcePath":862},"Deployment management and frontend releases","/webspace/admin/deployments","40.webspace/50.admin/50.deployments","/webspace/admin/deployments/",{"title":866,"tags":867,"slug":6,"path":868,"stem":869,"children":870,"page":66,"sourcePath":868},"Webspace Tutorials",[469],"/webspace/examples","40.webspace/60.examples",[871,876,881,887,892,897],{"title":872,"path":868,"stem":873,"tags":6,"slug":874,"sourcePath":875},"WebSpace examples","40.webspace/60.examples/00.overview","/webspace/examples/","/webspace/examples/overview",{"title":877,"path":878,"stem":879,"tags":6,"slug":880,"sourcePath":878},"Build your own business system","/webspace/examples/my-own-system","40.webspace/60.examples/10.my-own-system","/webspace/examples/my-own-system/",{"title":882,"path":883,"stem":884,"tags":885,"slug":886,"sourcePath":883},"Build a real-time Gomoku game","/webspace/examples/realtime-gomoku","40.webspace/60.examples/20.realtime-gomoku",[469],"/webspace/examples/realtime-gomoku/",{"title":888,"path":889,"stem":890,"tags":6,"slug":891,"sourcePath":889},"Build a resource board from folder files","/webspace/examples/folder-board","40.webspace/60.examples/30.folder-board","/webspace/examples/folder-board/",{"title":893,"path":894,"stem":895,"tags":6,"slug":896,"sourcePath":894},"Build a shared monster raid","/webspace/examples/monster-raid","40.webspace/60.examples/40.monster-raid","/webspace/examples/monster-raid/",{"title":898,"path":899,"stem":900,"tags":6,"slug":901,"sourcePath":899},"Deploy an AI support chat sample","/webspace/examples/ai-support-chat","40.webspace/60.examples/50.ai-support-chat","/webspace/examples/ai-support-chat/",{"title":903,"tags":6,"slug":6,"path":904,"stem":905,"children":906,"page":66,"sourcePath":904},"Using Plugins","/plugin","50.plugin",[907,912,932,993,1014,1049],{"title":908,"path":909,"stem":910,"tags":6,"slug":911,"sourcePath":909},"Plugin Overview","/plugin/overview","50.plugin/00.overview","/plugin/overview/",{"title":913,"tags":6,"slug":6,"path":914,"stem":915,"children":916,"page":66,"sourcePath":914},"Calendar","/plugin/calendar","50.plugin/10.calendar",[917,922,927],{"title":918,"path":919,"stem":920,"tags":6,"slug":921,"sourcePath":919},"Calendar Introduction","/plugin/calendar/overview","50.plugin/10.calendar/00.overview","/plugin/calendar/overview/",{"title":923,"path":924,"stem":925,"tags":6,"slug":926,"sourcePath":924},"Creating, Editing, and Deleting Events","/plugin/calendar/create-event","50.plugin/10.calendar/10.create-event","/plugin/calendar/create-event/",{"title":928,"path":929,"stem":930,"tags":6,"slug":931,"sourcePath":929},"Checking Activity History","/plugin/calendar/file-activity","50.plugin/10.calendar/40.file-activity","/plugin/calendar/file-activity/",{"title":933,"tags":6,"slug":6,"path":934,"stem":935,"children":936,"page":66,"sourcePath":934},"Email","/plugin/email","50.plugin/20.email",[937,942,947,952,957,963,968,973,978,983,988],{"title":938,"path":939,"stem":940,"tags":6,"slug":941,"sourcePath":939},"Email Introduction","/plugin/email/overview","50.plugin/20.email/00.overview","/plugin/email/overview/",{"title":943,"path":944,"stem":945,"tags":6,"slug":946,"sourcePath":944},"Email Settings","/plugin/email/setfn-email-setting","50.plugin/20.email/05.setfn-email-setting","/plugin/email/setfn-email-setting/",{"title":948,"path":949,"stem":950,"tags":6,"slug":951,"sourcePath":949},"Connect an External Email Account","/plugin/email/external-email","50.plugin/20.email/07.external-email","/plugin/email/external-email/",{"title":953,"path":954,"stem":955,"tags":6,"slug":956,"sourcePath":954},"Basic Email Functionality","/plugin/email/email-basic","50.plugin/20.email/10.email-basic","/plugin/email/email-basic/",{"title":958,"path":959,"stem":960,"tags":6,"slug":961,"sourcePath":962},"Use the Email AI Assistant","/plugin/email/ai-assistant","50.plugin/20.email/15.email-ai-assistant","/plugin/email/ai-assistant/","/plugin/email/email-ai-assistant",{"title":964,"path":965,"stem":966,"tags":6,"slug":967,"sourcePath":965},"Composing and Sending Email","/plugin/email/email-compose","50.plugin/20.email/20.email-compose","/plugin/email/email-compose/",{"title":969,"path":970,"stem":971,"tags":6,"slug":972,"sourcePath":970},"Attaching Files","/plugin/email/email-attachment","50.plugin/20.email/30.email-attachment","/plugin/email/email-attachment/",{"title":974,"path":975,"stem":976,"tags":6,"slug":977,"sourcePath":975},"Mail Folder Management","/plugin/email/email-folders","50.plugin/20.email/40.email-folders","/plugin/email/email-folders/",{"title":979,"path":980,"stem":981,"tags":6,"slug":982,"sourcePath":980},"Automatic Email Classification","/plugin/email/email-auto-classify","50.plugin/20.email/50.email-auto-classify","/plugin/email/email-auto-classify/",{"title":984,"path":985,"stem":986,"tags":6,"slug":987,"sourcePath":985},"Email File Archiving and Sharing","/plugin/email/email-open-in-space","50.plugin/20.email/60.email-open-in-space","/plugin/email/email-open-in-space/",{"title":989,"path":990,"stem":991,"tags":6,"slug":992,"sourcePath":990},"Email Security","/plugin/email/email-security","50.plugin/20.email/70.email-security","/plugin/email/email-security/",{"title":994,"tags":6,"slug":6,"path":995,"stem":996,"children":997,"page":66,"sourcePath":995},"Workflow (Automation)","/plugin/workflow","50.plugin/30.workflow",[998,1003,1009],{"title":999,"path":1000,"stem":1001,"tags":6,"slug":1002,"sourcePath":1000},"Workflow Introduction","/plugin/workflow/overview","50.plugin/30.workflow/00.overview","/plugin/workflow/overview/",{"title":1004,"path":1005,"stem":1006,"tags":1007,"slug":1008,"sourcePath":1005},"Creating a New Workflow","/plugin/workflow/new-workflow","50.plugin/30.workflow/10.new-workflow",[469],"/plugin/workflow/new-workflow/",{"title":1010,"path":1011,"stem":1012,"tags":6,"slug":1013,"sourcePath":1011},"Checking Execution History","/plugin/workflow/execution-history","50.plugin/30.workflow/20.execution-history","/plugin/workflow/execution-history/",{"title":1015,"tags":6,"slug":6,"path":1016,"stem":1017,"children":1018,"page":66,"sourcePath":1016},"Fine-tuning (AI Training)","/plugin/fine-tuning","50.plugin/40.fine-tuning",[1019,1024,1029,1034,1039,1044],{"title":1020,"path":1021,"stem":1022,"tags":6,"slug":1023,"sourcePath":1021},"Fine-tuning Introduction","/plugin/fine-tuning/overview","50.plugin/40.fine-tuning/00.overview","/plugin/fine-tuning/overview/",{"title":1025,"path":1026,"stem":1027,"tags":6,"slug":1028,"sourcePath":1026},"Preprocessing Training Data","/plugin/fine-tuning/pre-processing","50.plugin/40.fine-tuning/10.pre-processing","/plugin/fine-tuning/pre-processing/",{"title":1030,"path":1031,"stem":1032,"tags":6,"slug":1033,"sourcePath":1031},"Training","/plugin/fine-tuning/training","50.plugin/40.fine-tuning/20.training","/plugin/fine-tuning/training/",{"title":1035,"path":1036,"stem":1037,"tags":6,"slug":1038,"sourcePath":1036},"Evaluation","/plugin/fine-tuning/evaluation","50.plugin/40.fine-tuning/30.evaluation","/plugin/fine-tuning/evaluation/",{"title":1040,"path":1041,"stem":1042,"tags":6,"slug":1043,"sourcePath":1041},"Chat Test","/plugin/fine-tuning/chat-test","50.plugin/40.fine-tuning/40.chat-test","/plugin/fine-tuning/chat-test/",{"title":1045,"path":1046,"stem":1047,"tags":6,"slug":1048,"sourcePath":1046},"Export","/plugin/fine-tuning/export","50.plugin/40.fine-tuning/50.export","/plugin/fine-tuning/export/",{"title":1050,"tags":6,"slug":6,"path":1051,"stem":1052,"children":1053,"page":66,"sourcePath":1051},"EDC (Data Collection)","/plugin/edc","50.plugin/50.edc",[1054,1059,1064,1069],{"title":1055,"path":1056,"stem":1057,"tags":6,"slug":1058,"sourcePath":1056},"EDC Introduction","/plugin/edc/overview","50.plugin/50.edc/00.overview","/plugin/edc/overview/",{"title":1060,"path":1061,"stem":1062,"tags":6,"slug":1063,"sourcePath":1061},"Data Entry, Audit Trail","/plugin/edc/data-entry","50.plugin/50.edc/10.data-entry","/plugin/edc/data-entry/",{"title":1065,"path":1066,"stem":1067,"tags":6,"slug":1068,"sourcePath":1066},"Builder","/plugin/edc/builder","50.plugin/50.edc/20.builder","/plugin/edc/builder/",{"title":1070,"path":1071,"stem":1072,"tags":6,"slug":1073,"sourcePath":1071},"User/Site Settings","/plugin/edc/account","50.plugin/50.edc/30.account","/plugin/edc/account/",{"title":1075,"tags":6,"slug":6,"path":1076,"stem":1077,"children":1078,"page":66,"sourcePath":1076},"Command-line Tools","/cli","90.cli",[1079],{"title":1080,"path":1081,"stem":1082,"tags":6,"slug":1083,"sourcePath":1081},"Managing the Server with Commands","/cli/commands","90.cli/10.commands","/cli/commands/",{"title":1085,"tags":6,"slug":6,"path":1086,"stem":1087,"children":1088,"page":66,"sourcePath":1086},"Security Updates","/security-updates","95.security-updates",[1089,1094,1099,1104],{"title":1090,"path":1091,"stem":1092,"tags":6,"slug":1093,"sourcePath":1091},"How SetFN Reviews Security and Ships Updates","/security-updates/overview","95.security-updates/00.overview","/security-updates/overview/",{"title":1095,"path":1096,"stem":1097,"tags":6,"slug":1098,"sourcePath":1096},"Security Review Log","/security-updates/review-log","95.security-updates/10.review-log","/security-updates/review-log/",{"title":1100,"path":1101,"stem":1102,"tags":6,"slug":1103,"sourcePath":1101},"Vulnerability Status","/security-updates/vulnerability-status","95.security-updates/20.vulnerability-status","/security-updates/vulnerability-status/",{"title":1105,"path":1106,"stem":1107,"tags":6,"slug":1108,"sourcePath":1106},"Checking Server Security Updates","/security-updates/server-checklist","95.security-updates/30.server-checklist","/security-updates/server-checklist/",{"title":1110,"tags":6,"slug":6,"path":1111,"stem":1112,"children":1113,"page":66,"sourcePath":1111},"FAQ","/faq","99.FAQ",[1114,1120,1126,1132,1138,1144,1150],{"title":1115,"path":1116,"stem":1117,"tags":6,"slug":1118,"sourcePath":1119},"SetFN vs Cloud Services Comparison","/FAQ/comparison-cloud","99.FAQ/10.comparison-cloud","/FAQ/comparison-cloud/","/faq/comparison-cloud",{"title":1121,"path":1122,"stem":1123,"tags":6,"slug":1124,"sourcePath":1125},"SetFN vs NAS Comparison","/FAQ/comparison-nas","99.FAQ/20.comparison-nas","/FAQ/comparison-nas/","/faq/comparison-nas",{"title":1127,"path":1128,"stem":1129,"tags":6,"slug":1130,"sourcePath":1131},"Security Policy","/FAQ/security-policy","99.FAQ/30.security-policy","/FAQ/security-policy/","/faq/security-policy",{"title":1133,"path":1134,"stem":1135,"tags":6,"slug":1136,"sourcePath":1137},"Why Is SetFN Fast","/FAQ/why-fast","99.FAQ/40.why-fast","/FAQ/why-fast/","/faq/why-fast",{"title":1139,"path":1140,"stem":1141,"tags":6,"slug":1142,"sourcePath":1143},"License FAQ","/FAQ/license-faq","99.FAQ/50.license-faq","/FAQ/license-faq/","/faq/license-faq",{"title":1145,"path":1146,"stem":1147,"tags":6,"slug":1148,"sourcePath":1149},"AI Features FAQ","/FAQ/ai-faq","99.FAQ/60.ai-faq","/FAQ/ai-faq/","/faq/ai-faq",{"title":1151,"path":1152,"stem":1153,"tags":6,"slug":1154,"sourcePath":1155},"Troubleshooting Guide","/FAQ/troubleshooting","99.FAQ/70.troubleshooting","/FAQ/troubleshooting/","/faq/troubleshooting",{"id":1157,"title":877,"body":1158,"cover":6,"description":4019,"extension":4020,"image":6,"meta":4021,"navigation":4022,"path":878,"reviewSummary":6,"reviewedAt":6,"seo":4023,"slug":880,"stem":879,"tags":6,"thumbnail":6,"thumbnailPosition":6,"thumbnailScale":6,"__hash__":4033},"docs_en/40.webspace/60.examples/10.my-own-system.md",{"type":1159,"value":1160,"toc":4013},"minimal",[1161,1165,1169,1187,1190,1195,1205,1208,1218,1229,3800,3812,3819,3822,3828,3835,3841,3848,3854,3873,3877,3883,3899,3902,3908,3911,3916,3919,3923,3926,3932,3935,3938,3941,3947,3953,3959,3965,3969,3972,4004,4006,4009],[1162,1163,877],"h1",{"id":1164},"build-your-own-business-system",[1166,1167,1168],"p",{},"In the SetFN workspace, you can build systems such as your company's own groupware or ERP yourself.\nLeave the database structure design and the screen creation to AI. All you need to do is produce the results and upload them to the workspace.\nThere are 2 files to create. Your tasks are to upload them and click the 'Deploy' button.\nThis document builds an 'inventory management program for a manufacturing site' as an example.",[1166,1170,1171,1172,1176,1177,1180,1181,1186],{},"If you want to try the completed files right away without the AI prompts, you can get the schema, ",[1173,1174,1175],"code",{},"index.html",", ",[1173,1178,1179],{},"mock-db-upload.html",", and the README at once from ",[1182,1183,1185],"a",{"href":1184},"/examples/webspace/inventory-management/setfn-inventory-management-sample.zip","Download the full sample ZIP",".",[1188,1189],"hr",{},[1191,1192,1194],"h2",{"id":1193},"_1-create-the-sfn-file-for-creating-the-database","1. Create the .sfn file for creating the database",[1166,1196,1197,1198,1201,1202,1204],{},"In the SetFN workspace, you can create a DB with a file called ",[1173,1199,1200],{},".sfn",". Copy an example of a ",[1173,1203,1200],{}," file and give it to an AI such as Claude, GPT, or Gemini, and describe your requirements, for example \"I want to manage the stock of parts and products\". The AI then creates the file.",[1166,1206,1207],{},"Copy the content below, change the requirements in the lower part, and pass it to the AI.",[1209,1210,1215],"pre",{"className":1211,"code":1213,"language":1214},[1212],"language-text","You are an engineer who designs schema files (.sfn) for SetFN, a no-code backend platform.\nA .sfn file is a JSON file with the structure below. \n\n{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"db_name_in_lowercase_english_with_underscores\",\n    \"dbEngine\": \"sqlite\",\n    \"includeClient\": false,\n    \"features\": {\n      \"realtime\": { \"enabled\": false },\n      \"upload\": { \"enabled\": false },\n      \"ai-chat\": { \"enabled\": false }\n    }\n  },\n  \"data\": [\n    {\n      \"table\": { \"name\": \"table_name\", \"cmt\": \"Description of this table\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"column_name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Column description\" },\n        { \"name\": \"number_column\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    }\n  ]\n}\n\nFor the column type, use only serial4 (auto-increment PK) / text / int4 (integer) / timestamp.\nAdd notnull, default, unique, index, and cmt to columns as needed.\n\nNow, in this format, design the DB of an \"inventory management system\" for a manufacturer. The requirements are as follows.\n\n- Register parts and manage the current stock quantity of each part.\n- Register products and manage the current stock quantity of each product.\n- One product is assembled from multiple parts. Manage which parts each product needs and how many of each (BOM, bill of materials).\n- Keep a history of inbound and outbound movements of parts and products. In particular, when an event of \"assembling parts to produce a product\" occurs, the parts used at that moment and the quantity of products produced must be tracked together as one event (it must be possible to look up later \"how many parts went into making this product\").\n\nSet the DB name (dbName) to \"inventory_management\".\nDesign it with 4 tables or fewer, practical enough to be used right away in real work.\nOutput only the completed .sfn JSON code without any other explanation.\n","text",[1173,1216,1213],{"__ignoreMap":1217},"",[1166,1219,1220,1221,1224,1225,1228],{},"The following is an example of an AI response created this way. The actual result can differ slightly for each AI and for each run — it does not need to be exactly this content, and a similar structure is enough. However, the result must start with ",[1173,1222,1223],{},"{"," and end with ",[1173,1226,1227],{},"}"," without any other explanation so that you can paste it into the editor as it is.",[1209,1230,1234],{"className":1231,"code":1232,"language":1233,"meta":1217,"style":1217},"language-json shiki shiki-themes github-light github-dark monokai","{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"inventory_management\",\n    \"dbEngine\": \"sqlite\",\n    \"includeClient\": false,\n    \"features\": {\n      \"realtime\": { \"enabled\": false },\n      \"upload\": { \"enabled\": false },\n      \"ai-chat\": { \"enabled\": false }\n    }\n  },\n  \"data\": [\n    {\n      \"table\": { \"name\": \"parts\", \"cmt\": \"Parts master. Any member can view/register/edit; only administrators can delete\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"part_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"Part code\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Part name\" },\n        { \"name\": \"spec\", \"type\": \"text\", \"cmt\": \"Specification (e.g. M2, 220V/50Hz). Even with the same name, register a separate part_code if the specification differs\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"Part category (electronic parts/mechanical parts/packaging materials, etc.)\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"Unit\" },\n        { \"name\": \"unit_cost\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Unit cost\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Current stock\" },\n        { \"name\": \"safety_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Safety stock (reorder point)\" },\n        { \"name\": \"supplier\", \"type\": \"text\", \"cmt\": \"Supplier\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"Display name of the member who last registered/edited it\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"products\", \"cmt\": \"Products master. Any member can view/register/edit; only administrators can delete\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"Product code\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Product name\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"Product category\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"Unit\" },\n        { \"name\": \"price\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Selling price\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Current stock\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"Display name of the member who last registered/edited it\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"bom\", \"cmt\": \"Bill of materials per product (single level). A unique constraint on bom_key (product_id:part_id) prevents the same part from being registered twice for the same product\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"part_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"qty_per_unit\", \"type\": \"int4\", \"notnull\": true, \"default\": \"1\", \"cmt\": \"Quantity of the part required to make 1 unit of the product\" },\n        { \"name\": \"bom_key\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"Combination of product_id:part_id. Used to prevent duplicate registration\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"Display name of the member who registered it\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"stock_transactions\", \"cmt\": \"Unified history of inbound/outbound movements and assembly. item_type=part|product, tx_type=입고|출고|조립사용|조립생산 (inbound|outbound|assembly use|assembly production). One assembly production event consists of multiple assembly use records (parts consumed) + 1 assembly production record (product increased) that share the same batch_id, so you can track which parts were used for a product and how many\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"item_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"part | product\" },\n        { \"name\": \"item_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true, \"cmt\": \"parts.id or products.id\" },\n        { \"name\": \"item_name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Snapshot of the item name at the time of registration\" },\n        { \"name\": \"tx_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"입고 (inbound) | 출고 (outbound) | 조립사용 (assembly use) | 조립생산 (assembly production)\" },\n        { \"name\": \"reason\", \"type\": \"text\", \"cmt\": \"Reason for the inbound/outbound movement. Left empty for assembly use/assembly production because tx_type itself is the reason\" },\n        { \"name\": \"qty\", \"type\": \"int4\", \"notnull\": true, \"cmt\": \"Always positive. The direction is determined by tx_type\" },\n        { \"name\": \"batch_id\", \"type\": \"text\", \"index\": true, \"cmt\": \"ID that groups an assembly production event. Empty for simple inbound/outbound movements\" },\n        { \"name\": \"note\", \"type\": \"text\", \"cmt\": \"Note\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"Display name of the member who registered it\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true, \"roles\": [\"admin\"] },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    }\n  ]\n}\n","json",[1173,1235,1236,1245,1262,1275,1284,1297,1310,1324,1332,1351,1367,1384,1390,1396,1405,1411,1439,1447,1492,1542,1580,1611,1642,1690,1739,1786,1833,1864,1903,1934,1966,1972,1980,2006,2014,2030,2046,2062,2078,2106,2112,2118,2124,2129,2154,2161,2198,2245,2283,2313,2358,2405,2450,2487,2516,2545,2550,2557,2580,2587,2602,2617,2632,2647,2670,2675,2680,2685,2690,2715,2722,2759,2797,2835,2883,2930,2967,2997,3026,3031,3038,3061,3068,3083,3098,3113,3128,3151,3156,3161,3166,3171,3196,3203,3240,3279,3326,3365,3404,3435,3474,3513,3544,3581,3610,3639,3644,3651,3674,3681,3696,3711,3726,3750,3773,3778,3783,3788,3794],{"__ignoreMap":1217},[1237,1238,1241],"span",{"class":1239,"line":1240},"line",1,[1237,1242,1244],{"class":1243},"sMOD_","{\n",[1237,1246,1248,1252,1255,1259],{"class":1239,"line":1247},2,[1237,1249,1251],{"class":1250},"s-m8C","  \"content-type\"",[1237,1253,1254],{"class":1243},": ",[1237,1256,1258],{"class":1257},"sCZoN","\"application/setfn-schema\"",[1237,1260,1261],{"class":1243},",\n",[1237,1263,1265,1268,1270,1273],{"class":1239,"line":1264},3,[1237,1266,1267],{"class":1250},"  \"dbType\"",[1237,1269,1254],{"class":1243},[1237,1271,1272],{"class":1257},"\"sqlite3\"",[1237,1274,1261],{"class":1243},[1237,1276,1278,1281],{"class":1239,"line":1277},4,[1237,1279,1280],{"class":1250},"  \"apiBuild\"",[1237,1282,1283],{"class":1243},": {\n",[1237,1285,1287,1290,1292,1295],{"class":1239,"line":1286},5,[1237,1288,1289],{"class":1250},"    \"dbName\"",[1237,1291,1254],{"class":1243},[1237,1293,1294],{"class":1257},"\"inventory_management\"",[1237,1296,1261],{"class":1243},[1237,1298,1300,1303,1305,1308],{"class":1239,"line":1299},6,[1237,1301,1302],{"class":1250},"    \"dbEngine\"",[1237,1304,1254],{"class":1243},[1237,1306,1307],{"class":1257},"\"sqlite\"",[1237,1309,1261],{"class":1243},[1237,1311,1313,1316,1318,1322],{"class":1239,"line":1312},7,[1237,1314,1315],{"class":1250},"    \"includeClient\"",[1237,1317,1254],{"class":1243},[1237,1319,1321],{"class":1320},"s7F3e","false",[1237,1323,1261],{"class":1243},[1237,1325,1327,1330],{"class":1239,"line":1326},8,[1237,1328,1329],{"class":1250},"    \"features\"",[1237,1331,1283],{"class":1243},[1237,1333,1335,1338,1341,1344,1346,1348],{"class":1239,"line":1334},9,[1237,1336,1337],{"class":1250},"      \"realtime\"",[1237,1339,1340],{"class":1243},": { ",[1237,1342,1343],{"class":1250},"\"enabled\"",[1237,1345,1254],{"class":1243},[1237,1347,1321],{"class":1320},[1237,1349,1350],{"class":1243}," },\n",[1237,1352,1354,1357,1359,1361,1363,1365],{"class":1239,"line":1353},10,[1237,1355,1356],{"class":1250},"      \"upload\"",[1237,1358,1340],{"class":1243},[1237,1360,1343],{"class":1250},[1237,1362,1254],{"class":1243},[1237,1364,1321],{"class":1320},[1237,1366,1350],{"class":1243},[1237,1368,1370,1373,1375,1377,1379,1381],{"class":1239,"line":1369},11,[1237,1371,1372],{"class":1250},"      \"ai-chat\"",[1237,1374,1340],{"class":1243},[1237,1376,1343],{"class":1250},[1237,1378,1254],{"class":1243},[1237,1380,1321],{"class":1320},[1237,1382,1383],{"class":1243}," }\n",[1237,1385,1387],{"class":1239,"line":1386},12,[1237,1388,1389],{"class":1243},"    }\n",[1237,1391,1393],{"class":1239,"line":1392},13,[1237,1394,1395],{"class":1243},"  },\n",[1237,1397,1399,1402],{"class":1239,"line":1398},14,[1237,1400,1401],{"class":1250},"  \"data\"",[1237,1403,1404],{"class":1243},": [\n",[1237,1406,1408],{"class":1239,"line":1407},15,[1237,1409,1410],{"class":1243},"    {\n",[1237,1412,1414,1417,1419,1422,1424,1427,1429,1432,1434,1437],{"class":1239,"line":1413},16,[1237,1415,1416],{"class":1250},"      \"table\"",[1237,1418,1340],{"class":1243},[1237,1420,1421],{"class":1250},"\"name\"",[1237,1423,1254],{"class":1243},[1237,1425,1426],{"class":1257},"\"parts\"",[1237,1428,1176],{"class":1243},[1237,1430,1431],{"class":1250},"\"cmt\"",[1237,1433,1254],{"class":1243},[1237,1435,1436],{"class":1257},"\"Parts master. Any member can view/register/edit; only administrators can delete\"",[1237,1438,1350],{"class":1243},[1237,1440,1442,1445],{"class":1239,"line":1441},17,[1237,1443,1444],{"class":1250},"      \"columns\"",[1237,1446,1404],{"class":1243},[1237,1448,1450,1453,1455,1457,1460,1462,1465,1467,1470,1472,1475,1477,1480,1482,1485,1487,1490],{"class":1239,"line":1449},18,[1237,1451,1452],{"class":1243},"        { ",[1237,1454,1421],{"class":1250},[1237,1456,1254],{"class":1243},[1237,1458,1459],{"class":1257},"\"id\"",[1237,1461,1176],{"class":1243},[1237,1463,1464],{"class":1250},"\"type\"",[1237,1466,1254],{"class":1243},[1237,1468,1469],{"class":1257},"\"serial4\"",[1237,1471,1176],{"class":1243},[1237,1473,1474],{"class":1250},"\"primary\"",[1237,1476,1254],{"class":1243},[1237,1478,1479],{"class":1320},"true",[1237,1481,1176],{"class":1243},[1237,1483,1484],{"class":1250},"\"default\"",[1237,1486,1254],{"class":1243},[1237,1488,1489],{"class":1257},"\"auto_increment\"",[1237,1491,1350],{"class":1243},[1237,1493,1495,1497,1499,1501,1504,1506,1508,1510,1513,1515,1518,1520,1522,1524,1527,1529,1531,1533,1535,1537,1540],{"class":1239,"line":1494},19,[1237,1496,1452],{"class":1243},[1237,1498,1421],{"class":1250},[1237,1500,1254],{"class":1243},[1237,1502,1503],{"class":1257},"\"part_code\"",[1237,1505,1176],{"class":1243},[1237,1507,1464],{"class":1250},[1237,1509,1254],{"class":1243},[1237,1511,1512],{"class":1257},"\"text\"",[1237,1514,1176],{"class":1243},[1237,1516,1517],{"class":1250},"\"notnull\"",[1237,1519,1254],{"class":1243},[1237,1521,1479],{"class":1320},[1237,1523,1176],{"class":1243},[1237,1525,1526],{"class":1250},"\"unique\"",[1237,1528,1254],{"class":1243},[1237,1530,1479],{"class":1320},[1237,1532,1176],{"class":1243},[1237,1534,1431],{"class":1250},[1237,1536,1254],{"class":1243},[1237,1538,1539],{"class":1257},"\"Part code\"",[1237,1541,1350],{"class":1243},[1237,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575,1578],{"class":1239,"line":1544},20,[1237,1546,1452],{"class":1243},[1237,1548,1421],{"class":1250},[1237,1550,1254],{"class":1243},[1237,1552,1421],{"class":1257},[1237,1554,1176],{"class":1243},[1237,1556,1464],{"class":1250},[1237,1558,1254],{"class":1243},[1237,1560,1512],{"class":1257},[1237,1562,1176],{"class":1243},[1237,1564,1517],{"class":1250},[1237,1566,1254],{"class":1243},[1237,1568,1479],{"class":1320},[1237,1570,1176],{"class":1243},[1237,1572,1431],{"class":1250},[1237,1574,1254],{"class":1243},[1237,1576,1577],{"class":1257},"\"Part name\"",[1237,1579,1350],{"class":1243},[1237,1581,1583,1585,1587,1589,1592,1594,1596,1598,1600,1602,1604,1606,1609],{"class":1239,"line":1582},21,[1237,1584,1452],{"class":1243},[1237,1586,1421],{"class":1250},[1237,1588,1254],{"class":1243},[1237,1590,1591],{"class":1257},"\"spec\"",[1237,1593,1176],{"class":1243},[1237,1595,1464],{"class":1250},[1237,1597,1254],{"class":1243},[1237,1599,1512],{"class":1257},[1237,1601,1176],{"class":1243},[1237,1603,1431],{"class":1250},[1237,1605,1254],{"class":1243},[1237,1607,1608],{"class":1257},"\"Specification (e.g. M2, 220V/50Hz). Even with the same name, register a separate part_code if the specification differs\"",[1237,1610,1350],{"class":1243},[1237,1612,1614,1616,1618,1620,1623,1625,1627,1629,1631,1633,1635,1637,1640],{"class":1239,"line":1613},22,[1237,1615,1452],{"class":1243},[1237,1617,1421],{"class":1250},[1237,1619,1254],{"class":1243},[1237,1621,1622],{"class":1257},"\"category\"",[1237,1624,1176],{"class":1243},[1237,1626,1464],{"class":1250},[1237,1628,1254],{"class":1243},[1237,1630,1512],{"class":1257},[1237,1632,1176],{"class":1243},[1237,1634,1431],{"class":1250},[1237,1636,1254],{"class":1243},[1237,1638,1639],{"class":1257},"\"Part category (electronic parts/mechanical parts/packaging materials, etc.)\"",[1237,1641,1350],{"class":1243},[1237,1643,1645,1647,1649,1651,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674,1676,1679,1681,1683,1685,1688],{"class":1239,"line":1644},23,[1237,1646,1452],{"class":1243},[1237,1648,1421],{"class":1250},[1237,1650,1254],{"class":1243},[1237,1652,1653],{"class":1257},"\"unit\"",[1237,1655,1176],{"class":1243},[1237,1657,1464],{"class":1250},[1237,1659,1254],{"class":1243},[1237,1661,1512],{"class":1257},[1237,1663,1176],{"class":1243},[1237,1665,1517],{"class":1250},[1237,1667,1254],{"class":1243},[1237,1669,1479],{"class":1320},[1237,1671,1176],{"class":1243},[1237,1673,1484],{"class":1250},[1237,1675,1254],{"class":1243},[1237,1677,1678],{"class":1257},"\"EA\"",[1237,1680,1176],{"class":1243},[1237,1682,1431],{"class":1250},[1237,1684,1254],{"class":1243},[1237,1686,1687],{"class":1257},"\"Unit\"",[1237,1689,1350],{"class":1243},[1237,1691,1693,1695,1697,1699,1702,1704,1706,1708,1711,1713,1715,1717,1719,1721,1723,1725,1728,1730,1732,1734,1737],{"class":1239,"line":1692},24,[1237,1694,1452],{"class":1243},[1237,1696,1421],{"class":1250},[1237,1698,1254],{"class":1243},[1237,1700,1701],{"class":1257},"\"unit_cost\"",[1237,1703,1176],{"class":1243},[1237,1705,1464],{"class":1250},[1237,1707,1254],{"class":1243},[1237,1709,1710],{"class":1257},"\"int4\"",[1237,1712,1176],{"class":1243},[1237,1714,1517],{"class":1250},[1237,1716,1254],{"class":1243},[1237,1718,1479],{"class":1320},[1237,1720,1176],{"class":1243},[1237,1722,1484],{"class":1250},[1237,1724,1254],{"class":1243},[1237,1726,1727],{"class":1257},"\"0\"",[1237,1729,1176],{"class":1243},[1237,1731,1431],{"class":1250},[1237,1733,1254],{"class":1243},[1237,1735,1736],{"class":1257},"\"Unit cost\"",[1237,1738,1350],{"class":1243},[1237,1740,1742,1744,1746,1748,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1784],{"class":1239,"line":1741},25,[1237,1743,1452],{"class":1243},[1237,1745,1421],{"class":1250},[1237,1747,1254],{"class":1243},[1237,1749,1750],{"class":1257},"\"current_stock\"",[1237,1752,1176],{"class":1243},[1237,1754,1464],{"class":1250},[1237,1756,1254],{"class":1243},[1237,1758,1710],{"class":1257},[1237,1760,1176],{"class":1243},[1237,1762,1517],{"class":1250},[1237,1764,1254],{"class":1243},[1237,1766,1479],{"class":1320},[1237,1768,1176],{"class":1243},[1237,1770,1484],{"class":1250},[1237,1772,1254],{"class":1243},[1237,1774,1727],{"class":1257},[1237,1776,1176],{"class":1243},[1237,1778,1431],{"class":1250},[1237,1780,1254],{"class":1243},[1237,1782,1783],{"class":1257},"\"Current stock\"",[1237,1785,1350],{"class":1243},[1237,1787,1789,1791,1793,1795,1798,1800,1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1831],{"class":1239,"line":1788},26,[1237,1790,1452],{"class":1243},[1237,1792,1421],{"class":1250},[1237,1794,1254],{"class":1243},[1237,1796,1797],{"class":1257},"\"safety_stock\"",[1237,1799,1176],{"class":1243},[1237,1801,1464],{"class":1250},[1237,1803,1254],{"class":1243},[1237,1805,1710],{"class":1257},[1237,1807,1176],{"class":1243},[1237,1809,1517],{"class":1250},[1237,1811,1254],{"class":1243},[1237,1813,1479],{"class":1320},[1237,1815,1176],{"class":1243},[1237,1817,1484],{"class":1250},[1237,1819,1254],{"class":1243},[1237,1821,1727],{"class":1257},[1237,1823,1176],{"class":1243},[1237,1825,1431],{"class":1250},[1237,1827,1254],{"class":1243},[1237,1829,1830],{"class":1257},"\"Safety stock (reorder point)\"",[1237,1832,1350],{"class":1243},[1237,1834,1836,1838,1840,1842,1845,1847,1849,1851,1853,1855,1857,1859,1862],{"class":1239,"line":1835},27,[1237,1837,1452],{"class":1243},[1237,1839,1421],{"class":1250},[1237,1841,1254],{"class":1243},[1237,1843,1844],{"class":1257},"\"supplier\"",[1237,1846,1176],{"class":1243},[1237,1848,1464],{"class":1250},[1237,1850,1254],{"class":1243},[1237,1852,1512],{"class":1257},[1237,1854,1176],{"class":1243},[1237,1856,1431],{"class":1250},[1237,1858,1254],{"class":1243},[1237,1860,1861],{"class":1257},"\"Supplier\"",[1237,1863,1350],{"class":1243},[1237,1865,1867,1869,1871,1873,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894,1897,1899,1901],{"class":1239,"line":1866},28,[1237,1868,1452],{"class":1243},[1237,1870,1421],{"class":1250},[1237,1872,1254],{"class":1243},[1237,1874,1875],{"class":1257},"\"_user_id\"",[1237,1877,1176],{"class":1243},[1237,1879,1464],{"class":1250},[1237,1881,1254],{"class":1243},[1237,1883,1710],{"class":1257},[1237,1885,1176],{"class":1243},[1237,1887,1517],{"class":1250},[1237,1889,1254],{"class":1243},[1237,1891,1479],{"class":1320},[1237,1893,1176],{"class":1243},[1237,1895,1896],{"class":1250},"\"index\"",[1237,1898,1254],{"class":1243},[1237,1900,1479],{"class":1320},[1237,1902,1350],{"class":1243},[1237,1904,1906,1908,1910,1912,1915,1917,1919,1921,1923,1925,1927,1929,1932],{"class":1239,"line":1905},29,[1237,1907,1452],{"class":1243},[1237,1909,1421],{"class":1250},[1237,1911,1254],{"class":1243},[1237,1913,1914],{"class":1257},"\"_nick\"",[1237,1916,1176],{"class":1243},[1237,1918,1464],{"class":1250},[1237,1920,1254],{"class":1243},[1237,1922,1512],{"class":1257},[1237,1924,1176],{"class":1243},[1237,1926,1431],{"class":1250},[1237,1928,1254],{"class":1243},[1237,1930,1931],{"class":1257},"\"Display name of the member who last registered/edited it\"",[1237,1933,1350],{"class":1243},[1237,1935,1937,1939,1941,1943,1946,1948,1950,1952,1955,1957,1959,1961,1964],{"class":1239,"line":1936},30,[1237,1938,1452],{"class":1243},[1237,1940,1421],{"class":1250},[1237,1942,1254],{"class":1243},[1237,1944,1945],{"class":1257},"\"_created_at\"",[1237,1947,1176],{"class":1243},[1237,1949,1464],{"class":1250},[1237,1951,1254],{"class":1243},[1237,1953,1954],{"class":1257},"\"timestamp\"",[1237,1956,1176],{"class":1243},[1237,1958,1484],{"class":1250},[1237,1960,1254],{"class":1243},[1237,1962,1963],{"class":1257},"\"now()\"",[1237,1965,1383],{"class":1243},[1237,1967,1969],{"class":1239,"line":1968},31,[1237,1970,1971],{"class":1243},"      ],\n",[1237,1973,1975,1978],{"class":1239,"line":1974},32,[1237,1976,1977],{"class":1250},"      \"permissions\"",[1237,1979,1283],{"class":1243},[1237,1981,1983,1986,1988,1991,1993,1995,1997,2000,2002,2004],{"class":1239,"line":1982},33,[1237,1984,1985],{"class":1250},"        \"security\"",[1237,1987,1340],{"class":1243},[1237,1989,1990],{"class":1250},"\"login\"",[1237,1992,1254],{"class":1243},[1237,1994,1479],{"class":1320},[1237,1996,1176],{"class":1243},[1237,1998,1999],{"class":1250},"\"ownerColumn\"",[1237,2001,1254],{"class":1243},[1237,2003,1875],{"class":1257},[1237,2005,1350],{"class":1243},[1237,2007,2009,2012],{"class":1239,"line":2008},34,[1237,2010,2011],{"class":1250},"        \"ops\"",[1237,2013,1283],{"class":1243},[1237,2015,2017,2020,2022,2024,2026,2028],{"class":1239,"line":2016},35,[1237,2018,2019],{"class":1250},"          \"list\"",[1237,2021,1340],{"class":1243},[1237,2023,1990],{"class":1250},[1237,2025,1254],{"class":1243},[1237,2027,1479],{"class":1320},[1237,2029,1350],{"class":1243},[1237,2031,2033,2036,2038,2040,2042,2044],{"class":1239,"line":2032},36,[1237,2034,2035],{"class":1250},"          \"view\"",[1237,2037,1340],{"class":1243},[1237,2039,1990],{"class":1250},[1237,2041,1254],{"class":1243},[1237,2043,1479],{"class":1320},[1237,2045,1350],{"class":1243},[1237,2047,2049,2052,2054,2056,2058,2060],{"class":1239,"line":2048},37,[1237,2050,2051],{"class":1250},"          \"create\"",[1237,2053,1340],{"class":1243},[1237,2055,1990],{"class":1250},[1237,2057,1254],{"class":1243},[1237,2059,1479],{"class":1320},[1237,2061,1350],{"class":1243},[1237,2063,2065,2068,2070,2072,2074,2076],{"class":1239,"line":2064},38,[1237,2066,2067],{"class":1250},"          \"update\"",[1237,2069,1340],{"class":1243},[1237,2071,1990],{"class":1250},[1237,2073,1254],{"class":1243},[1237,2075,1479],{"class":1320},[1237,2077,1350],{"class":1243},[1237,2079,2081,2084,2086,2088,2090,2092,2094,2097,2100,2103],{"class":1239,"line":2080},39,[1237,2082,2083],{"class":1250},"          \"delete\"",[1237,2085,1340],{"class":1243},[1237,2087,1990],{"class":1250},[1237,2089,1254],{"class":1243},[1237,2091,1479],{"class":1320},[1237,2093,1176],{"class":1243},[1237,2095,2096],{"class":1250},"\"roles\"",[1237,2098,2099],{"class":1243},": [",[1237,2101,2102],{"class":1257},"\"admin\"",[1237,2104,2105],{"class":1243},"] }\n",[1237,2107,2109],{"class":1239,"line":2108},40,[1237,2110,2111],{"class":1243},"        }\n",[1237,2113,2115],{"class":1239,"line":2114},41,[1237,2116,2117],{"class":1243},"      }\n",[1237,2119,2121],{"class":1239,"line":2120},42,[1237,2122,2123],{"class":1243},"    },\n",[1237,2125,2127],{"class":1239,"line":2126},43,[1237,2128,1410],{"class":1243},[1237,2130,2132,2134,2136,2138,2140,2143,2145,2147,2149,2152],{"class":1239,"line":2131},44,[1237,2133,1416],{"class":1250},[1237,2135,1340],{"class":1243},[1237,2137,1421],{"class":1250},[1237,2139,1254],{"class":1243},[1237,2141,2142],{"class":1257},"\"products\"",[1237,2144,1176],{"class":1243},[1237,2146,1431],{"class":1250},[1237,2148,1254],{"class":1243},[1237,2150,2151],{"class":1257},"\"Products master. Any member can view/register/edit; only administrators can delete\"",[1237,2153,1350],{"class":1243},[1237,2155,2157,2159],{"class":1239,"line":2156},45,[1237,2158,1444],{"class":1250},[1237,2160,1404],{"class":1243},[1237,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196],{"class":1239,"line":2163},46,[1237,2165,1452],{"class":1243},[1237,2167,1421],{"class":1250},[1237,2169,1254],{"class":1243},[1237,2171,1459],{"class":1257},[1237,2173,1176],{"class":1243},[1237,2175,1464],{"class":1250},[1237,2177,1254],{"class":1243},[1237,2179,1469],{"class":1257},[1237,2181,1176],{"class":1243},[1237,2183,1474],{"class":1250},[1237,2185,1254],{"class":1243},[1237,2187,1479],{"class":1320},[1237,2189,1176],{"class":1243},[1237,2191,1484],{"class":1250},[1237,2193,1254],{"class":1243},[1237,2195,1489],{"class":1257},[1237,2197,1350],{"class":1243},[1237,2199,2201,2203,2205,2207,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2243],{"class":1239,"line":2200},47,[1237,2202,1452],{"class":1243},[1237,2204,1421],{"class":1250},[1237,2206,1254],{"class":1243},[1237,2208,2209],{"class":1257},"\"product_code\"",[1237,2211,1176],{"class":1243},[1237,2213,1464],{"class":1250},[1237,2215,1254],{"class":1243},[1237,2217,1512],{"class":1257},[1237,2219,1176],{"class":1243},[1237,2221,1517],{"class":1250},[1237,2223,1254],{"class":1243},[1237,2225,1479],{"class":1320},[1237,2227,1176],{"class":1243},[1237,2229,1526],{"class":1250},[1237,2231,1254],{"class":1243},[1237,2233,1479],{"class":1320},[1237,2235,1176],{"class":1243},[1237,2237,1431],{"class":1250},[1237,2239,1254],{"class":1243},[1237,2241,2242],{"class":1257},"\"Product code\"",[1237,2244,1350],{"class":1243},[1237,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2281],{"class":1239,"line":2247},48,[1237,2249,1452],{"class":1243},[1237,2251,1421],{"class":1250},[1237,2253,1254],{"class":1243},[1237,2255,1421],{"class":1257},[1237,2257,1176],{"class":1243},[1237,2259,1464],{"class":1250},[1237,2261,1254],{"class":1243},[1237,2263,1512],{"class":1257},[1237,2265,1176],{"class":1243},[1237,2267,1517],{"class":1250},[1237,2269,1254],{"class":1243},[1237,2271,1479],{"class":1320},[1237,2273,1176],{"class":1243},[1237,2275,1431],{"class":1250},[1237,2277,1254],{"class":1243},[1237,2279,2280],{"class":1257},"\"Product name\"",[1237,2282,1350],{"class":1243},[1237,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306,2308,2311],{"class":1239,"line":2285},49,[1237,2287,1452],{"class":1243},[1237,2289,1421],{"class":1250},[1237,2291,1254],{"class":1243},[1237,2293,1622],{"class":1257},[1237,2295,1176],{"class":1243},[1237,2297,1464],{"class":1250},[1237,2299,1254],{"class":1243},[1237,2301,1512],{"class":1257},[1237,2303,1176],{"class":1243},[1237,2305,1431],{"class":1250},[1237,2307,1254],{"class":1243},[1237,2309,2310],{"class":1257},"\"Product category\"",[1237,2312,1350],{"class":1243},[1237,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356],{"class":1239,"line":2315},50,[1237,2317,1452],{"class":1243},[1237,2319,1421],{"class":1250},[1237,2321,1254],{"class":1243},[1237,2323,1653],{"class":1257},[1237,2325,1176],{"class":1243},[1237,2327,1464],{"class":1250},[1237,2329,1254],{"class":1243},[1237,2331,1512],{"class":1257},[1237,2333,1176],{"class":1243},[1237,2335,1517],{"class":1250},[1237,2337,1254],{"class":1243},[1237,2339,1479],{"class":1320},[1237,2341,1176],{"class":1243},[1237,2343,1484],{"class":1250},[1237,2345,1254],{"class":1243},[1237,2347,1678],{"class":1257},[1237,2349,1176],{"class":1243},[1237,2351,1431],{"class":1250},[1237,2353,1254],{"class":1243},[1237,2355,1687],{"class":1257},[1237,2357,1350],{"class":1243},[1237,2359,2361,2363,2365,2367,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2403],{"class":1239,"line":2360},51,[1237,2362,1452],{"class":1243},[1237,2364,1421],{"class":1250},[1237,2366,1254],{"class":1243},[1237,2368,2369],{"class":1257},"\"price\"",[1237,2371,1176],{"class":1243},[1237,2373,1464],{"class":1250},[1237,2375,1254],{"class":1243},[1237,2377,1710],{"class":1257},[1237,2379,1176],{"class":1243},[1237,2381,1517],{"class":1250},[1237,2383,1254],{"class":1243},[1237,2385,1479],{"class":1320},[1237,2387,1176],{"class":1243},[1237,2389,1484],{"class":1250},[1237,2391,1254],{"class":1243},[1237,2393,1727],{"class":1257},[1237,2395,1176],{"class":1243},[1237,2397,1431],{"class":1250},[1237,2399,1254],{"class":1243},[1237,2401,2402],{"class":1257},"\"Selling price\"",[1237,2404,1350],{"class":1243},[1237,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448],{"class":1239,"line":2407},52,[1237,2409,1452],{"class":1243},[1237,2411,1421],{"class":1250},[1237,2413,1254],{"class":1243},[1237,2415,1750],{"class":1257},[1237,2417,1176],{"class":1243},[1237,2419,1464],{"class":1250},[1237,2421,1254],{"class":1243},[1237,2423,1710],{"class":1257},[1237,2425,1176],{"class":1243},[1237,2427,1517],{"class":1250},[1237,2429,1254],{"class":1243},[1237,2431,1479],{"class":1320},[1237,2433,1176],{"class":1243},[1237,2435,1484],{"class":1250},[1237,2437,1254],{"class":1243},[1237,2439,1727],{"class":1257},[1237,2441,1176],{"class":1243},[1237,2443,1431],{"class":1250},[1237,2445,1254],{"class":1243},[1237,2447,1783],{"class":1257},[1237,2449,1350],{"class":1243},[1237,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483,2485],{"class":1239,"line":2452},53,[1237,2454,1452],{"class":1243},[1237,2456,1421],{"class":1250},[1237,2458,1254],{"class":1243},[1237,2460,1875],{"class":1257},[1237,2462,1176],{"class":1243},[1237,2464,1464],{"class":1250},[1237,2466,1254],{"class":1243},[1237,2468,1710],{"class":1257},[1237,2470,1176],{"class":1243},[1237,2472,1517],{"class":1250},[1237,2474,1254],{"class":1243},[1237,2476,1479],{"class":1320},[1237,2478,1176],{"class":1243},[1237,2480,1896],{"class":1250},[1237,2482,1254],{"class":1243},[1237,2484,1479],{"class":1320},[1237,2486,1350],{"class":1243},[1237,2488,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512,2514],{"class":1239,"line":2489},54,[1237,2491,1452],{"class":1243},[1237,2493,1421],{"class":1250},[1237,2495,1254],{"class":1243},[1237,2497,1914],{"class":1257},[1237,2499,1176],{"class":1243},[1237,2501,1464],{"class":1250},[1237,2503,1254],{"class":1243},[1237,2505,1512],{"class":1257},[1237,2507,1176],{"class":1243},[1237,2509,1431],{"class":1250},[1237,2511,1254],{"class":1243},[1237,2513,1931],{"class":1257},[1237,2515,1350],{"class":1243},[1237,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543],{"class":1239,"line":2518},55,[1237,2520,1452],{"class":1243},[1237,2522,1421],{"class":1250},[1237,2524,1254],{"class":1243},[1237,2526,1945],{"class":1257},[1237,2528,1176],{"class":1243},[1237,2530,1464],{"class":1250},[1237,2532,1254],{"class":1243},[1237,2534,1954],{"class":1257},[1237,2536,1176],{"class":1243},[1237,2538,1484],{"class":1250},[1237,2540,1254],{"class":1243},[1237,2542,1963],{"class":1257},[1237,2544,1383],{"class":1243},[1237,2546,2548],{"class":1239,"line":2547},56,[1237,2549,1971],{"class":1243},[1237,2551,2553,2555],{"class":1239,"line":2552},57,[1237,2554,1977],{"class":1250},[1237,2556,1283],{"class":1243},[1237,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2578],{"class":1239,"line":2559},58,[1237,2561,1985],{"class":1250},[1237,2563,1340],{"class":1243},[1237,2565,1990],{"class":1250},[1237,2567,1254],{"class":1243},[1237,2569,1479],{"class":1320},[1237,2571,1176],{"class":1243},[1237,2573,1999],{"class":1250},[1237,2575,1254],{"class":1243},[1237,2577,1875],{"class":1257},[1237,2579,1350],{"class":1243},[1237,2581,2583,2585],{"class":1239,"line":2582},59,[1237,2584,2011],{"class":1250},[1237,2586,1283],{"class":1243},[1237,2588,2590,2592,2594,2596,2598,2600],{"class":1239,"line":2589},60,[1237,2591,2019],{"class":1250},[1237,2593,1340],{"class":1243},[1237,2595,1990],{"class":1250},[1237,2597,1254],{"class":1243},[1237,2599,1479],{"class":1320},[1237,2601,1350],{"class":1243},[1237,2603,2605,2607,2609,2611,2613,2615],{"class":1239,"line":2604},61,[1237,2606,2035],{"class":1250},[1237,2608,1340],{"class":1243},[1237,2610,1990],{"class":1250},[1237,2612,1254],{"class":1243},[1237,2614,1479],{"class":1320},[1237,2616,1350],{"class":1243},[1237,2618,2620,2622,2624,2626,2628,2630],{"class":1239,"line":2619},62,[1237,2621,2051],{"class":1250},[1237,2623,1340],{"class":1243},[1237,2625,1990],{"class":1250},[1237,2627,1254],{"class":1243},[1237,2629,1479],{"class":1320},[1237,2631,1350],{"class":1243},[1237,2633,2635,2637,2639,2641,2643,2645],{"class":1239,"line":2634},63,[1237,2636,2067],{"class":1250},[1237,2638,1340],{"class":1243},[1237,2640,1990],{"class":1250},[1237,2642,1254],{"class":1243},[1237,2644,1479],{"class":1320},[1237,2646,1350],{"class":1243},[1237,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668],{"class":1239,"line":2649},64,[1237,2651,2083],{"class":1250},[1237,2653,1340],{"class":1243},[1237,2655,1990],{"class":1250},[1237,2657,1254],{"class":1243},[1237,2659,1479],{"class":1320},[1237,2661,1176],{"class":1243},[1237,2663,2096],{"class":1250},[1237,2665,2099],{"class":1243},[1237,2667,2102],{"class":1257},[1237,2669,2105],{"class":1243},[1237,2671,2673],{"class":1239,"line":2672},65,[1237,2674,2111],{"class":1243},[1237,2676,2678],{"class":1239,"line":2677},66,[1237,2679,2117],{"class":1243},[1237,2681,2683],{"class":1239,"line":2682},67,[1237,2684,2123],{"class":1243},[1237,2686,2688],{"class":1239,"line":2687},68,[1237,2689,1410],{"class":1243},[1237,2691,2693,2695,2697,2699,2701,2704,2706,2708,2710,2713],{"class":1239,"line":2692},69,[1237,2694,1416],{"class":1250},[1237,2696,1340],{"class":1243},[1237,2698,1421],{"class":1250},[1237,2700,1254],{"class":1243},[1237,2702,2703],{"class":1257},"\"bom\"",[1237,2705,1176],{"class":1243},[1237,2707,1431],{"class":1250},[1237,2709,1254],{"class":1243},[1237,2711,2712],{"class":1257},"\"Bill of materials per product (single level). A unique constraint on bom_key (product_id:part_id) prevents the same part from being registered twice for the same product\"",[1237,2714,1350],{"class":1243},[1237,2716,2718,2720],{"class":1239,"line":2717},70,[1237,2719,1444],{"class":1250},[1237,2721,1404],{"class":1243},[1237,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757],{"class":1239,"line":2724},71,[1237,2726,1452],{"class":1243},[1237,2728,1421],{"class":1250},[1237,2730,1254],{"class":1243},[1237,2732,1459],{"class":1257},[1237,2734,1176],{"class":1243},[1237,2736,1464],{"class":1250},[1237,2738,1254],{"class":1243},[1237,2740,1469],{"class":1257},[1237,2742,1176],{"class":1243},[1237,2744,1474],{"class":1250},[1237,2746,1254],{"class":1243},[1237,2748,1479],{"class":1320},[1237,2750,1176],{"class":1243},[1237,2752,1484],{"class":1250},[1237,2754,1254],{"class":1243},[1237,2756,1489],{"class":1257},[1237,2758,1350],{"class":1243},[1237,2760,2762,2764,2766,2768,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795],{"class":1239,"line":2761},72,[1237,2763,1452],{"class":1243},[1237,2765,1421],{"class":1250},[1237,2767,1254],{"class":1243},[1237,2769,2770],{"class":1257},"\"product_id\"",[1237,2772,1176],{"class":1243},[1237,2774,1464],{"class":1250},[1237,2776,1254],{"class":1243},[1237,2778,1710],{"class":1257},[1237,2780,1176],{"class":1243},[1237,2782,1517],{"class":1250},[1237,2784,1254],{"class":1243},[1237,2786,1479],{"class":1320},[1237,2788,1176],{"class":1243},[1237,2790,1896],{"class":1250},[1237,2792,1254],{"class":1243},[1237,2794,1479],{"class":1320},[1237,2796,1350],{"class":1243},[1237,2798,2800,2802,2804,2806,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833],{"class":1239,"line":2799},73,[1237,2801,1452],{"class":1243},[1237,2803,1421],{"class":1250},[1237,2805,1254],{"class":1243},[1237,2807,2808],{"class":1257},"\"part_id\"",[1237,2810,1176],{"class":1243},[1237,2812,1464],{"class":1250},[1237,2814,1254],{"class":1243},[1237,2816,1710],{"class":1257},[1237,2818,1176],{"class":1243},[1237,2820,1517],{"class":1250},[1237,2822,1254],{"class":1243},[1237,2824,1479],{"class":1320},[1237,2826,1176],{"class":1243},[1237,2828,1896],{"class":1250},[1237,2830,1254],{"class":1243},[1237,2832,1479],{"class":1320},[1237,2834,1350],{"class":1243},[1237,2836,2838,2840,2842,2844,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2872,2874,2876,2878,2881],{"class":1239,"line":2837},74,[1237,2839,1452],{"class":1243},[1237,2841,1421],{"class":1250},[1237,2843,1254],{"class":1243},[1237,2845,2846],{"class":1257},"\"qty_per_unit\"",[1237,2848,1176],{"class":1243},[1237,2850,1464],{"class":1250},[1237,2852,1254],{"class":1243},[1237,2854,1710],{"class":1257},[1237,2856,1176],{"class":1243},[1237,2858,1517],{"class":1250},[1237,2860,1254],{"class":1243},[1237,2862,1479],{"class":1320},[1237,2864,1176],{"class":1243},[1237,2866,1484],{"class":1250},[1237,2868,1254],{"class":1243},[1237,2870,2871],{"class":1257},"\"1\"",[1237,2873,1176],{"class":1243},[1237,2875,1431],{"class":1250},[1237,2877,1254],{"class":1243},[1237,2879,2880],{"class":1257},"\"Quantity of the part required to make 1 unit of the product\"",[1237,2882,1350],{"class":1243},[1237,2884,2886,2888,2890,2892,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2928],{"class":1239,"line":2885},75,[1237,2887,1452],{"class":1243},[1237,2889,1421],{"class":1250},[1237,2891,1254],{"class":1243},[1237,2893,2894],{"class":1257},"\"bom_key\"",[1237,2896,1176],{"class":1243},[1237,2898,1464],{"class":1250},[1237,2900,1254],{"class":1243},[1237,2902,1512],{"class":1257},[1237,2904,1176],{"class":1243},[1237,2906,1517],{"class":1250},[1237,2908,1254],{"class":1243},[1237,2910,1479],{"class":1320},[1237,2912,1176],{"class":1243},[1237,2914,1526],{"class":1250},[1237,2916,1254],{"class":1243},[1237,2918,1479],{"class":1320},[1237,2920,1176],{"class":1243},[1237,2922,1431],{"class":1250},[1237,2924,1254],{"class":1243},[1237,2926,2927],{"class":1257},"\"Combination of product_id:part_id. Used to prevent duplicate registration\"",[1237,2929,1350],{"class":1243},[1237,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965],{"class":1239,"line":2932},76,[1237,2934,1452],{"class":1243},[1237,2936,1421],{"class":1250},[1237,2938,1254],{"class":1243},[1237,2940,1875],{"class":1257},[1237,2942,1176],{"class":1243},[1237,2944,1464],{"class":1250},[1237,2946,1254],{"class":1243},[1237,2948,1710],{"class":1257},[1237,2950,1176],{"class":1243},[1237,2952,1517],{"class":1250},[1237,2954,1254],{"class":1243},[1237,2956,1479],{"class":1320},[1237,2958,1176],{"class":1243},[1237,2960,1896],{"class":1250},[1237,2962,1254],{"class":1243},[1237,2964,1479],{"class":1320},[1237,2966,1350],{"class":1243},[1237,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2995],{"class":1239,"line":2969},77,[1237,2971,1452],{"class":1243},[1237,2973,1421],{"class":1250},[1237,2975,1254],{"class":1243},[1237,2977,1914],{"class":1257},[1237,2979,1176],{"class":1243},[1237,2981,1464],{"class":1250},[1237,2983,1254],{"class":1243},[1237,2985,1512],{"class":1257},[1237,2987,1176],{"class":1243},[1237,2989,1431],{"class":1250},[1237,2991,1254],{"class":1243},[1237,2993,2994],{"class":1257},"\"Display name of the member who registered it\"",[1237,2996,1350],{"class":1243},[1237,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024],{"class":1239,"line":2999},78,[1237,3001,1452],{"class":1243},[1237,3003,1421],{"class":1250},[1237,3005,1254],{"class":1243},[1237,3007,1945],{"class":1257},[1237,3009,1176],{"class":1243},[1237,3011,1464],{"class":1250},[1237,3013,1254],{"class":1243},[1237,3015,1954],{"class":1257},[1237,3017,1176],{"class":1243},[1237,3019,1484],{"class":1250},[1237,3021,1254],{"class":1243},[1237,3023,1963],{"class":1257},[1237,3025,1383],{"class":1243},[1237,3027,3029],{"class":1239,"line":3028},79,[1237,3030,1971],{"class":1243},[1237,3032,3034,3036],{"class":1239,"line":3033},80,[1237,3035,1977],{"class":1250},[1237,3037,1283],{"class":1243},[1237,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059],{"class":1239,"line":3040},81,[1237,3042,1985],{"class":1250},[1237,3044,1340],{"class":1243},[1237,3046,1990],{"class":1250},[1237,3048,1254],{"class":1243},[1237,3050,1479],{"class":1320},[1237,3052,1176],{"class":1243},[1237,3054,1999],{"class":1250},[1237,3056,1254],{"class":1243},[1237,3058,1875],{"class":1257},[1237,3060,1350],{"class":1243},[1237,3062,3064,3066],{"class":1239,"line":3063},82,[1237,3065,2011],{"class":1250},[1237,3067,1283],{"class":1243},[1237,3069,3071,3073,3075,3077,3079,3081],{"class":1239,"line":3070},83,[1237,3072,2019],{"class":1250},[1237,3074,1340],{"class":1243},[1237,3076,1990],{"class":1250},[1237,3078,1254],{"class":1243},[1237,3080,1479],{"class":1320},[1237,3082,1350],{"class":1243},[1237,3084,3086,3088,3090,3092,3094,3096],{"class":1239,"line":3085},84,[1237,3087,2035],{"class":1250},[1237,3089,1340],{"class":1243},[1237,3091,1990],{"class":1250},[1237,3093,1254],{"class":1243},[1237,3095,1479],{"class":1320},[1237,3097,1350],{"class":1243},[1237,3099,3101,3103,3105,3107,3109,3111],{"class":1239,"line":3100},85,[1237,3102,2051],{"class":1250},[1237,3104,1340],{"class":1243},[1237,3106,1990],{"class":1250},[1237,3108,1254],{"class":1243},[1237,3110,1479],{"class":1320},[1237,3112,1350],{"class":1243},[1237,3114,3116,3118,3120,3122,3124,3126],{"class":1239,"line":3115},86,[1237,3117,2067],{"class":1250},[1237,3119,1340],{"class":1243},[1237,3121,1990],{"class":1250},[1237,3123,1254],{"class":1243},[1237,3125,1479],{"class":1320},[1237,3127,1350],{"class":1243},[1237,3129,3131,3133,3135,3137,3139,3141,3143,3145,3147,3149],{"class":1239,"line":3130},87,[1237,3132,2083],{"class":1250},[1237,3134,1340],{"class":1243},[1237,3136,1990],{"class":1250},[1237,3138,1254],{"class":1243},[1237,3140,1479],{"class":1320},[1237,3142,1176],{"class":1243},[1237,3144,2096],{"class":1250},[1237,3146,2099],{"class":1243},[1237,3148,2102],{"class":1257},[1237,3150,2105],{"class":1243},[1237,3152,3154],{"class":1239,"line":3153},88,[1237,3155,2111],{"class":1243},[1237,3157,3159],{"class":1239,"line":3158},89,[1237,3160,2117],{"class":1243},[1237,3162,3164],{"class":1239,"line":3163},90,[1237,3165,2123],{"class":1243},[1237,3167,3169],{"class":1239,"line":3168},91,[1237,3170,1410],{"class":1243},[1237,3172,3174,3176,3178,3180,3182,3185,3187,3189,3191,3194],{"class":1239,"line":3173},92,[1237,3175,1416],{"class":1250},[1237,3177,1340],{"class":1243},[1237,3179,1421],{"class":1250},[1237,3181,1254],{"class":1243},[1237,3183,3184],{"class":1257},"\"stock_transactions\"",[1237,3186,1176],{"class":1243},[1237,3188,1431],{"class":1250},[1237,3190,1254],{"class":1243},[1237,3192,3193],{"class":1257},"\"Unified history of inbound/outbound movements and assembly. item_type=part|product, tx_type=입고|출고|조립사용|조립생산 (inbound|outbound|assembly use|assembly production). One assembly production event consists of multiple assembly use records (parts consumed) + 1 assembly production record (product increased) that share the same batch_id, so you can track which parts were used for a product and how many\"",[1237,3195,1350],{"class":1243},[1237,3197,3199,3201],{"class":1239,"line":3198},93,[1237,3200,1444],{"class":1250},[1237,3202,1404],{"class":1243},[1237,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238],{"class":1239,"line":3205},94,[1237,3207,1452],{"class":1243},[1237,3209,1421],{"class":1250},[1237,3211,1254],{"class":1243},[1237,3213,1459],{"class":1257},[1237,3215,1176],{"class":1243},[1237,3217,1464],{"class":1250},[1237,3219,1254],{"class":1243},[1237,3221,1469],{"class":1257},[1237,3223,1176],{"class":1243},[1237,3225,1474],{"class":1250},[1237,3227,1254],{"class":1243},[1237,3229,1479],{"class":1320},[1237,3231,1176],{"class":1243},[1237,3233,1484],{"class":1250},[1237,3235,1254],{"class":1243},[1237,3237,1489],{"class":1257},[1237,3239,1350],{"class":1243},[1237,3241,3243,3245,3247,3249,3252,3254,3256,3258,3260,3262,3264,3266,3268,3270,3272,3274,3277],{"class":1239,"line":3242},95,[1237,3244,1452],{"class":1243},[1237,3246,1421],{"class":1250},[1237,3248,1254],{"class":1243},[1237,3250,3251],{"class":1257},"\"item_type\"",[1237,3253,1176],{"class":1243},[1237,3255,1464],{"class":1250},[1237,3257,1254],{"class":1243},[1237,3259,1512],{"class":1257},[1237,3261,1176],{"class":1243},[1237,3263,1517],{"class":1250},[1237,3265,1254],{"class":1243},[1237,3267,1479],{"class":1320},[1237,3269,1176],{"class":1243},[1237,3271,1431],{"class":1250},[1237,3273,1254],{"class":1243},[1237,3275,3276],{"class":1257},"\"part | product\"",[1237,3278,1350],{"class":1243},[1237,3280,3282,3284,3286,3288,3291,3293,3295,3297,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3324],{"class":1239,"line":3281},96,[1237,3283,1452],{"class":1243},[1237,3285,1421],{"class":1250},[1237,3287,1254],{"class":1243},[1237,3289,3290],{"class":1257},"\"item_id\"",[1237,3292,1176],{"class":1243},[1237,3294,1464],{"class":1250},[1237,3296,1254],{"class":1243},[1237,3298,1710],{"class":1257},[1237,3300,1176],{"class":1243},[1237,3302,1517],{"class":1250},[1237,3304,1254],{"class":1243},[1237,3306,1479],{"class":1320},[1237,3308,1176],{"class":1243},[1237,3310,1896],{"class":1250},[1237,3312,1254],{"class":1243},[1237,3314,1479],{"class":1320},[1237,3316,1176],{"class":1243},[1237,3318,1431],{"class":1250},[1237,3320,1254],{"class":1243},[1237,3322,3323],{"class":1257},"\"parts.id or products.id\"",[1237,3325,1350],{"class":1243},[1237,3327,3329,3331,3333,3335,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358,3360,3363],{"class":1239,"line":3328},97,[1237,3330,1452],{"class":1243},[1237,3332,1421],{"class":1250},[1237,3334,1254],{"class":1243},[1237,3336,3337],{"class":1257},"\"item_name\"",[1237,3339,1176],{"class":1243},[1237,3341,1464],{"class":1250},[1237,3343,1254],{"class":1243},[1237,3345,1512],{"class":1257},[1237,3347,1176],{"class":1243},[1237,3349,1517],{"class":1250},[1237,3351,1254],{"class":1243},[1237,3353,1479],{"class":1320},[1237,3355,1176],{"class":1243},[1237,3357,1431],{"class":1250},[1237,3359,1254],{"class":1243},[1237,3361,3362],{"class":1257},"\"Snapshot of the item name at the time of registration\"",[1237,3364,1350],{"class":1243},[1237,3366,3368,3370,3372,3374,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3402],{"class":1239,"line":3367},98,[1237,3369,1452],{"class":1243},[1237,3371,1421],{"class":1250},[1237,3373,1254],{"class":1243},[1237,3375,3376],{"class":1257},"\"tx_type\"",[1237,3378,1176],{"class":1243},[1237,3380,1464],{"class":1250},[1237,3382,1254],{"class":1243},[1237,3384,1512],{"class":1257},[1237,3386,1176],{"class":1243},[1237,3388,1517],{"class":1250},[1237,3390,1254],{"class":1243},[1237,3392,1479],{"class":1320},[1237,3394,1176],{"class":1243},[1237,3396,1431],{"class":1250},[1237,3398,1254],{"class":1243},[1237,3400,3401],{"class":1257},"\"입고 (inbound) | 출고 (outbound) | 조립사용 (assembly use) | 조립생산 (assembly production)\"",[1237,3403,1350],{"class":1243},[1237,3405,3407,3409,3411,3413,3416,3418,3420,3422,3424,3426,3428,3430,3433],{"class":1239,"line":3406},99,[1237,3408,1452],{"class":1243},[1237,3410,1421],{"class":1250},[1237,3412,1254],{"class":1243},[1237,3414,3415],{"class":1257},"\"reason\"",[1237,3417,1176],{"class":1243},[1237,3419,1464],{"class":1250},[1237,3421,1254],{"class":1243},[1237,3423,1512],{"class":1257},[1237,3425,1176],{"class":1243},[1237,3427,1431],{"class":1250},[1237,3429,1254],{"class":1243},[1237,3431,3432],{"class":1257},"\"Reason for the inbound/outbound movement. Left empty for assembly use/assembly production because tx_type itself is the reason\"",[1237,3434,1350],{"class":1243},[1237,3436,3438,3440,3442,3444,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3472],{"class":1239,"line":3437},100,[1237,3439,1452],{"class":1243},[1237,3441,1421],{"class":1250},[1237,3443,1254],{"class":1243},[1237,3445,3446],{"class":1257},"\"qty\"",[1237,3448,1176],{"class":1243},[1237,3450,1464],{"class":1250},[1237,3452,1254],{"class":1243},[1237,3454,1710],{"class":1257},[1237,3456,1176],{"class":1243},[1237,3458,1517],{"class":1250},[1237,3460,1254],{"class":1243},[1237,3462,1479],{"class":1320},[1237,3464,1176],{"class":1243},[1237,3466,1431],{"class":1250},[1237,3468,1254],{"class":1243},[1237,3470,3471],{"class":1257},"\"Always positive. The direction is determined by tx_type\"",[1237,3473,1350],{"class":1243},[1237,3475,3477,3479,3481,3483,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3511],{"class":1239,"line":3476},101,[1237,3478,1452],{"class":1243},[1237,3480,1421],{"class":1250},[1237,3482,1254],{"class":1243},[1237,3484,3485],{"class":1257},"\"batch_id\"",[1237,3487,1176],{"class":1243},[1237,3489,1464],{"class":1250},[1237,3491,1254],{"class":1243},[1237,3493,1512],{"class":1257},[1237,3495,1176],{"class":1243},[1237,3497,1896],{"class":1250},[1237,3499,1254],{"class":1243},[1237,3501,1479],{"class":1320},[1237,3503,1176],{"class":1243},[1237,3505,1431],{"class":1250},[1237,3507,1254],{"class":1243},[1237,3509,3510],{"class":1257},"\"ID that groups an assembly production event. Empty for simple inbound/outbound movements\"",[1237,3512,1350],{"class":1243},[1237,3514,3516,3518,3520,3522,3525,3527,3529,3531,3533,3535,3537,3539,3542],{"class":1239,"line":3515},102,[1237,3517,1452],{"class":1243},[1237,3519,1421],{"class":1250},[1237,3521,1254],{"class":1243},[1237,3523,3524],{"class":1257},"\"note\"",[1237,3526,1176],{"class":1243},[1237,3528,1464],{"class":1250},[1237,3530,1254],{"class":1243},[1237,3532,1512],{"class":1257},[1237,3534,1176],{"class":1243},[1237,3536,1431],{"class":1250},[1237,3538,1254],{"class":1243},[1237,3540,3541],{"class":1257},"\"Note\"",[1237,3543,1350],{"class":1243},[1237,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579],{"class":1239,"line":3546},103,[1237,3548,1452],{"class":1243},[1237,3550,1421],{"class":1250},[1237,3552,1254],{"class":1243},[1237,3554,1875],{"class":1257},[1237,3556,1176],{"class":1243},[1237,3558,1464],{"class":1250},[1237,3560,1254],{"class":1243},[1237,3562,1710],{"class":1257},[1237,3564,1176],{"class":1243},[1237,3566,1517],{"class":1250},[1237,3568,1254],{"class":1243},[1237,3570,1479],{"class":1320},[1237,3572,1176],{"class":1243},[1237,3574,1896],{"class":1250},[1237,3576,1254],{"class":1243},[1237,3578,1479],{"class":1320},[1237,3580,1350],{"class":1243},[1237,3582,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608],{"class":1239,"line":3583},104,[1237,3585,1452],{"class":1243},[1237,3587,1421],{"class":1250},[1237,3589,1254],{"class":1243},[1237,3591,1914],{"class":1257},[1237,3593,1176],{"class":1243},[1237,3595,1464],{"class":1250},[1237,3597,1254],{"class":1243},[1237,3599,1512],{"class":1257},[1237,3601,1176],{"class":1243},[1237,3603,1431],{"class":1250},[1237,3605,1254],{"class":1243},[1237,3607,2994],{"class":1257},[1237,3609,1350],{"class":1243},[1237,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637],{"class":1239,"line":3612},105,[1237,3614,1452],{"class":1243},[1237,3616,1421],{"class":1250},[1237,3618,1254],{"class":1243},[1237,3620,1945],{"class":1257},[1237,3622,1176],{"class":1243},[1237,3624,1464],{"class":1250},[1237,3626,1254],{"class":1243},[1237,3628,1954],{"class":1257},[1237,3630,1176],{"class":1243},[1237,3632,1484],{"class":1250},[1237,3634,1254],{"class":1243},[1237,3636,1963],{"class":1257},[1237,3638,1383],{"class":1243},[1237,3640,3642],{"class":1239,"line":3641},106,[1237,3643,1971],{"class":1243},[1237,3645,3647,3649],{"class":1239,"line":3646},107,[1237,3648,1977],{"class":1250},[1237,3650,1283],{"class":1243},[1237,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672],{"class":1239,"line":3653},108,[1237,3655,1985],{"class":1250},[1237,3657,1340],{"class":1243},[1237,3659,1990],{"class":1250},[1237,3661,1254],{"class":1243},[1237,3663,1479],{"class":1320},[1237,3665,1176],{"class":1243},[1237,3667,1999],{"class":1250},[1237,3669,1254],{"class":1243},[1237,3671,1875],{"class":1257},[1237,3673,1350],{"class":1243},[1237,3675,3677,3679],{"class":1239,"line":3676},109,[1237,3678,2011],{"class":1250},[1237,3680,1283],{"class":1243},[1237,3682,3684,3686,3688,3690,3692,3694],{"class":1239,"line":3683},110,[1237,3685,2019],{"class":1250},[1237,3687,1340],{"class":1243},[1237,3689,1990],{"class":1250},[1237,3691,1254],{"class":1243},[1237,3693,1479],{"class":1320},[1237,3695,1350],{"class":1243},[1237,3697,3699,3701,3703,3705,3707,3709],{"class":1239,"line":3698},111,[1237,3700,2035],{"class":1250},[1237,3702,1340],{"class":1243},[1237,3704,1990],{"class":1250},[1237,3706,1254],{"class":1243},[1237,3708,1479],{"class":1320},[1237,3710,1350],{"class":1243},[1237,3712,3714,3716,3718,3720,3722,3724],{"class":1239,"line":3713},112,[1237,3715,2051],{"class":1250},[1237,3717,1340],{"class":1243},[1237,3719,1990],{"class":1250},[1237,3721,1254],{"class":1243},[1237,3723,1479],{"class":1320},[1237,3725,1350],{"class":1243},[1237,3727,3729,3731,3733,3735,3737,3739,3741,3743,3745,3747],{"class":1239,"line":3728},113,[1237,3730,2067],{"class":1250},[1237,3732,1340],{"class":1243},[1237,3734,1990],{"class":1250},[1237,3736,1254],{"class":1243},[1237,3738,1479],{"class":1320},[1237,3740,1176],{"class":1243},[1237,3742,2096],{"class":1250},[1237,3744,2099],{"class":1243},[1237,3746,2102],{"class":1257},[1237,3748,3749],{"class":1243},"] },\n",[1237,3751,3753,3755,3757,3759,3761,3763,3765,3767,3769,3771],{"class":1239,"line":3752},114,[1237,3754,2083],{"class":1250},[1237,3756,1340],{"class":1243},[1237,3758,1990],{"class":1250},[1237,3760,1254],{"class":1243},[1237,3762,1479],{"class":1320},[1237,3764,1176],{"class":1243},[1237,3766,2096],{"class":1250},[1237,3768,2099],{"class":1243},[1237,3770,2102],{"class":1257},[1237,3772,2105],{"class":1243},[1237,3774,3776],{"class":1239,"line":3775},115,[1237,3777,2111],{"class":1243},[1237,3779,3781],{"class":1239,"line":3780},116,[1237,3782,2117],{"class":1243},[1237,3784,3786],{"class":1239,"line":3785},117,[1237,3787,1389],{"class":1243},[1237,3789,3791],{"class":1239,"line":3790},118,[1237,3792,3793],{"class":1243},"  ]\n",[1237,3795,3797],{"class":1239,"line":3796},119,[1237,3798,3799],{"class":1243},"}\n",[1166,3801,3802,3803,3806,3807,3806,3809,1186],{},"Copy this result, and create an empty schema file in the workspace with ",[1173,3804,3805],{},"Create"," → ",[1173,3808,604],{},[1173,3810,3811],{},"New Schema DB",[1166,3813,3814],{},[3815,3816],"img",{"alt":3817,"src":3818},"Screen for selecting Create > Template Files > New Schema DB","./_screenshots/new-schema_en.png",[1166,3820,3821],{},"Enter a file name and save to create the empty schema file.",[1166,3823,3824],{},[3815,3825],{"alt":3826,"src":3827},"Newly created empty schema file","./_screenshots/schema-file-first_en.png",[1166,3829,3830,3831,3834],{},"Select the ",[1173,3832,3833],{},"Editor"," tab at the upper right, and paste the AI response from earlier as it is.",[1166,3836,3837],{},[3815,3838],{"alt":3839,"src":3840},"Schema editor screen","./_screenshots/schema-editor_en.png",[1166,3842,3843,3844,3847],{},"After saving, go to the ",[1173,3845,3846],{},"API Build"," tab at the top to check the list of APIs generated automatically for each table.",[1166,3849,3850],{},[3815,3851],{"alt":3852,"src":3853},"API Build screen","./_screenshots/schema-api-build_en.png",[1166,3855,3856,3857,3860,3861,3864,3865,3867,3868,3872],{},"Select ",[1173,3858,3859],{},"Deploy"," to expand the settings, check the ",[1173,3862,3863],{},"Database identifier",", and select ",[1173,3866,3859],{}," again. After a few seconds, the 'Deployment complete!' message appears. Finally, select the diskette button at the top to save. ",[3869,3870,3871],"strong",{},"At this point, the DB setup is finished"," — the 4 tables for parts, products, the bill of materials, and the inbound/outbound history, and the REST APIs that handle those tables, are actually created and ready to use. Next, create the screen that connects to this DB.",[1191,3874,3876],{"id":3875},"_2-create-the-html-file-for-the-screen","2. Create the .html file for the screen",[1166,3878,3879,3880,3882],{},"Ask the AI again this time. Plan and organize what you want to build and pass it to the AI. Give it the content of the ",[1173,3881,1200],{}," file you created earlier as reference material as well.",[3884,3885,3886,3890,3893,3896],"ul",{},[3887,3888,3889],"li",{},"An input form for registering parts and products",[3887,3891,3892],{},"A form for registering inbound and outbound movements",[3887,3894,3895],{},"When you register \"this many units of this product were produced\", the required part quantities are calculated automatically and applied to the stock",[3887,3897,3898],{},"The current stock status is shown in a table, and values are edited and saved directly in the table",[1166,3900,3901],{},"Paste the content below into the AI chat next. (Paste the result created in step 1 together at the very top.)",[1209,3903,3906],{"className":3904,"code":3905,"language":1214},[1212],"[Paste the result of step 1 here]\n\nThe schema above is already deployed. Create one web screen (index.html) that uses this schema.\n\nWhen the screen loads and saves data, send requests to the server according to the rules below.\n\n1. To get the API token of the signed-in user:\n   POST /api/auth/bootstrap  (credentials: \"include\")\n   Response: { data: { access_token, user: { id, nick } } }\n\n2. Add this header to every request after that: Authorization: Bearer \u003Caccess_token>\n\n3. Table CRUD:\n   List    GET  /api/web/{dbName}/{table}/list?column=value   → response { rows: [...] } (rows can be null when there are no results, so always handle it as rows || [])\n   Create  POST /api/web/{dbName}/{table}/create          → body: JSON, response { lastInsertId }\n   Update  PUT  /api/web/{dbName}/{table}/update/{id}     → body: JSON (you can send only the changed columns)\n   Delete  DELETE /api/web/{dbName}/{table}/delete/{id}\n\nThe features required on the screen are as follows.\n\n- An input form for registering new parts and products\n- A form for registering inbound and outbound movements of parts/products (registering also updates the current stock quantity)\n- A feature that, when you register \"this many units of this product were produced\", automatically calculates the required part quantities according to the registered bill of materials, deducts the part stock, and increases the product stock. If the part stock is insufficient, block the registration and tell the user.\n- A screen that shows the current stock status of parts/products in a table. Clicking a cell in the table lets the user edit and save the value right there.\n- A list that shows the inbound/outbound/assembly history in chronological order.\n\nPut everything in one HTML/CSS/JS file. Use a card layout on a clean white background.\nOutput only the completed index.html code without any other explanation.\n",[1173,3907,3905],{"__ignoreMap":1217},[1166,3909,3910],{},"The following is an example of an html file created this way. The actual result can differ slightly for each AI.",[3912,3913],"html-sandbox",{"height":3914,"src":3915},"640px","/examples/webspace/inventory-management/index.html",[1166,3917,3918],{},"When you upload this file to the workspace, the screen that your team members can actually use is complete.",[1191,3920,3922],{"id":3921},"_3-fill-in-test-data","3. Fill in test data",[1166,3924,3925],{},"To see it actually work, you need data. You can also ask the AI right away to create a screen that fills in example data with one button.",[1209,3927,3930],{"className":3928,"code":3929,"language":1214},[1212],"[Paste the result of step 1 here]\n\nThe schema above is already deployed, and the index.html that uses this schema has already been created.\nCreate a screen (mock-db-upload.html) that automatically fills in test data when one button is pressed.\n\nInsert the data into the actual server in the same way as the screen in step 2 (get a token with POST /api/auth/bootstrap, and create with POST /api/web/{dbName}/{table}/create).\n\n- Actually create and insert 10 to 15 parts, 3 to 5 products, the part composition of each product, and a few inbound/outbound history records.\n- Fill in the part/product names and quantities with values that would actually be used on a manufacturing site.\n- If data with the same code already exists, skip only that item and continue.\n- Show the progress on the screen as a log, one line at a time, and display \"Done\" when finished.\nOutput only the completed mock-db-upload.html code without any other explanation.\n",[1173,3931,3929],{"__ignoreMap":1217},[1166,3933,3934],{},"The following is an example of an html file created this way. The actual result can differ slightly for each AI. This screen is not deployed. Open and use it only when you need to prepare a demo.",[3912,3936],{"height":3914,"src":3937},"/examples/webspace/inventory-management/mock-db-upload.html",[1166,3939,3940],{},"When you actually enter data and use it, it works like this.",[1166,3942,3943],{},[3815,3944],{"alt":3945,"src":3946},"Parts status — double-clicking a cell edits and saves it right away","./_screenshots/inventory-parts-status_en.jpg",[1166,3948,3949],{},[3815,3950],{"alt":3951,"src":3952},"BOM registration — dragging a part card on the right and dropping it on the left adds it to the composition","./_screenshots/inventory-bom-dnd_en.jpg",[1166,3954,3955],{},[3815,3956],{"alt":3957,"src":3958},"Assembly production registration — when you set the product and the production quantity, the required part quantities and the current stock are shown automatically","./_screenshots/inventory-assembly-production_en.jpg",[1166,3960,3961],{},[3815,3962],{"alt":3963,"src":3964},"Transaction history — assembly production and assembly use records are kept together for each batch number","./_screenshots/inventory-transaction-history_en.jpg",[1191,3966,3968],{"id":3967},"_4-revise-repeatedly","4. Revise repeatedly",[1166,3970,3971],{},"You do not need to finish it in one go. As you use the screen, if you find a missing feature or a part you want to fix, keep asking the AI. However, what you need to do next depends on what you change.",[3884,3973,3974,3988,3997],{},[3887,3975,3976,3979,3980,3982,3983,3985,3986,1186],{},[3869,3977,3978],{},"A change that alters the DB structure (tables and columns)"," — for example, adding a new column or a new table — requires you to get the revised ",[1173,3981,1200],{}," again, paste it into ",[1173,3984,3833],{},", and deploy again in ",[1173,3987,3846],{},[3887,3989,3990,3993,3994,3996],{},[3869,3991,3992],{},"A change that keeps the DB structure and alters only the screen"," — for example, the design, the wording, or button positions — only requires you to get ",[1173,3995,1175],{}," again and overwrite the existing file. You do not need to deploy the API again.",[3887,3998,3999,4000,4003],{},"When you change the structure of a table that already contains data, check the ",[1173,4001,4002],{},"Overwrite existing data"," option in the deployment settings. Turning on overwrite permanently deletes the existing data.",[1188,4005],{},[1166,4007,4008],{},"With just these four steps, the AI creates everything: the database design, the actual screens, the test data, and the later revisions. After that, keep refining the screen design and the details as you like.",[4010,4011,4012],"style",{},"html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .s-m8C, html code.shiki .s-m8C{--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sCZoN, html code.shiki .sCZoN{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2}html pre.shiki code .s7F3e, html code.shiki .s7F3e{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":1217,"searchDepth":1247,"depth":1264,"links":4014},[4015,4016,4017,4018],{"id":1193,"depth":1247,"text":1194},{"id":3875,"depth":1247,"text":3876},{"id":3921,"depth":1247,"text":3922},{"id":3967,"depth":1247,"text":3968},"Shows, with an inventory management system as the example, how everything from the database design to the actual screens is built when you only describe the requirements to AI.","md",{},true,{"title":4024,"description":4019,"ogType":4025,"twitterCard":4026,"keywords":4027},"Build your own business system | WebSpace examples","article","summary_large_image",[4028,4029,4030,4031,4032],"Your own business system","Inventory management system","DB setup","AI prompt","SetFN workspace","dojX7lfOfByoiVFpZaHxTm0bhKV_AkPcy2pWS_vKI4U",[4035,4036],{"title":872,"path":875,"stem":873,"slug":874,"children":-1},{"title":882,"path":883,"stem":884,"slug":886,"children":-1},{"title":877,"filename":4038,"content":4039},"my-own-system","# Build your own business system\n\nIn the SetFN workspace, you can build systems such as your company's own groupware or ERP yourself.\nLeave the database structure design and the screen creation to AI. All you need to do is produce the results and upload them to the workspace.\nThere are 2 files to create. Your tasks are to upload them and click the 'Deploy' button.\nThis document builds an 'inventory management program for a manufacturing site' as an example.\n\nIf you want to try the completed files right away without the AI prompts, you can get the schema, `index.html`, `mock-db-upload.html`, and the README at once from [Download the full sample ZIP](/examples/webspace/inventory-management/setfn-inventory-management-sample.zip).\n\n---\n\n## 1. Create the .sfn file for creating the database\n\nIn the SetFN workspace, you can create a DB with a file called `.sfn`. Copy an example of a `.sfn` file and give it to an AI such as Claude, GPT, or Gemini, and describe your requirements, for example \"I want to manage the stock of parts and products\". The AI then creates the file.\n\nCopy the content below, change the requirements in the lower part, and pass it to the AI.\n\n```\nYou are an engineer who designs schema files (.sfn) for SetFN, a no-code backend platform.\nA .sfn file is a JSON file with the structure below. \n\n{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"db_name_in_lowercase_english_with_underscores\",\n    \"dbEngine\": \"sqlite\",\n    \"includeClient\": false,\n    \"features\": {\n      \"realtime\": { \"enabled\": false },\n      \"upload\": { \"enabled\": false },\n      \"ai-chat\": { \"enabled\": false }\n    }\n  },\n  \"data\": [\n    {\n      \"table\": { \"name\": \"table_name\", \"cmt\": \"Description of this table\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"column_name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Column description\" },\n        { \"name\": \"number_column\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    }\n  ]\n}\n\nFor the column type, use only serial4 (auto-increment PK) / text / int4 (integer) / timestamp.\nAdd notnull, default, unique, index, and cmt to columns as needed.\n\nNow, in this format, design the DB of an \"inventory management system\" for a manufacturer. The requirements are as follows.\n\n- Register parts and manage the current stock quantity of each part.\n- Register products and manage the current stock quantity of each product.\n- One product is assembled from multiple parts. Manage which parts each product needs and how many of each (BOM, bill of materials).\n- Keep a history of inbound and outbound movements of parts and products. In particular, when an event of \"assembling parts to produce a product\" occurs, the parts used at that moment and the quantity of products produced must be tracked together as one event (it must be possible to look up later \"how many parts went into making this product\").\n\nSet the DB name (dbName) to \"inventory_management\".\nDesign it with 4 tables or fewer, practical enough to be used right away in real work.\nOutput only the completed .sfn JSON code without any other explanation.\n```\n\nThe following is an example of an AI response created this way. The actual result can differ slightly for each AI and for each run — it does not need to be exactly this content, and a similar structure is enough. However, the result must start with `{` and end with `}` without any other explanation so that you can paste it into the editor as it is.\n\n```json\n{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"inventory_management\",\n    \"dbEngine\": \"sqlite\",\n    \"includeClient\": false,\n    \"features\": {\n      \"realtime\": { \"enabled\": false },\n      \"upload\": { \"enabled\": false },\n      \"ai-chat\": { \"enabled\": false }\n    }\n  },\n  \"data\": [\n    {\n      \"table\": { \"name\": \"parts\", \"cmt\": \"Parts master. Any member can view/register/edit; only administrators can delete\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"part_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"Part code\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Part name\" },\n        { \"name\": \"spec\", \"type\": \"text\", \"cmt\": \"Specification (e.g. M2, 220V/50Hz). Even with the same name, register a separate part_code if the specification differs\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"Part category (electronic parts/mechanical parts/packaging materials, etc.)\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"Unit\" },\n        { \"name\": \"unit_cost\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Unit cost\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Current stock\" },\n        { \"name\": \"safety_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Safety stock (reorder point)\" },\n        { \"name\": \"supplier\", \"type\": \"text\", \"cmt\": \"Supplier\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"Display name of the member who last registered/edited it\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"products\", \"cmt\": \"Products master. Any member can view/register/edit; only administrators can delete\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"Product code\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Product name\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"Product category\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"Unit\" },\n        { \"name\": \"price\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Selling price\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"Current stock\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"Display name of the member who last registered/edited it\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"bom\", \"cmt\": \"Bill of materials per product (single level). A unique constraint on bom_key (product_id:part_id) prevents the same part from being registered twice for the same product\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"part_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"qty_per_unit\", \"type\": \"int4\", \"notnull\": true, \"default\": \"1\", \"cmt\": \"Quantity of the part required to make 1 unit of the product\" },\n        { \"name\": \"bom_key\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"Combination of product_id:part_id. Used to prevent duplicate registration\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"Display name of the member who registered it\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    },\n    {\n      \"table\": { \"name\": \"stock_transactions\", \"cmt\": \"Unified history of inbound/outbound movements and assembly. item_type=part|product, tx_type=입고|출고|조립사용|조립생산 (inbound|outbound|assembly use|assembly production). One assembly production event consists of multiple assembly use records (parts consumed) + 1 assembly production record (product increased) that share the same batch_id, so you can track which parts were used for a product and how many\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"item_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"part | product\" },\n        { \"name\": \"item_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true, \"cmt\": \"parts.id or products.id\" },\n        { \"name\": \"item_name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Snapshot of the item name at the time of registration\" },\n        { \"name\": \"tx_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"입고 (inbound) | 출고 (outbound) | 조립사용 (assembly use) | 조립생산 (assembly production)\" },\n        { \"name\": \"reason\", \"type\": \"text\", \"cmt\": \"Reason for the inbound/outbound movement. Left empty for assembly use/assembly production because tx_type itself is the reason\" },\n        { \"name\": \"qty\", \"type\": \"int4\", \"notnull\": true, \"cmt\": \"Always positive. The direction is determined by tx_type\" },\n        { \"name\": \"batch_id\", \"type\": \"text\", \"index\": true, \"cmt\": \"ID that groups an assembly production event. Empty for simple inbound/outbound movements\" },\n        { \"name\": \"note\", \"type\": \"text\", \"cmt\": \"Note\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"Display name of the member who registered it\" },\n        { \"name\": \"_created_at\", \"type\": \"timestamp\", \"default\": \"now()\" }\n      ],\n      \"permissions\": {\n        \"security\": { \"login\": true, \"ownerColumn\": \"_user_id\" },\n        \"ops\": {\n          \"list\": { \"login\": true },\n          \"view\": { \"login\": true },\n          \"create\": { \"login\": true },\n          \"update\": { \"login\": true, \"roles\": [\"admin\"] },\n          \"delete\": { \"login\": true, \"roles\": [\"admin\"] }\n        }\n      }\n    }\n  ]\n}\n```\n\nCopy this result, and create an empty schema file in the workspace with `Create` → `Template Files` → `New Schema DB`.\n\n![Screen for selecting Create > Template Files > New Schema DB](./_screenshots/new-schema_en.png)\n\nEnter a file name and save to create the empty schema file.\n\n![Newly created empty schema file](./_screenshots/schema-file-first_en.png)\n\nSelect the `Editor` tab at the upper right, and paste the AI response from earlier as it is.\n\n![Schema editor screen](./_screenshots/schema-editor_en.png)\n\nAfter saving, go to the `API Build` tab at the top to check the list of APIs generated automatically for each table.\n\n![API Build screen](./_screenshots/schema-api-build_en.png)\n\nSelect `Deploy` to expand the settings, check the `Database identifier`, and select `Deploy` again. After a few seconds, the 'Deployment complete!' message appears. Finally, select the diskette button at the top to save. **At this point, the DB setup is finished** — the 4 tables for parts, products, the bill of materials, and the inbound/outbound history, and the REST APIs that handle those tables, are actually created and ready to use. Next, create the screen that connects to this DB.\n\n## 2. Create the .html file for the screen\n\nAsk the AI again this time. Plan and organize what you want to build and pass it to the AI. Give it the content of the `.sfn` file you created earlier as reference material as well.\n\n- An input form for registering parts and products\n- A form for registering inbound and outbound movements\n- When you register \"this many units of this product were produced\", the required part quantities are calculated automatically and applied to the stock\n- The current stock status is shown in a table, and values are edited and saved directly in the table\n\nPaste the content below into the AI chat next. (Paste the result created in step 1 together at the very top.)\n\n```\n[Paste the result of step 1 here]\n\nThe schema above is already deployed. Create one web screen (index.html) that uses this schema.\n\nWhen the screen loads and saves data, send requests to the server according to the rules below.\n\n1. To get the API token of the signed-in user:\n   POST /api/auth/bootstrap  (credentials: \"include\")\n   Response: { data: { access_token, user: { id, nick } } }\n\n2. Add this header to every request after that: Authorization: Bearer \u003Caccess_token>\n\n3. Table CRUD:\n   List    GET  /api/web/{dbName}/{table}/list?column=value   → response { rows: [...] } (rows can be null when there are no results, so always handle it as rows || [])\n   Create  POST /api/web/{dbName}/{table}/create          → body: JSON, response { lastInsertId }\n   Update  PUT  /api/web/{dbName}/{table}/update/{id}     → body: JSON (you can send only the changed columns)\n   Delete  DELETE /api/web/{dbName}/{table}/delete/{id}\n\nThe features required on the screen are as follows.\n\n- An input form for registering new parts and products\n- A form for registering inbound and outbound movements of parts/products (registering also updates the current stock quantity)\n- A feature that, when you register \"this many units of this product were produced\", automatically calculates the required part quantities according to the registered bill of materials, deducts the part stock, and increases the product stock. If the part stock is insufficient, block the registration and tell the user.\n- A screen that shows the current stock status of parts/products in a table. Clicking a cell in the table lets the user edit and save the value right there.\n- A list that shows the inbound/outbound/assembly history in chronological order.\n\nPut everything in one HTML/CSS/JS file. Use a card layout on a clean white background.\nOutput only the completed index.html code without any other explanation.\n```\n\nThe following is an example of an html file created this way. The actual result can differ slightly for each AI.\n\n::html-sandbox{src=\"/examples/webspace/inventory-management/index.html\" height=\"640px\"}\n::\n\nWhen you upload this file to the workspace, the screen that your team members can actually use is complete.\n\n## 3. Fill in test data\n\nTo see it actually work, you need data. You can also ask the AI right away to create a screen that fills in example data with one button.\n\n```\n[Paste the result of step 1 here]\n\nThe schema above is already deployed, and the index.html that uses this schema has already been created.\nCreate a screen (mock-db-upload.html) that automatically fills in test data when one button is pressed.\n\nInsert the data into the actual server in the same way as the screen in step 2 (get a token with POST /api/auth/bootstrap, and create with POST /api/web/{dbName}/{table}/create).\n\n- Actually create and insert 10 to 15 parts, 3 to 5 products, the part composition of each product, and a few inbound/outbound history records.\n- Fill in the part/product names and quantities with values that would actually be used on a manufacturing site.\n- If data with the same code already exists, skip only that item and continue.\n- Show the progress on the screen as a log, one line at a time, and display \"Done\" when finished.\nOutput only the completed mock-db-upload.html code without any other explanation.\n```\n\nThe following is an example of an html file created this way. The actual result can differ slightly for each AI. This screen is not deployed. Open and use it only when you need to prepare a demo.\n\n::html-sandbox{src=\"/examples/webspace/inventory-management/mock-db-upload.html\" height=\"640px\"}\n::\n\nWhen you actually enter data and use it, it works like this.\n\n![Parts status — double-clicking a cell edits and saves it right away](./_screenshots/inventory-parts-status_en.jpg)\n\n![BOM registration — dragging a part card on the right and dropping it on the left adds it to the composition](./_screenshots/inventory-bom-dnd_en.jpg)\n\n![Assembly production registration — when you set the product and the production quantity, the required part quantities and the current stock are shown automatically](./_screenshots/inventory-assembly-production_en.jpg)\n\n![Transaction history — assembly production and assembly use records are kept together for each batch number](./_screenshots/inventory-transaction-history_en.jpg)\n\n## 4. Revise repeatedly\n\nYou do not need to finish it in one go. As you use the screen, if you find a missing feature or a part you want to fix, keep asking the AI. However, what you need to do next depends on what you change.\n\n- **A change that alters the DB structure (tables and columns)** — for example, adding a new column or a new table — requires you to get the revised `.sfn` again, paste it into `Editor`, and deploy again in `API Build`.\n- **A change that keeps the DB structure and alters only the screen** — for example, the design, the wording, or button positions — only requires you to get `index.html` again and overwrite the existing file. You do not need to deploy the API again.\n- When you change the structure of a table that already contains data, check the `Overwrite existing data` option in the deployment settings. Turning on overwrite permanently deletes the existing data.\n\n---\n\nWith just these four steps, the AI creates everything: the database design, the actual screens, the test data, and the later revisions. After that, keep refining the screen design and the details as you like.\n",1793056587049]