[{"data":1,"prerenderedAt":4045},["ShallowReactive",2],{"nav-docs-es":3,"page-/es/docs/webspace/examples/my-own-system":1156,"surround-/es/docs/webspace/examples/my-own-system":4039,"raw-/es/docs/webspace/examples/my-own-system":4042},[4,67,374,775,902,1074,1084,1109],{"title":5,"tags":6,"slug":6,"path":7,"stem":8,"children":9,"page":66,"sourcePath":7},"Primeros pasos con 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},"Introducción a SpaceBuilder","/getting-started/overview","00.getting-started/00.overview","/getting-started/overview/",{"title":16,"path":17,"stem":18,"tags":6,"slug":19,"sourcePath":17},"Crear una cuenta de SetFN","/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},"Instalación en 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},"Instalación con 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},"Instalación en 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},"Instalación en 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},"Configuración inicial","/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},"Activar la licencia","/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},"Consultar la dirección de acceso (red local/interna)","/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},"Elegir un método de acceso externo","/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},"Administración del espacio","/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},"Inicio del administrador","/admin/home","10.admin/00.home",[77,82,87],{"title":78,"path":79,"stem":80,"tags":6,"slug":81,"sourcePath":79},"Acceder a la página de administración","/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},"Recorrer los menús de administración","10.admin/00.home/00.overview","/admin/","/admin/home/overview",{"title":88,"path":89,"stem":90,"tags":6,"slug":91,"sourcePath":89},"Gestión de licencias","/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},"Gestión de usuarios","/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},"Configurar la política de registro y los permisos predeterminados","/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},"Registrar los términos de registro","/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},"Crear una cuenta de usuario","/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},"Modificar una cuenta de usuario","/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},"Añadir un administrador","/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},"Gestión de equipos","/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},"Gestión de niveles","/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},"Consultar los registros de acceso","/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},"Administrar dispositivos activos","/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},"Configurar las políticas de cuenta y seguridad","/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},"Configurar 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},"Configurar avisos a miembros","/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},"Enviar un correo colectivo a los miembros","/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},"Configuración de servicios","/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},"Configuración del área de archivos","/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},"Configuración de webhooks","/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},"Configuración de la comunidad","/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},"Configurar la política del chatbot de IA","/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},"Configuración de correo","/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},"Configuración de marca","/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},"Servicios de conocimiento","/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},"Introducción a los servicios de conocimiento","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},"Recopilación e indexación","/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},"Calidad e idioma de búsqueda","/admin/knowledge/search","10.admin/30.knowledge/20.search","/admin/knowledge/search/",{"title":220,"path":221,"stem":222,"tags":6,"slug":223,"sourcePath":221},"Almacenamiento de conocimiento","/admin/knowledge/storage","10.admin/30.knowledge/30.storage","/admin/knowledge/storage/",{"title":225,"path":226,"stem":227,"tags":6,"slug":228,"sourcePath":226},"Operar el almacenamiento de conocimiento","/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},"Conectar 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},"Preparar un servidor Qdrant","/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},"Conectar 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},"Búsqueda externa y fuentes","/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},"Servicios de IA","/admin/ai","10.admin/35.ai",[254,259,264,269],{"title":255,"path":251,"stem":256,"tags":6,"slug":257,"sourcePath":258},"Administrar los servicios de IA","10.admin/35.ai/00.overview","/admin/ai/","/admin/ai/overview",{"title":260,"path":261,"stem":262,"tags":6,"slug":263,"sourcePath":261},"Configurar modelos y entornos de ejecución","/admin/ai/models","10.admin/35.ai/10.models","/admin/ai/models/",{"title":265,"path":266,"stem":267,"tags":6,"slug":268,"sourcePath":266},"Configurar herramientas e integraciones","/admin/ai/integrations","10.admin/35.ai/20.integrations","/admin/ai/integrations/",{"title":270,"path":271,"stem":272,"tags":6,"slug":273,"sourcePath":271},"Administrar servidores MCP","/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},"Administrar 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},"Configurar plugins de extensión","/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},"Consultar los registros de operaciones y auditoría","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},"Seguridad","/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},"Resumen de seguridad","/admin/security/overview","10.admin/50.security/00.overview","/admin/security/overview/",{"title":310,"path":311,"stem":312,"tags":6,"slug":313,"sourcePath":311},"Consultar el registro de actividad","/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},"Gestionar bloqueos","/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},"Configurar la seguridad","/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},"Procesar dispositivos pendientes de aprobación","/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},"Restringir el acceso por IP","/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},"Configurar la verificación en dos pasos para administradores","/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},"Administración del sistema","/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},"Consultar la información del dispositivo","/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},"Reiniciar y mantener el servidor","/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},"Gestionar servicios en segundo plano","/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},"Actualizar 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},"Desinstalar 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},"Migrar a otro servidor","/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},"Uso de 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},"Menú","/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},"Introducción al espacio de trabajo","/workspace/menu/overview","20.workspace/05.menu/00.overview","/workspace/menu/overview/",{"title":390,"path":391,"stem":392,"tags":6,"slug":393,"sourcePath":391},"Espacio de equipo","/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},"Espacio de cliente","/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},"Favoritos","/workspace/menu/favorites","20.workspace/05.menu/10.favorites","/workspace/menu/favorites/",{"title":405,"path":406,"stem":407,"tags":6,"slug":408,"sourcePath":406},"Documentos recientes","/workspace/menu/recent","20.workspace/05.menu/20.recent","/workspace/menu/recent/",{"title":410,"path":411,"stem":412,"tags":6,"slug":413,"sourcePath":411},"Uso compartido externo","/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},"Papelera","/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},"Cuenta","/workspace/account","20.workspace/10.account",[424,429,434],{"title":425,"path":426,"stem":427,"tags":6,"slug":428,"sourcePath":426},"Registrarse e iniciar sesión","/workspace/account/signup","20.workspace/10.account/10.signup","/workspace/account/signup/",{"title":430,"path":431,"stem":432,"tags":6,"slug":433,"sourcePath":431},"Restablecer la contraseña","/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},"Configuración de la cuenta","/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},"Carpetas","/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},"Funciones básicas de las carpetas","/workspace/folder/basic","20.workspace/20.folder/10.basic","/workspace/folder/basic/",{"title":450,"path":451,"stem":452,"tags":6,"slug":453,"sourcePath":451},"Crear varias carpetas a la vez","/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},"Filtro","/workspace/folder/filter","20.workspace/20.folder/13.filter","/workspace/folder/filter/",{"title":460,"path":461,"stem":462,"tags":6,"slug":463,"sourcePath":461},"Configurar las opciones de vista de una carpeta","/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},"Usar una carpeta como tablón de anuncios","/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},"Vista web de una carpeta","/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},"Organizar carpetas","/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},"Aviso de carpeta (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},"Exportar listas de carpetas y archivos","/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},"Configurar permisos de acceso por nivel","/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},"Configurar permisos de acceso por equipo","/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},"Configurar reglas de archivos","/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},"Webhooks de carpeta","/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},"Configurar el índice de conocimiento de una carpeta","/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},"Carpeta de automatización del trabajo","/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},"Archivos","/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},"Funciones básicas de gestión de archivos","/workspace/file/overview","20.workspace/30.file/00.overview","/workspace/file/overview/",{"title":534,"path":535,"stem":536,"tags":6,"slug":537,"sourcePath":535},"Consultar la lista mientras ve un archivo","/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},"Ver y editar archivos Markdown y de texto","/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},"Ver archivos HTML","/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},"Ver y editar archivos CSV","/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},"Ver archivos de imagen y vídeo","/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},"Ver archivos de Office y PDF","/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},"Pegar páginas web (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},"Pegar capturas de pantalla","/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},"Pegar 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},"Grabar la pantalla","/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},"Nota rápida","/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},"Etiquetas de archivo","/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},"Cambiar nombres de archivos en bloque","/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},"Conversión de archivos","/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},"Archivos de plantilla","/workspace/file/templates","20.workspace/30.file/41.templates","/workspace/file/templates/",{"title":609,"path":610,"stem":611,"tags":6,"slug":612,"sourcePath":610},"Lista de tareas (Todo)","/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},"Formulario de aprobación","/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},"Tablero Kanban","/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},"Cronología","/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},"Bloc de notas","/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},"Archivo de chat con AI","/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},"Consultar el registro de cambios del archivo","/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},"Control de versiones de archivos","/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},"Bloqueo de edición","/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},"Cifrado de archivos","/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},"Registrar archivos del disco","/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},"Colaboración","/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},"Comentarios en archivos y carpetas","/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},"Chat colaborativo y bloqueo de edición","/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},"Seguir la ubicación de un miembro del equipo","/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},"Menciones","/workspace/cooperation/mention","20.workspace/35.cooperation/14.mention","/workspace/cooperation/mention/",{"title":693,"path":694,"stem":695,"tags":6,"slug":696,"sourcePath":694},"Mensajes directos","/workspace/cooperation/dm","20.workspace/35.cooperation/16.dm","/workspace/cooperation/dm/",{"title":698,"path":699,"stem":700,"tags":6,"slug":701,"sourcePath":699},"Archivo de notificaciones","/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},"Consultar la actividad del equipo","/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},"Crear un enlace para compartir externamente","/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},"Enviar un enlace compartido por correo","/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},"Búsqueda","/workspace/search","20.workspace/40.search",[723,728,734,739,744,749],{"title":724,"path":725,"stem":726,"tags":6,"slug":727,"sourcePath":725},"Buscar archivos","/workspace/search/search","20.workspace/40.search/00.search","/workspace/search/search/",{"title":729,"path":730,"stem":731,"tags":732,"slug":733,"sourcePath":730},"Búsqueda contextual (búsqueda con AI)","/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},"Buscar imágenes","/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},"Buscar en el chat","/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},"Buscar comentarios","/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},"Buscar sinónimos","/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},"IA","/workspace/ai","20.workspace/50.ai",[759,764,770],{"title":760,"path":761,"stem":762,"tags":6,"slug":763,"sourcePath":761},"Resumen de funciones de AI","/workspace/ai/overview","20.workspace/50.ai/00.overview","/workspace/ai/overview/",{"title":765,"path":766,"stem":767,"tags":768,"slug":769,"sourcePath":766},"Solicitar tareas a la AI local","/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},"Usar una AI externa","/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,866],{"title":781,"path":782,"stem":783,"tags":6,"slug":784,"sourcePath":782},"¿Qué es Webspace?","/webspace/overview","40.webspace/00.overview","/webspace/overview/",{"title":786,"path":787,"stem":788,"tags":6,"slug":789,"sourcePath":787},"Desplegar un sitio web","/webspace/website-release","40.webspace/10.website-release","/webspace/website-release/",{"title":791,"path":792,"stem":793,"tags":6,"slug":794,"sourcePath":792},"Crear un archivo de esquema (.sfn)","/webspace/create-database","40.webspace/20.create-database","/webspace/create-database/",{"title":796,"path":797,"stem":798,"tags":6,"slug":799,"sourcePath":797},"Crear API y desplegar una base de datos","/webspace/api-overview","40.webspace/24.api-overview","/webspace/api-overview/",{"title":801,"path":802,"stem":803,"tags":6,"slug":804,"sourcePath":802},"Consultar el ejemplo de frontend","/webspace/frontend-example","40.webspace/26.frontend-example","/webspace/frontend-example/",{"title":806,"path":807,"stem":808,"tags":809,"slug":810,"sourcePath":807},"Crear un servicio web interno para el equipo","/webspace/internal-webservice","40.webspace/32.internal-webservice",[469],"/webspace/internal-webservice/",{"title":812,"path":813,"stem":814,"tags":6,"slug":815,"sourcePath":813},"Crear un servicio web de acceso público","/webspace/external-webservice","40.webspace/34.external-webservice","/webspace/external-webservice/",{"title":817,"path":818,"stem":819,"tags":6,"slug":820,"sourcePath":818},"Importar y exportar SQL","/webspace/sql-converter","40.webspace/42.sql-converter","/webspace/sql-converter/",{"title":822,"path":823,"stem":824,"tags":6,"slug":825,"sourcePath":823},"Convertir un esquema en código","/webspace/code-converter","40.webspace/44.code-converter","/webspace/code-converter/",{"title":827,"path":828,"stem":829,"tags":6,"slug":830,"sourcePath":828},"Rendimiento y escalado","/webspace/performance","40.webspace/48.performance","/webspace/performance/",{"title":832,"tags":6,"slug":6,"path":833,"stem":834,"children":835,"page":66,"sourcePath":833},"Administración de Webspace","/webspace/admin","40.webspace/50.admin",[836,841,846,851,856,861],{"title":837,"path":838,"stem":839,"tags":6,"slug":840,"sourcePath":838},"Empezar a administrar Webspace","/webspace/admin/overview","40.webspace/50.admin/00.overview","/webspace/admin/overview/",{"title":842,"path":843,"stem":844,"tags":6,"slug":845,"sourcePath":843},"Operaciones","/webspace/admin/operations","40.webspace/50.admin/10.operations","/webspace/admin/operations/",{"title":847,"path":848,"stem":849,"tags":6,"slug":850,"sourcePath":848},"Acceso al espacio de trabajo","/webspace/admin/workspace-access","40.webspace/50.admin/20.workspace-access","/webspace/admin/workspace-access/",{"title":852,"path":853,"stem":854,"tags":6,"slug":855,"sourcePath":853},"Seguridad de API y sitios","/webspace/admin/api-site-security","40.webspace/50.admin/30.api-site-security","/webspace/admin/api-site-security/",{"title":857,"path":858,"stem":859,"tags":6,"slug":860,"sourcePath":858},"Servicios y capacidad","/webspace/admin/service-capacity","40.webspace/50.admin/40.service-capacity","/webspace/admin/service-capacity/",{"title":862,"path":863,"stem":864,"tags":6,"slug":865,"sourcePath":863},"Gestión de despliegues y versiones de frontend","/webspace/admin/deployments","40.webspace/50.admin/50.deployments","/webspace/admin/deployments/",{"title":867,"tags":868,"slug":6,"path":869,"stem":870,"children":871,"page":66,"sourcePath":869},"Ejemplos de Webspace",[469],"/webspace/examples","40.webspace/60.examples",[872,876,881,887,892,897],{"title":867,"path":869,"stem":873,"tags":6,"slug":874,"sourcePath":875},"40.webspace/60.examples/00.overview","/webspace/examples/","/webspace/examples/overview",{"title":877,"path":878,"stem":879,"tags":6,"slug":880,"sourcePath":878},"Crear su propio sistema empresarial","/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},"Crear un juego de Gomoku en tiempo real","/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},"Crear un tablón de recursos con archivos de una carpeta","/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},"Crear una incursión cooperativa contra un monstruo","/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},"Desplegar un ejemplo de chat de asistencia con AI","/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},"Uso de plugins","/plugin","50.plugin",[907,912,932,993,1014,1049],{"title":908,"path":909,"stem":910,"tags":6,"slug":911,"sourcePath":909},"Introducción a los plugins","/plugin/overview","50.plugin/00.overview","/plugin/overview/",{"title":913,"tags":6,"slug":6,"path":914,"stem":915,"children":916,"page":66,"sourcePath":914},"Calendario","/plugin/calendar","50.plugin/10.calendar",[917,922,927],{"title":918,"path":919,"stem":920,"tags":6,"slug":921,"sourcePath":919},"Introducción a Calendar","/plugin/calendar/overview","50.plugin/10.calendar/00.overview","/plugin/calendar/overview/",{"title":923,"path":924,"stem":925,"tags":6,"slug":926,"sourcePath":924},"Crear, editar y eliminar eventos","/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},"Consultar el historial de actividad","/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},"Correo electrónico","/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},"Introducción a Email","/plugin/email/overview","50.plugin/20.email/00.overview","/plugin/email/overview/",{"title":943,"path":944,"stem":945,"tags":6,"slug":946,"sourcePath":944},"Configurar Email","/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},"Conectar una cuenta de correo externa","/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},"Funciones básicas de Email","/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},"Usar 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},"Redactar y enviar mensajes","/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},"Adjuntar archivos","/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},"Gestionar carpetas de correo","/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},"Clasificar mensajes automáticamente","/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},"Archivar y compartir mensajes en File Space","/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},"Seguridad de Email","/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},"Flujos de trabajo (automatización)","/plugin/workflow","50.plugin/30.workflow",[998,1003,1009],{"title":999,"path":1000,"stem":1001,"tags":6,"slug":1002,"sourcePath":1000},"Introducción a Workflow","/plugin/workflow/overview","50.plugin/30.workflow/00.overview","/plugin/workflow/overview/",{"title":1004,"path":1005,"stem":1006,"tags":1007,"slug":1008,"sourcePath":1005},"Crear un 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},"Consultar el historial de ejecución","/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 (entrenamiento de IA)","/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},"Introducción a Fine-tuning","/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},"Preprocesar datos de entrenamiento","/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},"Entrenar","/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},"Evaluar","/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},"Probar el chat","/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},"Exportar","/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 (recopilación de datos)","/plugin/edc","50.plugin/50.edc",[1054,1059,1064,1069],{"title":1055,"path":1056,"stem":1057,"tags":6,"slug":1058,"sourcePath":1056},"Introducción a EDC","/plugin/edc/overview","50.plugin/50.edc/00.overview","/plugin/edc/overview/",{"title":1060,"path":1061,"stem":1062,"tags":6,"slug":1063,"sourcePath":1061},"Introducir datos y consultar 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},"Configurar usuarios y centros","/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},"Herramienta de línea de comandos","/cli","90.cli",[1079],{"title":1080,"path":1081,"stem":1082,"tags":6,"slug":1083,"sourcePath":1081},"Administrar el servidor mediante comandos","/cli/commands","90.cli/10.commands","/cli/commands/",{"title":1085,"tags":6,"slug":6,"path":1086,"stem":1087,"children":1088,"page":66,"sourcePath":1086},"Actualizaciones de seguridad","/security-updates","95.security-updates",[1089,1094,1099,1104],{"title":1090,"path":1091,"stem":1092,"tags":6,"slug":1093,"sourcePath":1091},"Conocer las revisiones de seguridad y el método de actualización","/security-updates/overview","95.security-updates/00.overview","/security-updates/overview/",{"title":1095,"path":1096,"stem":1097,"tags":6,"slug":1098,"sourcePath":1096},"Registro de revisiones de seguridad","/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},"Estado de revisión de las principales vulnerabilidades","/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},"Comprobar las actualizaciones de seguridad del servidor","/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},"Preguntas frecuentes","/faq","99.FAQ",[1114,1120,1126,1132,1138,1144,1150],{"title":1115,"path":1116,"stem":1117,"tags":6,"slug":1118,"sourcePath":1119},"Comparación entre SetFN y los servicios en la nube","/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},"Comparación entre SetFN y NAS","/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},"Política de seguridad","/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},"Por qué SetFN es rápido","/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},"Preguntas sobre licencias","/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},"Preguntas sobre funciones de AI","/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},"Solución de problemas","/FAQ/troubleshooting","99.FAQ/70.troubleshooting","/FAQ/troubleshooting/","/faq/troubleshooting",{"id":1157,"title":877,"body":1158,"cover":6,"description":4024,"extension":4025,"image":6,"meta":4026,"navigation":4027,"path":878,"reviewSummary":6,"reviewedAt":6,"seo":4028,"slug":880,"stem":879,"tags":6,"thumbnail":6,"thumbnailPosition":6,"thumbnailScale":6,"__hash__":4038},"docs_es/40.webspace/60.examples/10.my-own-system.md",{"type":1159,"value":1160,"toc":4018},"minimal",[1161,1165,1174,1191,1194,1199,1206,1209,1219,1230,3801,3814,3821,3824,3830,3837,3843,3850,3856,3878,3882,3888,3904,3907,3913,3916,3921,3924,3928,3931,3937,3940,3943,3946,3952,3958,3964,3970,3974,3977,4009,4011,4014],[1162,1163,877],"h1",{"id":1164},"crear-su-propio-sistema-empresarial",[1166,1167,1168,1169,1173],"p",{},"En SetFN Workspace puede crear sistemas propios de la empresa, como groupware o ERP.\nEncargue a la AI el diseño de la base de datos y la creación de las interfaces; solo tendrá que preparar los resultados y cargarlos en el espacio de trabajo.\nDebe crear 2 archivos. Sus tareas consisten en cargarlos y seleccionar el botón ",[1170,1171,1172],"code",{},"Deploy",".\nEste ejemplo crea un programa de gestión de inventario para una planta de fabricación.",[1166,1175,1176,1177,1180,1181,1184,1185,1190],{},"Si desea probar directamente los archivos terminados sin usar los prompts, descargue conjuntamente el esquema, ",[1170,1178,1179],{},"index.html",", ",[1170,1182,1183],{},"mock-db-upload.html"," y README desde ",[1186,1187,1189],"a",{"href":1188},"/examples/webspace/inventory-management/setfn-inventory-management-sample.zip","Descargar el ZIP completo de ejemplo",".",[1192,1193],"hr",{},[1195,1196,1198],"h2",{"id":1197},"_1-crear-el-archivo-sfn-de-la-base-de-datos","1. Crear el archivo .sfn de la base de datos",[1166,1200,1201,1202,1205],{},"En SetFN Workspace puede crear una base de datos mediante un archivo ",[1170,1203,1204],{},".sfn",". Copie un ejemplo de este archivo, entréguelo a una AI como Claude, GPT o Gemini y describa los requisitos, por ejemplo, «Quiero gestionar las existencias de piezas y productos». La AI creará el archivo.",[1166,1207,1208],{},"Copie el siguiente contenido, modifique los requisitos de la parte inferior y entrégueselo a la AI.",[1210,1211,1216],"pre",{"className":1212,"code":1214,"language":1215},[1213],"language-text","Eres un ingeniero que diseña archivos de esquema (.sfn) para la plataforma backend sin código SetFN.\nUn archivo .sfn es un archivo JSON con la siguiente estructura.\n\n{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"nombre_bd_en_ingles_minusculas\",\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\": \"nombre_tabla\", \"cmt\": \"Descripción de esta tabla\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"nombre_columna\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Descripción de la columna\" },\n        { \"name\": \"columna_numerica\", \"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\nPara el campo type de las columnas, usa únicamente serial4 (clave primaria autoincremental), text, int4 (entero) y timestamp.\nAñade notnull, default, unique, index y cmt a las columnas cuando sea necesario.\nEscribe en inglés snake_case los nombres de la base de datos, las tablas y las columnas. Escribe en español todos los valores cmt y los demás textos destinados a las personas.\n\nCon este formato, diseña una base de datos para un \"sistema de gestión de inventario\" destinado a una empresa de fabricación. Debe cumplir estos requisitos:\n\n- Permitir registrar piezas y gestionar las existencias actuales de cada pieza.\n- Permitir registrar productos y gestionar las existencias actuales de cada producto.\n- Cada producto se fabrica ensamblando varias piezas. Debe gestionarse qué piezas necesita cada producto y en qué cantidad mediante una BOM o lista de materiales.\n- Registrar el historial de entradas y salidas de piezas y productos. En particular, cuando se produzca el evento \"fabricar un producto ensamblando piezas\", las piezas utilizadas y la cantidad de productos fabricados deben poder seguirse juntas como un único evento. Más adelante debe ser posible consultar cuántas piezas se usaron para fabricar un producto.\n\nUsa \"inventory_management\" como nombre de la base de datos (dbName).\nDiseña un máximo de cuatro tablas y procura que el resultado sea lo bastante práctico como para utilizarlo directamente en un entorno real.\nDevuelve únicamente el código JSON completo del archivo .sfn, sin explicaciones adicionales.\n","text",[1170,1217,1214],{"__ignoreMap":1218},"",[1166,1220,1221,1222,1225,1226,1229],{},"A continuación se muestra un ejemplo de la respuesta generada. El resultado puede variar según la AI y la ejecución; basta con que tenga una estructura similar. Debe comenzar por ",[1170,1223,1224],{},"{"," y terminar por ",[1170,1227,1228],{},"}",", sin otra explicación, para que pueda pegarlo directamente en el editor.",[1210,1231,1235],{"className":1232,"code":1233,"language":1234,"meta":1218,"style":1218},"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\": \"부품 마스터. 조회/등록/수정은 회원 누구나, 삭제는 관리자만\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"part_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"부품 코드\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"부품명\" },\n        { \"name\": \"spec\", \"type\": \"text\", \"cmt\": \"규격 (예: M2, 220V/50Hz). 같은 이름이라도 규격이 다르면 별도 part_code로 등록\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"부품 분류 (전자부품/기구부품/포장재 등)\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"단위\" },\n        { \"name\": \"unit_cost\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"단가\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"현재고\" },\n        { \"name\": \"safety_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"안전재고(재주문점)\" },\n        { \"name\": \"supplier\", \"type\": \"text\", \"cmt\": \"공급업체\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"최종 등록/수정한 회원 표시 이름\" },\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\": \"제품 마스터. 조회/등록/수정은 회원 누구나, 삭제는 관리자만\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"제품 코드\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"제품명\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"제품 분류\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"단위\" },\n        { \"name\": \"price\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"판매가\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"현재고\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"최종 등록/수정한 회원 표시 이름\" },\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\": \"제품별 부품 구성표(단일 단계). bom_key(product_id:part_id)에 unique 제약을 걸어 같은 제품에 같은 부품이 중복 등록되지 않게 함\" },\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\": \"제품 1개를 만드는 데 필요한 부품 수량\" },\n        { \"name\": \"bom_key\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"product_id:part_id 조합. 중복 등록 방지용\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"등록한 회원 표시 이름\" },\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\": \"입출고/조립 통합 이력. item_type=part|product, tx_type=입고|출고|조립사용|조립생산. 하나의 조립생산 이벤트는 같은 batch_id를 공유하는 조립사용(부품 소모) 여러 건 + 조립생산(제품 증가) 1건으로 구성되어, 제품에 어떤 부품이 얼마나 쓰였는지 추적할 수 있음\" },\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 또는 products.id\" },\n        { \"name\": \"item_name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"등록 시점 품목명 스냅샷\" },\n        { \"name\": \"tx_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"입고 | 출고 | 조립사용 | 조립생산\" },\n        { \"name\": \"reason\", \"type\": \"text\", \"cmt\": \"입출고 사유. 조립사용/조립생산은 tx_type 자체가 사유이므로 비워둠\" },\n        { \"name\": \"qty\", \"type\": \"int4\", \"notnull\": true, \"cmt\": \"항상 양수. 방향은 tx_type으로 판단\" },\n        { \"name\": \"batch_id\", \"type\": \"text\", \"index\": true, \"cmt\": \"조립생산 이벤트 묶음 id. 단순 입출고는 비어 있음\" },\n        { \"name\": \"note\", \"type\": \"text\", \"cmt\": \"메모\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"등록한 회원 표시 이름\" },\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",[1170,1236,1237,1246,1263,1276,1285,1298,1311,1325,1333,1352,1368,1385,1391,1397,1406,1412,1440,1448,1493,1543,1581,1612,1643,1691,1740,1787,1834,1865,1904,1935,1967,1973,1981,2007,2015,2031,2047,2063,2079,2107,2113,2119,2125,2130,2155,2162,2199,2246,2284,2314,2359,2406,2451,2488,2517,2546,2551,2558,2581,2588,2603,2618,2633,2648,2671,2676,2681,2686,2691,2716,2723,2760,2798,2836,2884,2931,2968,2998,3027,3032,3039,3062,3069,3084,3099,3114,3129,3152,3157,3162,3167,3172,3197,3204,3241,3280,3327,3366,3405,3436,3475,3514,3545,3582,3611,3640,3645,3652,3675,3682,3697,3712,3727,3751,3774,3779,3784,3789,3795],{"__ignoreMap":1218},[1238,1239,1242],"span",{"class":1240,"line":1241},"line",1,[1238,1243,1245],{"class":1244},"sMOD_","{\n",[1238,1247,1249,1253,1256,1260],{"class":1240,"line":1248},2,[1238,1250,1252],{"class":1251},"s-m8C","  \"content-type\"",[1238,1254,1255],{"class":1244},": ",[1238,1257,1259],{"class":1258},"sCZoN","\"application/setfn-schema\"",[1238,1261,1262],{"class":1244},",\n",[1238,1264,1266,1269,1271,1274],{"class":1240,"line":1265},3,[1238,1267,1268],{"class":1251},"  \"dbType\"",[1238,1270,1255],{"class":1244},[1238,1272,1273],{"class":1258},"\"sqlite3\"",[1238,1275,1262],{"class":1244},[1238,1277,1279,1282],{"class":1240,"line":1278},4,[1238,1280,1281],{"class":1251},"  \"apiBuild\"",[1238,1283,1284],{"class":1244},": {\n",[1238,1286,1288,1291,1293,1296],{"class":1240,"line":1287},5,[1238,1289,1290],{"class":1251},"    \"dbName\"",[1238,1292,1255],{"class":1244},[1238,1294,1295],{"class":1258},"\"inventory_management\"",[1238,1297,1262],{"class":1244},[1238,1299,1301,1304,1306,1309],{"class":1240,"line":1300},6,[1238,1302,1303],{"class":1251},"    \"dbEngine\"",[1238,1305,1255],{"class":1244},[1238,1307,1308],{"class":1258},"\"sqlite\"",[1238,1310,1262],{"class":1244},[1238,1312,1314,1317,1319,1323],{"class":1240,"line":1313},7,[1238,1315,1316],{"class":1251},"    \"includeClient\"",[1238,1318,1255],{"class":1244},[1238,1320,1322],{"class":1321},"s7F3e","false",[1238,1324,1262],{"class":1244},[1238,1326,1328,1331],{"class":1240,"line":1327},8,[1238,1329,1330],{"class":1251},"    \"features\"",[1238,1332,1284],{"class":1244},[1238,1334,1336,1339,1342,1345,1347,1349],{"class":1240,"line":1335},9,[1238,1337,1338],{"class":1251},"      \"realtime\"",[1238,1340,1341],{"class":1244},": { ",[1238,1343,1344],{"class":1251},"\"enabled\"",[1238,1346,1255],{"class":1244},[1238,1348,1322],{"class":1321},[1238,1350,1351],{"class":1244}," },\n",[1238,1353,1355,1358,1360,1362,1364,1366],{"class":1240,"line":1354},10,[1238,1356,1357],{"class":1251},"      \"upload\"",[1238,1359,1341],{"class":1244},[1238,1361,1344],{"class":1251},[1238,1363,1255],{"class":1244},[1238,1365,1322],{"class":1321},[1238,1367,1351],{"class":1244},[1238,1369,1371,1374,1376,1378,1380,1382],{"class":1240,"line":1370},11,[1238,1372,1373],{"class":1251},"      \"ai-chat\"",[1238,1375,1341],{"class":1244},[1238,1377,1344],{"class":1251},[1238,1379,1255],{"class":1244},[1238,1381,1322],{"class":1321},[1238,1383,1384],{"class":1244}," }\n",[1238,1386,1388],{"class":1240,"line":1387},12,[1238,1389,1390],{"class":1244},"    }\n",[1238,1392,1394],{"class":1240,"line":1393},13,[1238,1395,1396],{"class":1244},"  },\n",[1238,1398,1400,1403],{"class":1240,"line":1399},14,[1238,1401,1402],{"class":1251},"  \"data\"",[1238,1404,1405],{"class":1244},": [\n",[1238,1407,1409],{"class":1240,"line":1408},15,[1238,1410,1411],{"class":1244},"    {\n",[1238,1413,1415,1418,1420,1423,1425,1428,1430,1433,1435,1438],{"class":1240,"line":1414},16,[1238,1416,1417],{"class":1251},"      \"table\"",[1238,1419,1341],{"class":1244},[1238,1421,1422],{"class":1251},"\"name\"",[1238,1424,1255],{"class":1244},[1238,1426,1427],{"class":1258},"\"parts\"",[1238,1429,1180],{"class":1244},[1238,1431,1432],{"class":1251},"\"cmt\"",[1238,1434,1255],{"class":1244},[1238,1436,1437],{"class":1258},"\"부품 마스터. 조회/등록/수정은 회원 누구나, 삭제는 관리자만\"",[1238,1439,1351],{"class":1244},[1238,1441,1443,1446],{"class":1240,"line":1442},17,[1238,1444,1445],{"class":1251},"      \"columns\"",[1238,1447,1405],{"class":1244},[1238,1449,1451,1454,1456,1458,1461,1463,1466,1468,1471,1473,1476,1478,1481,1483,1486,1488,1491],{"class":1240,"line":1450},18,[1238,1452,1453],{"class":1244},"        { ",[1238,1455,1422],{"class":1251},[1238,1457,1255],{"class":1244},[1238,1459,1460],{"class":1258},"\"id\"",[1238,1462,1180],{"class":1244},[1238,1464,1465],{"class":1251},"\"type\"",[1238,1467,1255],{"class":1244},[1238,1469,1470],{"class":1258},"\"serial4\"",[1238,1472,1180],{"class":1244},[1238,1474,1475],{"class":1251},"\"primary\"",[1238,1477,1255],{"class":1244},[1238,1479,1480],{"class":1321},"true",[1238,1482,1180],{"class":1244},[1238,1484,1485],{"class":1251},"\"default\"",[1238,1487,1255],{"class":1244},[1238,1489,1490],{"class":1258},"\"auto_increment\"",[1238,1492,1351],{"class":1244},[1238,1494,1496,1498,1500,1502,1505,1507,1509,1511,1514,1516,1519,1521,1523,1525,1528,1530,1532,1534,1536,1538,1541],{"class":1240,"line":1495},19,[1238,1497,1453],{"class":1244},[1238,1499,1422],{"class":1251},[1238,1501,1255],{"class":1244},[1238,1503,1504],{"class":1258},"\"part_code\"",[1238,1506,1180],{"class":1244},[1238,1508,1465],{"class":1251},[1238,1510,1255],{"class":1244},[1238,1512,1513],{"class":1258},"\"text\"",[1238,1515,1180],{"class":1244},[1238,1517,1518],{"class":1251},"\"notnull\"",[1238,1520,1255],{"class":1244},[1238,1522,1480],{"class":1321},[1238,1524,1180],{"class":1244},[1238,1526,1527],{"class":1251},"\"unique\"",[1238,1529,1255],{"class":1244},[1238,1531,1480],{"class":1321},[1238,1533,1180],{"class":1244},[1238,1535,1432],{"class":1251},[1238,1537,1255],{"class":1244},[1238,1539,1540],{"class":1258},"\"부품 코드\"",[1238,1542,1351],{"class":1244},[1238,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576,1579],{"class":1240,"line":1545},20,[1238,1547,1453],{"class":1244},[1238,1549,1422],{"class":1251},[1238,1551,1255],{"class":1244},[1238,1553,1422],{"class":1258},[1238,1555,1180],{"class":1244},[1238,1557,1465],{"class":1251},[1238,1559,1255],{"class":1244},[1238,1561,1513],{"class":1258},[1238,1563,1180],{"class":1244},[1238,1565,1518],{"class":1251},[1238,1567,1255],{"class":1244},[1238,1569,1480],{"class":1321},[1238,1571,1180],{"class":1244},[1238,1573,1432],{"class":1251},[1238,1575,1255],{"class":1244},[1238,1577,1578],{"class":1258},"\"부품명\"",[1238,1580,1351],{"class":1244},[1238,1582,1584,1586,1588,1590,1593,1595,1597,1599,1601,1603,1605,1607,1610],{"class":1240,"line":1583},21,[1238,1585,1453],{"class":1244},[1238,1587,1422],{"class":1251},[1238,1589,1255],{"class":1244},[1238,1591,1592],{"class":1258},"\"spec\"",[1238,1594,1180],{"class":1244},[1238,1596,1465],{"class":1251},[1238,1598,1255],{"class":1244},[1238,1600,1513],{"class":1258},[1238,1602,1180],{"class":1244},[1238,1604,1432],{"class":1251},[1238,1606,1255],{"class":1244},[1238,1608,1609],{"class":1258},"\"규격 (예: M2, 220V/50Hz). 같은 이름이라도 규격이 다르면 별도 part_code로 등록\"",[1238,1611,1351],{"class":1244},[1238,1613,1615,1617,1619,1621,1624,1626,1628,1630,1632,1634,1636,1638,1641],{"class":1240,"line":1614},22,[1238,1616,1453],{"class":1244},[1238,1618,1422],{"class":1251},[1238,1620,1255],{"class":1244},[1238,1622,1623],{"class":1258},"\"category\"",[1238,1625,1180],{"class":1244},[1238,1627,1465],{"class":1251},[1238,1629,1255],{"class":1244},[1238,1631,1513],{"class":1258},[1238,1633,1180],{"class":1244},[1238,1635,1432],{"class":1251},[1238,1637,1255],{"class":1244},[1238,1639,1640],{"class":1258},"\"부품 분류 (전자부품/기구부품/포장재 등)\"",[1238,1642,1351],{"class":1244},[1238,1644,1646,1648,1650,1652,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1680,1682,1684,1686,1689],{"class":1240,"line":1645},23,[1238,1647,1453],{"class":1244},[1238,1649,1422],{"class":1251},[1238,1651,1255],{"class":1244},[1238,1653,1654],{"class":1258},"\"unit\"",[1238,1656,1180],{"class":1244},[1238,1658,1465],{"class":1251},[1238,1660,1255],{"class":1244},[1238,1662,1513],{"class":1258},[1238,1664,1180],{"class":1244},[1238,1666,1518],{"class":1251},[1238,1668,1255],{"class":1244},[1238,1670,1480],{"class":1321},[1238,1672,1180],{"class":1244},[1238,1674,1485],{"class":1251},[1238,1676,1255],{"class":1244},[1238,1678,1679],{"class":1258},"\"EA\"",[1238,1681,1180],{"class":1244},[1238,1683,1432],{"class":1251},[1238,1685,1255],{"class":1244},[1238,1687,1688],{"class":1258},"\"단위\"",[1238,1690,1351],{"class":1244},[1238,1692,1694,1696,1698,1700,1703,1705,1707,1709,1712,1714,1716,1718,1720,1722,1724,1726,1729,1731,1733,1735,1738],{"class":1240,"line":1693},24,[1238,1695,1453],{"class":1244},[1238,1697,1422],{"class":1251},[1238,1699,1255],{"class":1244},[1238,1701,1702],{"class":1258},"\"unit_cost\"",[1238,1704,1180],{"class":1244},[1238,1706,1465],{"class":1251},[1238,1708,1255],{"class":1244},[1238,1710,1711],{"class":1258},"\"int4\"",[1238,1713,1180],{"class":1244},[1238,1715,1518],{"class":1251},[1238,1717,1255],{"class":1244},[1238,1719,1480],{"class":1321},[1238,1721,1180],{"class":1244},[1238,1723,1485],{"class":1251},[1238,1725,1255],{"class":1244},[1238,1727,1728],{"class":1258},"\"0\"",[1238,1730,1180],{"class":1244},[1238,1732,1432],{"class":1251},[1238,1734,1255],{"class":1244},[1238,1736,1737],{"class":1258},"\"단가\"",[1238,1739,1351],{"class":1244},[1238,1741,1743,1745,1747,1749,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1785],{"class":1240,"line":1742},25,[1238,1744,1453],{"class":1244},[1238,1746,1422],{"class":1251},[1238,1748,1255],{"class":1244},[1238,1750,1751],{"class":1258},"\"current_stock\"",[1238,1753,1180],{"class":1244},[1238,1755,1465],{"class":1251},[1238,1757,1255],{"class":1244},[1238,1759,1711],{"class":1258},[1238,1761,1180],{"class":1244},[1238,1763,1518],{"class":1251},[1238,1765,1255],{"class":1244},[1238,1767,1480],{"class":1321},[1238,1769,1180],{"class":1244},[1238,1771,1485],{"class":1251},[1238,1773,1255],{"class":1244},[1238,1775,1728],{"class":1258},[1238,1777,1180],{"class":1244},[1238,1779,1432],{"class":1251},[1238,1781,1255],{"class":1244},[1238,1783,1784],{"class":1258},"\"현재고\"",[1238,1786,1351],{"class":1244},[1238,1788,1790,1792,1794,1796,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1832],{"class":1240,"line":1789},26,[1238,1791,1453],{"class":1244},[1238,1793,1422],{"class":1251},[1238,1795,1255],{"class":1244},[1238,1797,1798],{"class":1258},"\"safety_stock\"",[1238,1800,1180],{"class":1244},[1238,1802,1465],{"class":1251},[1238,1804,1255],{"class":1244},[1238,1806,1711],{"class":1258},[1238,1808,1180],{"class":1244},[1238,1810,1518],{"class":1251},[1238,1812,1255],{"class":1244},[1238,1814,1480],{"class":1321},[1238,1816,1180],{"class":1244},[1238,1818,1485],{"class":1251},[1238,1820,1255],{"class":1244},[1238,1822,1728],{"class":1258},[1238,1824,1180],{"class":1244},[1238,1826,1432],{"class":1251},[1238,1828,1255],{"class":1244},[1238,1830,1831],{"class":1258},"\"안전재고(재주문점)\"",[1238,1833,1351],{"class":1244},[1238,1835,1837,1839,1841,1843,1846,1848,1850,1852,1854,1856,1858,1860,1863],{"class":1240,"line":1836},27,[1238,1838,1453],{"class":1244},[1238,1840,1422],{"class":1251},[1238,1842,1255],{"class":1244},[1238,1844,1845],{"class":1258},"\"supplier\"",[1238,1847,1180],{"class":1244},[1238,1849,1465],{"class":1251},[1238,1851,1255],{"class":1244},[1238,1853,1513],{"class":1258},[1238,1855,1180],{"class":1244},[1238,1857,1432],{"class":1251},[1238,1859,1255],{"class":1244},[1238,1861,1862],{"class":1258},"\"공급업체\"",[1238,1864,1351],{"class":1244},[1238,1866,1868,1870,1872,1874,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1898,1900,1902],{"class":1240,"line":1867},28,[1238,1869,1453],{"class":1244},[1238,1871,1422],{"class":1251},[1238,1873,1255],{"class":1244},[1238,1875,1876],{"class":1258},"\"_user_id\"",[1238,1878,1180],{"class":1244},[1238,1880,1465],{"class":1251},[1238,1882,1255],{"class":1244},[1238,1884,1711],{"class":1258},[1238,1886,1180],{"class":1244},[1238,1888,1518],{"class":1251},[1238,1890,1255],{"class":1244},[1238,1892,1480],{"class":1321},[1238,1894,1180],{"class":1244},[1238,1896,1897],{"class":1251},"\"index\"",[1238,1899,1255],{"class":1244},[1238,1901,1480],{"class":1321},[1238,1903,1351],{"class":1244},[1238,1905,1907,1909,1911,1913,1916,1918,1920,1922,1924,1926,1928,1930,1933],{"class":1240,"line":1906},29,[1238,1908,1453],{"class":1244},[1238,1910,1422],{"class":1251},[1238,1912,1255],{"class":1244},[1238,1914,1915],{"class":1258},"\"_nick\"",[1238,1917,1180],{"class":1244},[1238,1919,1465],{"class":1251},[1238,1921,1255],{"class":1244},[1238,1923,1513],{"class":1258},[1238,1925,1180],{"class":1244},[1238,1927,1432],{"class":1251},[1238,1929,1255],{"class":1244},[1238,1931,1932],{"class":1258},"\"최종 등록/수정한 회원 표시 이름\"",[1238,1934,1351],{"class":1244},[1238,1936,1938,1940,1942,1944,1947,1949,1951,1953,1956,1958,1960,1962,1965],{"class":1240,"line":1937},30,[1238,1939,1453],{"class":1244},[1238,1941,1422],{"class":1251},[1238,1943,1255],{"class":1244},[1238,1945,1946],{"class":1258},"\"_created_at\"",[1238,1948,1180],{"class":1244},[1238,1950,1465],{"class":1251},[1238,1952,1255],{"class":1244},[1238,1954,1955],{"class":1258},"\"timestamp\"",[1238,1957,1180],{"class":1244},[1238,1959,1485],{"class":1251},[1238,1961,1255],{"class":1244},[1238,1963,1964],{"class":1258},"\"now()\"",[1238,1966,1384],{"class":1244},[1238,1968,1970],{"class":1240,"line":1969},31,[1238,1971,1972],{"class":1244},"      ],\n",[1238,1974,1976,1979],{"class":1240,"line":1975},32,[1238,1977,1978],{"class":1251},"      \"permissions\"",[1238,1980,1284],{"class":1244},[1238,1982,1984,1987,1989,1992,1994,1996,1998,2001,2003,2005],{"class":1240,"line":1983},33,[1238,1985,1986],{"class":1251},"        \"security\"",[1238,1988,1341],{"class":1244},[1238,1990,1991],{"class":1251},"\"login\"",[1238,1993,1255],{"class":1244},[1238,1995,1480],{"class":1321},[1238,1997,1180],{"class":1244},[1238,1999,2000],{"class":1251},"\"ownerColumn\"",[1238,2002,1255],{"class":1244},[1238,2004,1876],{"class":1258},[1238,2006,1351],{"class":1244},[1238,2008,2010,2013],{"class":1240,"line":2009},34,[1238,2011,2012],{"class":1251},"        \"ops\"",[1238,2014,1284],{"class":1244},[1238,2016,2018,2021,2023,2025,2027,2029],{"class":1240,"line":2017},35,[1238,2019,2020],{"class":1251},"          \"list\"",[1238,2022,1341],{"class":1244},[1238,2024,1991],{"class":1251},[1238,2026,1255],{"class":1244},[1238,2028,1480],{"class":1321},[1238,2030,1351],{"class":1244},[1238,2032,2034,2037,2039,2041,2043,2045],{"class":1240,"line":2033},36,[1238,2035,2036],{"class":1251},"          \"view\"",[1238,2038,1341],{"class":1244},[1238,2040,1991],{"class":1251},[1238,2042,1255],{"class":1244},[1238,2044,1480],{"class":1321},[1238,2046,1351],{"class":1244},[1238,2048,2050,2053,2055,2057,2059,2061],{"class":1240,"line":2049},37,[1238,2051,2052],{"class":1251},"          \"create\"",[1238,2054,1341],{"class":1244},[1238,2056,1991],{"class":1251},[1238,2058,1255],{"class":1244},[1238,2060,1480],{"class":1321},[1238,2062,1351],{"class":1244},[1238,2064,2066,2069,2071,2073,2075,2077],{"class":1240,"line":2065},38,[1238,2067,2068],{"class":1251},"          \"update\"",[1238,2070,1341],{"class":1244},[1238,2072,1991],{"class":1251},[1238,2074,1255],{"class":1244},[1238,2076,1480],{"class":1321},[1238,2078,1351],{"class":1244},[1238,2080,2082,2085,2087,2089,2091,2093,2095,2098,2101,2104],{"class":1240,"line":2081},39,[1238,2083,2084],{"class":1251},"          \"delete\"",[1238,2086,1341],{"class":1244},[1238,2088,1991],{"class":1251},[1238,2090,1255],{"class":1244},[1238,2092,1480],{"class":1321},[1238,2094,1180],{"class":1244},[1238,2096,2097],{"class":1251},"\"roles\"",[1238,2099,2100],{"class":1244},": [",[1238,2102,2103],{"class":1258},"\"admin\"",[1238,2105,2106],{"class":1244},"] }\n",[1238,2108,2110],{"class":1240,"line":2109},40,[1238,2111,2112],{"class":1244},"        }\n",[1238,2114,2116],{"class":1240,"line":2115},41,[1238,2117,2118],{"class":1244},"      }\n",[1238,2120,2122],{"class":1240,"line":2121},42,[1238,2123,2124],{"class":1244},"    },\n",[1238,2126,2128],{"class":1240,"line":2127},43,[1238,2129,1411],{"class":1244},[1238,2131,2133,2135,2137,2139,2141,2144,2146,2148,2150,2153],{"class":1240,"line":2132},44,[1238,2134,1417],{"class":1251},[1238,2136,1341],{"class":1244},[1238,2138,1422],{"class":1251},[1238,2140,1255],{"class":1244},[1238,2142,2143],{"class":1258},"\"products\"",[1238,2145,1180],{"class":1244},[1238,2147,1432],{"class":1251},[1238,2149,1255],{"class":1244},[1238,2151,2152],{"class":1258},"\"제품 마스터. 조회/등록/수정은 회원 누구나, 삭제는 관리자만\"",[1238,2154,1351],{"class":1244},[1238,2156,2158,2160],{"class":1240,"line":2157},45,[1238,2159,1445],{"class":1251},[1238,2161,1405],{"class":1244},[1238,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197],{"class":1240,"line":2164},46,[1238,2166,1453],{"class":1244},[1238,2168,1422],{"class":1251},[1238,2170,1255],{"class":1244},[1238,2172,1460],{"class":1258},[1238,2174,1180],{"class":1244},[1238,2176,1465],{"class":1251},[1238,2178,1255],{"class":1244},[1238,2180,1470],{"class":1258},[1238,2182,1180],{"class":1244},[1238,2184,1475],{"class":1251},[1238,2186,1255],{"class":1244},[1238,2188,1480],{"class":1321},[1238,2190,1180],{"class":1244},[1238,2192,1485],{"class":1251},[1238,2194,1255],{"class":1244},[1238,2196,1490],{"class":1258},[1238,2198,1351],{"class":1244},[1238,2200,2202,2204,2206,2208,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2244],{"class":1240,"line":2201},47,[1238,2203,1453],{"class":1244},[1238,2205,1422],{"class":1251},[1238,2207,1255],{"class":1244},[1238,2209,2210],{"class":1258},"\"product_code\"",[1238,2212,1180],{"class":1244},[1238,2214,1465],{"class":1251},[1238,2216,1255],{"class":1244},[1238,2218,1513],{"class":1258},[1238,2220,1180],{"class":1244},[1238,2222,1518],{"class":1251},[1238,2224,1255],{"class":1244},[1238,2226,1480],{"class":1321},[1238,2228,1180],{"class":1244},[1238,2230,1527],{"class":1251},[1238,2232,1255],{"class":1244},[1238,2234,1480],{"class":1321},[1238,2236,1180],{"class":1244},[1238,2238,1432],{"class":1251},[1238,2240,1255],{"class":1244},[1238,2242,2243],{"class":1258},"\"제품 코드\"",[1238,2245,1351],{"class":1244},[1238,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2282],{"class":1240,"line":2248},48,[1238,2250,1453],{"class":1244},[1238,2252,1422],{"class":1251},[1238,2254,1255],{"class":1244},[1238,2256,1422],{"class":1258},[1238,2258,1180],{"class":1244},[1238,2260,1465],{"class":1251},[1238,2262,1255],{"class":1244},[1238,2264,1513],{"class":1258},[1238,2266,1180],{"class":1244},[1238,2268,1518],{"class":1251},[1238,2270,1255],{"class":1244},[1238,2272,1480],{"class":1321},[1238,2274,1180],{"class":1244},[1238,2276,1432],{"class":1251},[1238,2278,1255],{"class":1244},[1238,2280,2281],{"class":1258},"\"제품명\"",[1238,2283,1351],{"class":1244},[1238,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2312],{"class":1240,"line":2286},49,[1238,2288,1453],{"class":1244},[1238,2290,1422],{"class":1251},[1238,2292,1255],{"class":1244},[1238,2294,1623],{"class":1258},[1238,2296,1180],{"class":1244},[1238,2298,1465],{"class":1251},[1238,2300,1255],{"class":1244},[1238,2302,1513],{"class":1258},[1238,2304,1180],{"class":1244},[1238,2306,1432],{"class":1251},[1238,2308,1255],{"class":1244},[1238,2310,2311],{"class":1258},"\"제품 분류\"",[1238,2313,1351],{"class":1244},[1238,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357],{"class":1240,"line":2316},50,[1238,2318,1453],{"class":1244},[1238,2320,1422],{"class":1251},[1238,2322,1255],{"class":1244},[1238,2324,1654],{"class":1258},[1238,2326,1180],{"class":1244},[1238,2328,1465],{"class":1251},[1238,2330,1255],{"class":1244},[1238,2332,1513],{"class":1258},[1238,2334,1180],{"class":1244},[1238,2336,1518],{"class":1251},[1238,2338,1255],{"class":1244},[1238,2340,1480],{"class":1321},[1238,2342,1180],{"class":1244},[1238,2344,1485],{"class":1251},[1238,2346,1255],{"class":1244},[1238,2348,1679],{"class":1258},[1238,2350,1180],{"class":1244},[1238,2352,1432],{"class":1251},[1238,2354,1255],{"class":1244},[1238,2356,1688],{"class":1258},[1238,2358,1351],{"class":1244},[1238,2360,2362,2364,2366,2368,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2404],{"class":1240,"line":2361},51,[1238,2363,1453],{"class":1244},[1238,2365,1422],{"class":1251},[1238,2367,1255],{"class":1244},[1238,2369,2370],{"class":1258},"\"price\"",[1238,2372,1180],{"class":1244},[1238,2374,1465],{"class":1251},[1238,2376,1255],{"class":1244},[1238,2378,1711],{"class":1258},[1238,2380,1180],{"class":1244},[1238,2382,1518],{"class":1251},[1238,2384,1255],{"class":1244},[1238,2386,1480],{"class":1321},[1238,2388,1180],{"class":1244},[1238,2390,1485],{"class":1251},[1238,2392,1255],{"class":1244},[1238,2394,1728],{"class":1258},[1238,2396,1180],{"class":1244},[1238,2398,1432],{"class":1251},[1238,2400,1255],{"class":1244},[1238,2402,2403],{"class":1258},"\"판매가\"",[1238,2405,1351],{"class":1244},[1238,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449],{"class":1240,"line":2408},52,[1238,2410,1453],{"class":1244},[1238,2412,1422],{"class":1251},[1238,2414,1255],{"class":1244},[1238,2416,1751],{"class":1258},[1238,2418,1180],{"class":1244},[1238,2420,1465],{"class":1251},[1238,2422,1255],{"class":1244},[1238,2424,1711],{"class":1258},[1238,2426,1180],{"class":1244},[1238,2428,1518],{"class":1251},[1238,2430,1255],{"class":1244},[1238,2432,1480],{"class":1321},[1238,2434,1180],{"class":1244},[1238,2436,1485],{"class":1251},[1238,2438,1255],{"class":1244},[1238,2440,1728],{"class":1258},[1238,2442,1180],{"class":1244},[1238,2444,1432],{"class":1251},[1238,2446,1255],{"class":1244},[1238,2448,1784],{"class":1258},[1238,2450,1351],{"class":1244},[1238,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486],{"class":1240,"line":2453},53,[1238,2455,1453],{"class":1244},[1238,2457,1422],{"class":1251},[1238,2459,1255],{"class":1244},[1238,2461,1876],{"class":1258},[1238,2463,1180],{"class":1244},[1238,2465,1465],{"class":1251},[1238,2467,1255],{"class":1244},[1238,2469,1711],{"class":1258},[1238,2471,1180],{"class":1244},[1238,2473,1518],{"class":1251},[1238,2475,1255],{"class":1244},[1238,2477,1480],{"class":1321},[1238,2479,1180],{"class":1244},[1238,2481,1897],{"class":1251},[1238,2483,1255],{"class":1244},[1238,2485,1480],{"class":1321},[1238,2487,1351],{"class":1244},[1238,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515],{"class":1240,"line":2490},54,[1238,2492,1453],{"class":1244},[1238,2494,1422],{"class":1251},[1238,2496,1255],{"class":1244},[1238,2498,1915],{"class":1258},[1238,2500,1180],{"class":1244},[1238,2502,1465],{"class":1251},[1238,2504,1255],{"class":1244},[1238,2506,1513],{"class":1258},[1238,2508,1180],{"class":1244},[1238,2510,1432],{"class":1251},[1238,2512,1255],{"class":1244},[1238,2514,1932],{"class":1258},[1238,2516,1351],{"class":1244},[1238,2518,2520,2522,2524,2526,2528,2530,2532,2534,2536,2538,2540,2542,2544],{"class":1240,"line":2519},55,[1238,2521,1453],{"class":1244},[1238,2523,1422],{"class":1251},[1238,2525,1255],{"class":1244},[1238,2527,1946],{"class":1258},[1238,2529,1180],{"class":1244},[1238,2531,1465],{"class":1251},[1238,2533,1255],{"class":1244},[1238,2535,1955],{"class":1258},[1238,2537,1180],{"class":1244},[1238,2539,1485],{"class":1251},[1238,2541,1255],{"class":1244},[1238,2543,1964],{"class":1258},[1238,2545,1384],{"class":1244},[1238,2547,2549],{"class":1240,"line":2548},56,[1238,2550,1972],{"class":1244},[1238,2552,2554,2556],{"class":1240,"line":2553},57,[1238,2555,1978],{"class":1251},[1238,2557,1284],{"class":1244},[1238,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579],{"class":1240,"line":2560},58,[1238,2562,1986],{"class":1251},[1238,2564,1341],{"class":1244},[1238,2566,1991],{"class":1251},[1238,2568,1255],{"class":1244},[1238,2570,1480],{"class":1321},[1238,2572,1180],{"class":1244},[1238,2574,2000],{"class":1251},[1238,2576,1255],{"class":1244},[1238,2578,1876],{"class":1258},[1238,2580,1351],{"class":1244},[1238,2582,2584,2586],{"class":1240,"line":2583},59,[1238,2585,2012],{"class":1251},[1238,2587,1284],{"class":1244},[1238,2589,2591,2593,2595,2597,2599,2601],{"class":1240,"line":2590},60,[1238,2592,2020],{"class":1251},[1238,2594,1341],{"class":1244},[1238,2596,1991],{"class":1251},[1238,2598,1255],{"class":1244},[1238,2600,1480],{"class":1321},[1238,2602,1351],{"class":1244},[1238,2604,2606,2608,2610,2612,2614,2616],{"class":1240,"line":2605},61,[1238,2607,2036],{"class":1251},[1238,2609,1341],{"class":1244},[1238,2611,1991],{"class":1251},[1238,2613,1255],{"class":1244},[1238,2615,1480],{"class":1321},[1238,2617,1351],{"class":1244},[1238,2619,2621,2623,2625,2627,2629,2631],{"class":1240,"line":2620},62,[1238,2622,2052],{"class":1251},[1238,2624,1341],{"class":1244},[1238,2626,1991],{"class":1251},[1238,2628,1255],{"class":1244},[1238,2630,1480],{"class":1321},[1238,2632,1351],{"class":1244},[1238,2634,2636,2638,2640,2642,2644,2646],{"class":1240,"line":2635},63,[1238,2637,2068],{"class":1251},[1238,2639,1341],{"class":1244},[1238,2641,1991],{"class":1251},[1238,2643,1255],{"class":1244},[1238,2645,1480],{"class":1321},[1238,2647,1351],{"class":1244},[1238,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669],{"class":1240,"line":2650},64,[1238,2652,2084],{"class":1251},[1238,2654,1341],{"class":1244},[1238,2656,1991],{"class":1251},[1238,2658,1255],{"class":1244},[1238,2660,1480],{"class":1321},[1238,2662,1180],{"class":1244},[1238,2664,2097],{"class":1251},[1238,2666,2100],{"class":1244},[1238,2668,2103],{"class":1258},[1238,2670,2106],{"class":1244},[1238,2672,2674],{"class":1240,"line":2673},65,[1238,2675,2112],{"class":1244},[1238,2677,2679],{"class":1240,"line":2678},66,[1238,2680,2118],{"class":1244},[1238,2682,2684],{"class":1240,"line":2683},67,[1238,2685,2124],{"class":1244},[1238,2687,2689],{"class":1240,"line":2688},68,[1238,2690,1411],{"class":1244},[1238,2692,2694,2696,2698,2700,2702,2705,2707,2709,2711,2714],{"class":1240,"line":2693},69,[1238,2695,1417],{"class":1251},[1238,2697,1341],{"class":1244},[1238,2699,1422],{"class":1251},[1238,2701,1255],{"class":1244},[1238,2703,2704],{"class":1258},"\"bom\"",[1238,2706,1180],{"class":1244},[1238,2708,1432],{"class":1251},[1238,2710,1255],{"class":1244},[1238,2712,2713],{"class":1258},"\"제품별 부품 구성표(단일 단계). bom_key(product_id:part_id)에 unique 제약을 걸어 같은 제품에 같은 부품이 중복 등록되지 않게 함\"",[1238,2715,1351],{"class":1244},[1238,2717,2719,2721],{"class":1240,"line":2718},70,[1238,2720,1445],{"class":1251},[1238,2722,1405],{"class":1244},[1238,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758],{"class":1240,"line":2725},71,[1238,2727,1453],{"class":1244},[1238,2729,1422],{"class":1251},[1238,2731,1255],{"class":1244},[1238,2733,1460],{"class":1258},[1238,2735,1180],{"class":1244},[1238,2737,1465],{"class":1251},[1238,2739,1255],{"class":1244},[1238,2741,1470],{"class":1258},[1238,2743,1180],{"class":1244},[1238,2745,1475],{"class":1251},[1238,2747,1255],{"class":1244},[1238,2749,1480],{"class":1321},[1238,2751,1180],{"class":1244},[1238,2753,1485],{"class":1251},[1238,2755,1255],{"class":1244},[1238,2757,1490],{"class":1258},[1238,2759,1351],{"class":1244},[1238,2761,2763,2765,2767,2769,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796],{"class":1240,"line":2762},72,[1238,2764,1453],{"class":1244},[1238,2766,1422],{"class":1251},[1238,2768,1255],{"class":1244},[1238,2770,2771],{"class":1258},"\"product_id\"",[1238,2773,1180],{"class":1244},[1238,2775,1465],{"class":1251},[1238,2777,1255],{"class":1244},[1238,2779,1711],{"class":1258},[1238,2781,1180],{"class":1244},[1238,2783,1518],{"class":1251},[1238,2785,1255],{"class":1244},[1238,2787,1480],{"class":1321},[1238,2789,1180],{"class":1244},[1238,2791,1897],{"class":1251},[1238,2793,1255],{"class":1244},[1238,2795,1480],{"class":1321},[1238,2797,1351],{"class":1244},[1238,2799,2801,2803,2805,2807,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834],{"class":1240,"line":2800},73,[1238,2802,1453],{"class":1244},[1238,2804,1422],{"class":1251},[1238,2806,1255],{"class":1244},[1238,2808,2809],{"class":1258},"\"part_id\"",[1238,2811,1180],{"class":1244},[1238,2813,1465],{"class":1251},[1238,2815,1255],{"class":1244},[1238,2817,1711],{"class":1258},[1238,2819,1180],{"class":1244},[1238,2821,1518],{"class":1251},[1238,2823,1255],{"class":1244},[1238,2825,1480],{"class":1321},[1238,2827,1180],{"class":1244},[1238,2829,1897],{"class":1251},[1238,2831,1255],{"class":1244},[1238,2833,1480],{"class":1321},[1238,2835,1351],{"class":1244},[1238,2837,2839,2841,2843,2845,2848,2850,2852,2854,2856,2858,2860,2862,2864,2866,2868,2870,2873,2875,2877,2879,2882],{"class":1240,"line":2838},74,[1238,2840,1453],{"class":1244},[1238,2842,1422],{"class":1251},[1238,2844,1255],{"class":1244},[1238,2846,2847],{"class":1258},"\"qty_per_unit\"",[1238,2849,1180],{"class":1244},[1238,2851,1465],{"class":1251},[1238,2853,1255],{"class":1244},[1238,2855,1711],{"class":1258},[1238,2857,1180],{"class":1244},[1238,2859,1518],{"class":1251},[1238,2861,1255],{"class":1244},[1238,2863,1480],{"class":1321},[1238,2865,1180],{"class":1244},[1238,2867,1485],{"class":1251},[1238,2869,1255],{"class":1244},[1238,2871,2872],{"class":1258},"\"1\"",[1238,2874,1180],{"class":1244},[1238,2876,1432],{"class":1251},[1238,2878,1255],{"class":1244},[1238,2880,2881],{"class":1258},"\"제품 1개를 만드는 데 필요한 부품 수량\"",[1238,2883,1351],{"class":1244},[1238,2885,2887,2889,2891,2893,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2929],{"class":1240,"line":2886},75,[1238,2888,1453],{"class":1244},[1238,2890,1422],{"class":1251},[1238,2892,1255],{"class":1244},[1238,2894,2895],{"class":1258},"\"bom_key\"",[1238,2897,1180],{"class":1244},[1238,2899,1465],{"class":1251},[1238,2901,1255],{"class":1244},[1238,2903,1513],{"class":1258},[1238,2905,1180],{"class":1244},[1238,2907,1518],{"class":1251},[1238,2909,1255],{"class":1244},[1238,2911,1480],{"class":1321},[1238,2913,1180],{"class":1244},[1238,2915,1527],{"class":1251},[1238,2917,1255],{"class":1244},[1238,2919,1480],{"class":1321},[1238,2921,1180],{"class":1244},[1238,2923,1432],{"class":1251},[1238,2925,1255],{"class":1244},[1238,2927,2928],{"class":1258},"\"product_id:part_id 조합. 중복 등록 방지용\"",[1238,2930,1351],{"class":1244},[1238,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966],{"class":1240,"line":2933},76,[1238,2935,1453],{"class":1244},[1238,2937,1422],{"class":1251},[1238,2939,1255],{"class":1244},[1238,2941,1876],{"class":1258},[1238,2943,1180],{"class":1244},[1238,2945,1465],{"class":1251},[1238,2947,1255],{"class":1244},[1238,2949,1711],{"class":1258},[1238,2951,1180],{"class":1244},[1238,2953,1518],{"class":1251},[1238,2955,1255],{"class":1244},[1238,2957,1480],{"class":1321},[1238,2959,1180],{"class":1244},[1238,2961,1897],{"class":1251},[1238,2963,1255],{"class":1244},[1238,2965,1480],{"class":1321},[1238,2967,1351],{"class":1244},[1238,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2996],{"class":1240,"line":2970},77,[1238,2972,1453],{"class":1244},[1238,2974,1422],{"class":1251},[1238,2976,1255],{"class":1244},[1238,2978,1915],{"class":1258},[1238,2980,1180],{"class":1244},[1238,2982,1465],{"class":1251},[1238,2984,1255],{"class":1244},[1238,2986,1513],{"class":1258},[1238,2988,1180],{"class":1244},[1238,2990,1432],{"class":1251},[1238,2992,1255],{"class":1244},[1238,2994,2995],{"class":1258},"\"등록한 회원 표시 이름\"",[1238,2997,1351],{"class":1244},[1238,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025],{"class":1240,"line":3000},78,[1238,3002,1453],{"class":1244},[1238,3004,1422],{"class":1251},[1238,3006,1255],{"class":1244},[1238,3008,1946],{"class":1258},[1238,3010,1180],{"class":1244},[1238,3012,1465],{"class":1251},[1238,3014,1255],{"class":1244},[1238,3016,1955],{"class":1258},[1238,3018,1180],{"class":1244},[1238,3020,1485],{"class":1251},[1238,3022,1255],{"class":1244},[1238,3024,1964],{"class":1258},[1238,3026,1384],{"class":1244},[1238,3028,3030],{"class":1240,"line":3029},79,[1238,3031,1972],{"class":1244},[1238,3033,3035,3037],{"class":1240,"line":3034},80,[1238,3036,1978],{"class":1251},[1238,3038,1284],{"class":1244},[1238,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060],{"class":1240,"line":3041},81,[1238,3043,1986],{"class":1251},[1238,3045,1341],{"class":1244},[1238,3047,1991],{"class":1251},[1238,3049,1255],{"class":1244},[1238,3051,1480],{"class":1321},[1238,3053,1180],{"class":1244},[1238,3055,2000],{"class":1251},[1238,3057,1255],{"class":1244},[1238,3059,1876],{"class":1258},[1238,3061,1351],{"class":1244},[1238,3063,3065,3067],{"class":1240,"line":3064},82,[1238,3066,2012],{"class":1251},[1238,3068,1284],{"class":1244},[1238,3070,3072,3074,3076,3078,3080,3082],{"class":1240,"line":3071},83,[1238,3073,2020],{"class":1251},[1238,3075,1341],{"class":1244},[1238,3077,1991],{"class":1251},[1238,3079,1255],{"class":1244},[1238,3081,1480],{"class":1321},[1238,3083,1351],{"class":1244},[1238,3085,3087,3089,3091,3093,3095,3097],{"class":1240,"line":3086},84,[1238,3088,2036],{"class":1251},[1238,3090,1341],{"class":1244},[1238,3092,1991],{"class":1251},[1238,3094,1255],{"class":1244},[1238,3096,1480],{"class":1321},[1238,3098,1351],{"class":1244},[1238,3100,3102,3104,3106,3108,3110,3112],{"class":1240,"line":3101},85,[1238,3103,2052],{"class":1251},[1238,3105,1341],{"class":1244},[1238,3107,1991],{"class":1251},[1238,3109,1255],{"class":1244},[1238,3111,1480],{"class":1321},[1238,3113,1351],{"class":1244},[1238,3115,3117,3119,3121,3123,3125,3127],{"class":1240,"line":3116},86,[1238,3118,2068],{"class":1251},[1238,3120,1341],{"class":1244},[1238,3122,1991],{"class":1251},[1238,3124,1255],{"class":1244},[1238,3126,1480],{"class":1321},[1238,3128,1351],{"class":1244},[1238,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150],{"class":1240,"line":3131},87,[1238,3133,2084],{"class":1251},[1238,3135,1341],{"class":1244},[1238,3137,1991],{"class":1251},[1238,3139,1255],{"class":1244},[1238,3141,1480],{"class":1321},[1238,3143,1180],{"class":1244},[1238,3145,2097],{"class":1251},[1238,3147,2100],{"class":1244},[1238,3149,2103],{"class":1258},[1238,3151,2106],{"class":1244},[1238,3153,3155],{"class":1240,"line":3154},88,[1238,3156,2112],{"class":1244},[1238,3158,3160],{"class":1240,"line":3159},89,[1238,3161,2118],{"class":1244},[1238,3163,3165],{"class":1240,"line":3164},90,[1238,3166,2124],{"class":1244},[1238,3168,3170],{"class":1240,"line":3169},91,[1238,3171,1411],{"class":1244},[1238,3173,3175,3177,3179,3181,3183,3186,3188,3190,3192,3195],{"class":1240,"line":3174},92,[1238,3176,1417],{"class":1251},[1238,3178,1341],{"class":1244},[1238,3180,1422],{"class":1251},[1238,3182,1255],{"class":1244},[1238,3184,3185],{"class":1258},"\"stock_transactions\"",[1238,3187,1180],{"class":1244},[1238,3189,1432],{"class":1251},[1238,3191,1255],{"class":1244},[1238,3193,3194],{"class":1258},"\"입출고/조립 통합 이력. item_type=part|product, tx_type=입고|출고|조립사용|조립생산. 하나의 조립생산 이벤트는 같은 batch_id를 공유하는 조립사용(부품 소모) 여러 건 + 조립생산(제품 증가) 1건으로 구성되어, 제품에 어떤 부품이 얼마나 쓰였는지 추적할 수 있음\"",[1238,3196,1351],{"class":1244},[1238,3198,3200,3202],{"class":1240,"line":3199},93,[1238,3201,1445],{"class":1251},[1238,3203,1405],{"class":1244},[1238,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239],{"class":1240,"line":3206},94,[1238,3208,1453],{"class":1244},[1238,3210,1422],{"class":1251},[1238,3212,1255],{"class":1244},[1238,3214,1460],{"class":1258},[1238,3216,1180],{"class":1244},[1238,3218,1465],{"class":1251},[1238,3220,1255],{"class":1244},[1238,3222,1470],{"class":1258},[1238,3224,1180],{"class":1244},[1238,3226,1475],{"class":1251},[1238,3228,1255],{"class":1244},[1238,3230,1480],{"class":1321},[1238,3232,1180],{"class":1244},[1238,3234,1485],{"class":1251},[1238,3236,1255],{"class":1244},[1238,3238,1490],{"class":1258},[1238,3240,1351],{"class":1244},[1238,3242,3244,3246,3248,3250,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3278],{"class":1240,"line":3243},95,[1238,3245,1453],{"class":1244},[1238,3247,1422],{"class":1251},[1238,3249,1255],{"class":1244},[1238,3251,3252],{"class":1258},"\"item_type\"",[1238,3254,1180],{"class":1244},[1238,3256,1465],{"class":1251},[1238,3258,1255],{"class":1244},[1238,3260,1513],{"class":1258},[1238,3262,1180],{"class":1244},[1238,3264,1518],{"class":1251},[1238,3266,1255],{"class":1244},[1238,3268,1480],{"class":1321},[1238,3270,1180],{"class":1244},[1238,3272,1432],{"class":1251},[1238,3274,1255],{"class":1244},[1238,3276,3277],{"class":1258},"\"part | product\"",[1238,3279,1351],{"class":1244},[1238,3281,3283,3285,3287,3289,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3325],{"class":1240,"line":3282},96,[1238,3284,1453],{"class":1244},[1238,3286,1422],{"class":1251},[1238,3288,1255],{"class":1244},[1238,3290,3291],{"class":1258},"\"item_id\"",[1238,3293,1180],{"class":1244},[1238,3295,1465],{"class":1251},[1238,3297,1255],{"class":1244},[1238,3299,1711],{"class":1258},[1238,3301,1180],{"class":1244},[1238,3303,1518],{"class":1251},[1238,3305,1255],{"class":1244},[1238,3307,1480],{"class":1321},[1238,3309,1180],{"class":1244},[1238,3311,1897],{"class":1251},[1238,3313,1255],{"class":1244},[1238,3315,1480],{"class":1321},[1238,3317,1180],{"class":1244},[1238,3319,1432],{"class":1251},[1238,3321,1255],{"class":1244},[1238,3323,3324],{"class":1258},"\"parts.id 또는 products.id\"",[1238,3326,1351],{"class":1244},[1238,3328,3330,3332,3334,3336,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3364],{"class":1240,"line":3329},97,[1238,3331,1453],{"class":1244},[1238,3333,1422],{"class":1251},[1238,3335,1255],{"class":1244},[1238,3337,3338],{"class":1258},"\"item_name\"",[1238,3340,1180],{"class":1244},[1238,3342,1465],{"class":1251},[1238,3344,1255],{"class":1244},[1238,3346,1513],{"class":1258},[1238,3348,1180],{"class":1244},[1238,3350,1518],{"class":1251},[1238,3352,1255],{"class":1244},[1238,3354,1480],{"class":1321},[1238,3356,1180],{"class":1244},[1238,3358,1432],{"class":1251},[1238,3360,1255],{"class":1244},[1238,3362,3363],{"class":1258},"\"등록 시점 품목명 스냅샷\"",[1238,3365,1351],{"class":1244},[1238,3367,3369,3371,3373,3375,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3403],{"class":1240,"line":3368},98,[1238,3370,1453],{"class":1244},[1238,3372,1422],{"class":1251},[1238,3374,1255],{"class":1244},[1238,3376,3377],{"class":1258},"\"tx_type\"",[1238,3379,1180],{"class":1244},[1238,3381,1465],{"class":1251},[1238,3383,1255],{"class":1244},[1238,3385,1513],{"class":1258},[1238,3387,1180],{"class":1244},[1238,3389,1518],{"class":1251},[1238,3391,1255],{"class":1244},[1238,3393,1480],{"class":1321},[1238,3395,1180],{"class":1244},[1238,3397,1432],{"class":1251},[1238,3399,1255],{"class":1244},[1238,3401,3402],{"class":1258},"\"입고 | 출고 | 조립사용 | 조립생산\"",[1238,3404,1351],{"class":1244},[1238,3406,3408,3410,3412,3414,3417,3419,3421,3423,3425,3427,3429,3431,3434],{"class":1240,"line":3407},99,[1238,3409,1453],{"class":1244},[1238,3411,1422],{"class":1251},[1238,3413,1255],{"class":1244},[1238,3415,3416],{"class":1258},"\"reason\"",[1238,3418,1180],{"class":1244},[1238,3420,1465],{"class":1251},[1238,3422,1255],{"class":1244},[1238,3424,1513],{"class":1258},[1238,3426,1180],{"class":1244},[1238,3428,1432],{"class":1251},[1238,3430,1255],{"class":1244},[1238,3432,3433],{"class":1258},"\"입출고 사유. 조립사용/조립생산은 tx_type 자체가 사유이므로 비워둠\"",[1238,3435,1351],{"class":1244},[1238,3437,3439,3441,3443,3445,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3473],{"class":1240,"line":3438},100,[1238,3440,1453],{"class":1244},[1238,3442,1422],{"class":1251},[1238,3444,1255],{"class":1244},[1238,3446,3447],{"class":1258},"\"qty\"",[1238,3449,1180],{"class":1244},[1238,3451,1465],{"class":1251},[1238,3453,1255],{"class":1244},[1238,3455,1711],{"class":1258},[1238,3457,1180],{"class":1244},[1238,3459,1518],{"class":1251},[1238,3461,1255],{"class":1244},[1238,3463,1480],{"class":1321},[1238,3465,1180],{"class":1244},[1238,3467,1432],{"class":1251},[1238,3469,1255],{"class":1244},[1238,3471,3472],{"class":1258},"\"항상 양수. 방향은 tx_type으로 판단\"",[1238,3474,1351],{"class":1244},[1238,3476,3478,3480,3482,3484,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3512],{"class":1240,"line":3477},101,[1238,3479,1453],{"class":1244},[1238,3481,1422],{"class":1251},[1238,3483,1255],{"class":1244},[1238,3485,3486],{"class":1258},"\"batch_id\"",[1238,3488,1180],{"class":1244},[1238,3490,1465],{"class":1251},[1238,3492,1255],{"class":1244},[1238,3494,1513],{"class":1258},[1238,3496,1180],{"class":1244},[1238,3498,1897],{"class":1251},[1238,3500,1255],{"class":1244},[1238,3502,1480],{"class":1321},[1238,3504,1180],{"class":1244},[1238,3506,1432],{"class":1251},[1238,3508,1255],{"class":1244},[1238,3510,3511],{"class":1258},"\"조립생산 이벤트 묶음 id. 단순 입출고는 비어 있음\"",[1238,3513,1351],{"class":1244},[1238,3515,3517,3519,3521,3523,3526,3528,3530,3532,3534,3536,3538,3540,3543],{"class":1240,"line":3516},102,[1238,3518,1453],{"class":1244},[1238,3520,1422],{"class":1251},[1238,3522,1255],{"class":1244},[1238,3524,3525],{"class":1258},"\"note\"",[1238,3527,1180],{"class":1244},[1238,3529,1465],{"class":1251},[1238,3531,1255],{"class":1244},[1238,3533,1513],{"class":1258},[1238,3535,1180],{"class":1244},[1238,3537,1432],{"class":1251},[1238,3539,1255],{"class":1244},[1238,3541,3542],{"class":1258},"\"메모\"",[1238,3544,1351],{"class":1244},[1238,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580],{"class":1240,"line":3547},103,[1238,3549,1453],{"class":1244},[1238,3551,1422],{"class":1251},[1238,3553,1255],{"class":1244},[1238,3555,1876],{"class":1258},[1238,3557,1180],{"class":1244},[1238,3559,1465],{"class":1251},[1238,3561,1255],{"class":1244},[1238,3563,1711],{"class":1258},[1238,3565,1180],{"class":1244},[1238,3567,1518],{"class":1251},[1238,3569,1255],{"class":1244},[1238,3571,1480],{"class":1321},[1238,3573,1180],{"class":1244},[1238,3575,1897],{"class":1251},[1238,3577,1255],{"class":1244},[1238,3579,1480],{"class":1321},[1238,3581,1351],{"class":1244},[1238,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609],{"class":1240,"line":3584},104,[1238,3586,1453],{"class":1244},[1238,3588,1422],{"class":1251},[1238,3590,1255],{"class":1244},[1238,3592,1915],{"class":1258},[1238,3594,1180],{"class":1244},[1238,3596,1465],{"class":1251},[1238,3598,1255],{"class":1244},[1238,3600,1513],{"class":1258},[1238,3602,1180],{"class":1244},[1238,3604,1432],{"class":1251},[1238,3606,1255],{"class":1244},[1238,3608,2995],{"class":1258},[1238,3610,1351],{"class":1244},[1238,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638],{"class":1240,"line":3613},105,[1238,3615,1453],{"class":1244},[1238,3617,1422],{"class":1251},[1238,3619,1255],{"class":1244},[1238,3621,1946],{"class":1258},[1238,3623,1180],{"class":1244},[1238,3625,1465],{"class":1251},[1238,3627,1255],{"class":1244},[1238,3629,1955],{"class":1258},[1238,3631,1180],{"class":1244},[1238,3633,1485],{"class":1251},[1238,3635,1255],{"class":1244},[1238,3637,1964],{"class":1258},[1238,3639,1384],{"class":1244},[1238,3641,3643],{"class":1240,"line":3642},106,[1238,3644,1972],{"class":1244},[1238,3646,3648,3650],{"class":1240,"line":3647},107,[1238,3649,1978],{"class":1251},[1238,3651,1284],{"class":1244},[1238,3653,3655,3657,3659,3661,3663,3665,3667,3669,3671,3673],{"class":1240,"line":3654},108,[1238,3656,1986],{"class":1251},[1238,3658,1341],{"class":1244},[1238,3660,1991],{"class":1251},[1238,3662,1255],{"class":1244},[1238,3664,1480],{"class":1321},[1238,3666,1180],{"class":1244},[1238,3668,2000],{"class":1251},[1238,3670,1255],{"class":1244},[1238,3672,1876],{"class":1258},[1238,3674,1351],{"class":1244},[1238,3676,3678,3680],{"class":1240,"line":3677},109,[1238,3679,2012],{"class":1251},[1238,3681,1284],{"class":1244},[1238,3683,3685,3687,3689,3691,3693,3695],{"class":1240,"line":3684},110,[1238,3686,2020],{"class":1251},[1238,3688,1341],{"class":1244},[1238,3690,1991],{"class":1251},[1238,3692,1255],{"class":1244},[1238,3694,1480],{"class":1321},[1238,3696,1351],{"class":1244},[1238,3698,3700,3702,3704,3706,3708,3710],{"class":1240,"line":3699},111,[1238,3701,2036],{"class":1251},[1238,3703,1341],{"class":1244},[1238,3705,1991],{"class":1251},[1238,3707,1255],{"class":1244},[1238,3709,1480],{"class":1321},[1238,3711,1351],{"class":1244},[1238,3713,3715,3717,3719,3721,3723,3725],{"class":1240,"line":3714},112,[1238,3716,2052],{"class":1251},[1238,3718,1341],{"class":1244},[1238,3720,1991],{"class":1251},[1238,3722,1255],{"class":1244},[1238,3724,1480],{"class":1321},[1238,3726,1351],{"class":1244},[1238,3728,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748],{"class":1240,"line":3729},113,[1238,3731,2068],{"class":1251},[1238,3733,1341],{"class":1244},[1238,3735,1991],{"class":1251},[1238,3737,1255],{"class":1244},[1238,3739,1480],{"class":1321},[1238,3741,1180],{"class":1244},[1238,3743,2097],{"class":1251},[1238,3745,2100],{"class":1244},[1238,3747,2103],{"class":1258},[1238,3749,3750],{"class":1244},"] },\n",[1238,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,3772],{"class":1240,"line":3753},114,[1238,3755,2084],{"class":1251},[1238,3757,1341],{"class":1244},[1238,3759,1991],{"class":1251},[1238,3761,1255],{"class":1244},[1238,3763,1480],{"class":1321},[1238,3765,1180],{"class":1244},[1238,3767,2097],{"class":1251},[1238,3769,2100],{"class":1244},[1238,3771,2103],{"class":1258},[1238,3773,2106],{"class":1244},[1238,3775,3777],{"class":1240,"line":3776},115,[1238,3778,2112],{"class":1244},[1238,3780,3782],{"class":1240,"line":3781},116,[1238,3783,2118],{"class":1244},[1238,3785,3787],{"class":1240,"line":3786},117,[1238,3788,1390],{"class":1244},[1238,3790,3792],{"class":1240,"line":3791},118,[1238,3793,3794],{"class":1244},"  ]\n",[1238,3796,3798],{"class":1240,"line":3797},119,[1238,3799,3800],{"class":1244},"}\n",[1166,3802,3803,3804,3807,3808,3807,3811,1190],{},"Copie el resultado y cree un archivo de esquema vacío en el espacio de trabajo mediante ",[1170,3805,3806],{},"Create"," → ",[1170,3809,3810],{},"Template Files",[1170,3812,3813],{},"New Schema DB",[1166,3815,3816],{},[3817,3818],"img",{"alt":3819,"src":3820},"Selección de Create > Template Files > New Schema DB","./_screenshots/new-schema_en.png",[1166,3822,3823],{},"Introduzca un nombre y guarde para crear el archivo de esquema vacío.",[1166,3825,3826],{},[3817,3827],{"alt":3828,"src":3829},"Archivo de esquema vacío","./_screenshots/schema-file-first_en.png",[1166,3831,3832,3833,3836],{},"Seleccione la pestaña ",[1170,3834,3835],{},"Editor"," en la esquina superior derecha y pegue la respuesta anterior de la AI sin modificarla.",[1166,3838,3839],{},[3817,3840],{"alt":3841,"src":3842},"Editor de esquemas","./_screenshots/schema-editor_en.png",[1166,3844,3845,3846,3849],{},"Después de guardar, abra la pestaña ",[1170,3847,3848],{},"API Build"," de la parte superior para consultar las API generadas automáticamente para cada tabla.",[1166,3851,3852],{},[3817,3853],{"alt":3854,"src":3855},"Pantalla de API Build","./_screenshots/schema-api-build_en.png",[1166,3857,3858,3859,3861,3862,3865,3866,3868,3869,3872,3873,3877],{},"Seleccione ",[1170,3860,1172],{}," para desplegar los ajustes, compruebe ",[1170,3863,3864],{},"Database identifier"," y vuelva a seleccionar ",[1170,3867,1172],{},". Después de unos segundos aparecerá el mensaje ",[1170,3870,3871],{},"Deployment complete!",". Por último, seleccione el botón de disquete de la parte superior para guardar. ",[3874,3875,3876],"strong",{},"La configuración de la base de datos habrá terminado",": las cuatro tablas de piezas, productos, lista de materiales e historial de movimientos, además de las API REST que las gestionan, estarán creadas y listas para utilizarse. A continuación, cree la interfaz que se conectará a la base de datos.",[1195,3879,3881],{"id":3880},"_2-crear-el-archivo-html-de-la-interfaz","2. Crear el archivo .html de la interfaz",[1166,3883,3884,3885,3887],{},"Vuelva a pedírselo a la AI. Planifique y organice lo que desea crear y entréguele también el contenido del archivo ",[1170,3886,1204],{}," anterior como referencia.",[3889,3890,3891,3895,3898,3901],"ul",{},[3892,3893,3894],"li",{},"Formulario para registrar piezas y productos.",[3892,3896,3897],{},"Formulario para registrar entradas y salidas.",[3892,3899,3900],{},"Cálculo automático de las piezas necesarias y actualización de las existencias al registrar cuántas unidades de un producto se han fabricado.",[3892,3902,3903],{},"Tabla con las existencias actuales cuyos valores puedan editarse y guardarse directamente.",[1166,3905,3906],{},"Pegue el siguiente contenido en la conversación con la AI. Incluya al principio el resultado del paso 1.",[1210,3908,3911],{"className":3909,"code":3910,"language":1215},[1213],"[Pegue aquí el resultado del paso 1]\n\nEl esquema anterior ya está desplegado. Crea una única interfaz web (index.html) que utilice este esquema.\n\nPara cargar y guardar datos desde la interfaz, realiza las solicitudes al servidor conforme a estas reglas.\n\n1. Para obtener el token de API del usuario que ha iniciado sesión:\n   POST /api/auth/bootstrap  (credentials: \"include\")\n   Respuesta: { data: { access_token, user: { id, nick } } }\n\n2. Incluye este encabezado en todas las solicitudes posteriores: Authorization: Bearer \u003Caccess_token>\n\n3. Operaciones CRUD de las tablas:\n   Consultar  GET    /api/web/{dbName}/{table}/list?column=value  → respuesta { rows: [...] } (rows puede ser null si no hay resultados; usa siempre rows || [])\n   Crear      POST   /api/web/{dbName}/{table}/create             → cuerpo: JSON, respuesta { lastInsertId }\n   Actualizar PUT    /api/web/{dbName}/{table}/update/{id}        → cuerpo: JSON (puedes enviar solo las columnas modificadas)\n   Eliminar   DELETE /api/web/{dbName}/{table}/delete/{id}\n\nLa interfaz debe incluir estas funciones:\n\n- Formularios para registrar nuevas piezas y productos.\n- Un formulario para registrar entradas y salidas de piezas y productos; al guardar la operación, también debe actualizar las existencias actuales.\n- Una función para registrar que se ha fabricado una cantidad concreta de un producto. Debe calcular automáticamente las piezas necesarias según la lista de materiales registrada, descontarlas de las existencias y aumentar las existencias del producto. Si no hay suficientes piezas, debe impedir el registro y mostrar un aviso.\n- Una vista en forma de tabla con las existencias actuales de piezas y productos. Al seleccionar una celda, debe ser posible modificar y guardar su valor en el mismo lugar.\n- Una lista cronológica del historial de entradas, salidas y ensamblajes.\n\nIncluye todo el HTML, CSS y JavaScript en un único archivo. Usa un diseño de tarjetas limpio sobre fondo blanco.\nDevuelve únicamente el código completo de index.html, sin explicaciones adicionales.\n",[1170,3912,3910],{"__ignoreMap":1218},[1166,3914,3915],{},"A continuación se muestra un ejemplo del archivo HTML generado. El resultado puede variar según la AI.",[3917,3918],"html-sandbox",{"height":3919,"src":3920},"640px","/examples/webspace/inventory-management/index.html",[1166,3922,3923],{},"Cargue este archivo en el espacio de trabajo para completar la interfaz que utilizarán los miembros del equipo.",[1195,3925,3927],{"id":3926},"_3-añadir-datos-de-prueba","3. Añadir datos de prueba",[1166,3929,3930],{},"Para comprobar visualmente el funcionamiento necesita datos. También puede pedir a la AI que cree una pantalla que añada datos de ejemplo mediante un solo botón.",[1210,3932,3935],{"className":3933,"code":3934,"language":1215},[1213],"[Pegue aquí el resultado del paso 1]\n\nEl esquema anterior ya está desplegado y ya existe un archivo index.html que lo utiliza.\nCrea una interfaz llamada mock-db-upload.html que permita rellenar automáticamente datos de prueba al seleccionar un único botón.\n\nInserta los datos en el servidor real del mismo modo que en la interfaz del paso 2: obtén un token mediante POST /api/auth/bootstrap y crea los registros mediante POST /api/web/{dbName}/{table}/create.\n\n- Crea entre 10 y 15 piezas, entre 3 y 5 productos, la composición de piezas de cada producto y varios registros de entradas y salidas.\n- Usa nombres de piezas y productos y cantidades que resulten verosímiles en un entorno de fabricación real.\n- Si ya existe un registro con el mismo código, omite solo ese elemento y continúa con los demás.\n- Muestra el progreso en la pantalla, una línea de registro cada vez, y al terminar muestra \"Completado\".\nDevuelve únicamente el código completo de mock-db-upload.html, sin explicaciones adicionales.\n",[1170,3936,3934],{"__ignoreMap":1218},[1166,3938,3939],{},"A continuación se muestra un ejemplo del archivo HTML generado. El resultado puede variar según la AI. Esta pantalla no se despliega; ábrala únicamente cuando necesite preparar una demostración.",[3917,3941],{"height":3919,"src":3942},"/examples/webspace/inventory-management/mock-db-upload.html",[1166,3944,3945],{},"Después de introducir datos, el sistema funciona de la siguiente manera.",[1166,3947,3948],{},[3817,3949],{"alt":3950,"src":3951},"Estado de piezas: haga doble clic en una celda para editarla y guardarla","./_screenshots/inventory-parts-status_en.jpg",[1166,3953,3954],{},[3817,3955],{"alt":3956,"src":3957},"Registro de BOM: arrastre una tarjeta de pieza de la derecha a la izquierda para añadirla","./_screenshots/inventory-bom-dnd_en.jpg",[1166,3959,3960],{},[3817,3961],{"alt":3962,"src":3963},"Registro de producción: las piezas necesarias y las existencias aparecen al indicar el producto y la cantidad","./_screenshots/inventory-assembly-production_en.jpg",[1166,3965,3966],{},[3817,3967],{"alt":3968,"src":3969},"Historial de transacciones: la producción y el uso de piezas se agrupan por lote","./_screenshots/inventory-transaction-history_en.jpg",[1195,3971,3973],{"id":3972},"_4-modificarlo-de-forma-iterativa","4. Modificarlo de forma iterativa",[1166,3975,3976],{},"No necesita terminarlo todo a la primera. A medida que use la interfaz, siga pidiendo a la AI que añada las funciones que falten o corrija lo que necesite. El siguiente paso depende del tipo de cambio.",[3889,3978,3979,3993,4002],{},[3892,3980,3981,3984,3985,3987,3988,3990,3991,1190],{},[3874,3982,3983],{},"Cambios en la estructura de la base de datos, como tablas o columnas",": por ejemplo, añadir una columna o una tabla. Obtenga el archivo ",[1170,3986,1204],{}," modificado, péguelo en ",[1170,3989,3835],{}," y vuelva a desplegarlo en ",[1170,3992,3848],{},[3892,3994,3995,3998,3999,4001],{},[3874,3996,3997],{},"Cambios únicamente en la interfaz, sin modificar la estructura de la base de datos",": por ejemplo, el diseño, el texto o la posición de los botones. Obtenga de nuevo ",[1170,4000,1179],{}," y sobrescriba el archivo existente. No necesita volver a desplegar la API.",[3892,4003,4004,4005,4008],{},"Al cambiar la estructura de una tabla que ya contiene datos, revise la opción ",[1170,4006,4007],{},"Overwrite existing data"," en la configuración de despliegue. Si activa la sobrescritura, los datos existentes se eliminan permanentemente.",[1192,4010],{},[1166,4012,4013],{},"Con estos cuatro pasos, la AI crea el diseño de la base de datos, las interfaces, los datos de prueba y las modificaciones posteriores. Después puede seguir perfeccionando el diseño y los detalles según sus necesidades.",[4015,4016,4017],"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":1218,"searchDepth":1248,"depth":1265,"links":4019},[4020,4021,4022,4023],{"id":1197,"depth":1248,"text":1198},{"id":3880,"depth":1248,"text":3881},{"id":3926,"depth":1248,"text":3927},{"id":3972,"depth":1248,"text":3973},"Mediante un sistema de gestión de inventario, se muestra cómo crear desde el diseño de la base de datos hasta las interfaces con solo describir los requisitos a una AI.","md",{},true,{"title":4029,"description":4024,"ogType":4030,"twitterCard":4031,"keywords":4032},"Crear su propio sistema empresarial | Ejemplos de Webspace","article","summary_large_image",[4033,4034,4035,4036,4037],"Sistema empresarial propio","Sistema de gestión de inventario","Configuración de la base de datos","Prompt para AI","SetFN Workspace","PCaB-xtjoaqGv777YOl4BIrke1h8Wl4Mv1x-IxjLEik",[4040,4041],{"title":867,"path":875,"stem":873,"slug":874,"children":-1},{"title":882,"path":883,"stem":884,"slug":886,"children":-1},{"title":877,"filename":4043,"content":4044},"my-own-system","# Crear su propio sistema empresarial\n\nEn SetFN Workspace puede crear sistemas propios de la empresa, como groupware o ERP.\nEncargue a la AI el diseño de la base de datos y la creación de las interfaces; solo tendrá que preparar los resultados y cargarlos en el espacio de trabajo.\nDebe crear 2 archivos. Sus tareas consisten en cargarlos y seleccionar el botón `Deploy`.\nEste ejemplo crea un programa de gestión de inventario para una planta de fabricación.\n\nSi desea probar directamente los archivos terminados sin usar los prompts, descargue conjuntamente el esquema, `index.html`, `mock-db-upload.html` y README desde [Descargar el ZIP completo de ejemplo](/examples/webspace/inventory-management/setfn-inventory-management-sample.zip).\n\n---\n\n## 1. Crear el archivo .sfn de la base de datos\n\nEn SetFN Workspace puede crear una base de datos mediante un archivo `.sfn`. Copie un ejemplo de este archivo, entréguelo a una AI como Claude, GPT o Gemini y describa los requisitos, por ejemplo, «Quiero gestionar las existencias de piezas y productos». La AI creará el archivo.\n\nCopie el siguiente contenido, modifique los requisitos de la parte inferior y entrégueselo a la AI.\n\n```\nEres un ingeniero que diseña archivos de esquema (.sfn) para la plataforma backend sin código SetFN.\nUn archivo .sfn es un archivo JSON con la siguiente estructura.\n\n{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"apiBuild\": {\n    \"dbName\": \"nombre_bd_en_ingles_minusculas\",\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\": \"nombre_tabla\", \"cmt\": \"Descripción de esta tabla\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"nombre_columna\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"Descripción de la columna\" },\n        { \"name\": \"columna_numerica\", \"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\nPara el campo type de las columnas, usa únicamente serial4 (clave primaria autoincremental), text, int4 (entero) y timestamp.\nAñade notnull, default, unique, index y cmt a las columnas cuando sea necesario.\nEscribe en inglés snake_case los nombres de la base de datos, las tablas y las columnas. Escribe en español todos los valores cmt y los demás textos destinados a las personas.\n\nCon este formato, diseña una base de datos para un \"sistema de gestión de inventario\" destinado a una empresa de fabricación. Debe cumplir estos requisitos:\n\n- Permitir registrar piezas y gestionar las existencias actuales de cada pieza.\n- Permitir registrar productos y gestionar las existencias actuales de cada producto.\n- Cada producto se fabrica ensamblando varias piezas. Debe gestionarse qué piezas necesita cada producto y en qué cantidad mediante una BOM o lista de materiales.\n- Registrar el historial de entradas y salidas de piezas y productos. En particular, cuando se produzca el evento \"fabricar un producto ensamblando piezas\", las piezas utilizadas y la cantidad de productos fabricados deben poder seguirse juntas como un único evento. Más adelante debe ser posible consultar cuántas piezas se usaron para fabricar un producto.\n\nUsa \"inventory_management\" como nombre de la base de datos (dbName).\nDiseña un máximo de cuatro tablas y procura que el resultado sea lo bastante práctico como para utilizarlo directamente en un entorno real.\nDevuelve únicamente el código JSON completo del archivo .sfn, sin explicaciones adicionales.\n```\n\nA continuación se muestra un ejemplo de la respuesta generada. El resultado puede variar según la AI y la ejecución; basta con que tenga una estructura similar. Debe comenzar por `{` y terminar por `}`, sin otra explicación, para que pueda pegarlo directamente en el editor.\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\": \"부품 마스터. 조회/등록/수정은 회원 누구나, 삭제는 관리자만\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"part_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"부품 코드\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"부품명\" },\n        { \"name\": \"spec\", \"type\": \"text\", \"cmt\": \"규격 (예: M2, 220V/50Hz). 같은 이름이라도 규격이 다르면 별도 part_code로 등록\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"부품 분류 (전자부품/기구부품/포장재 등)\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"단위\" },\n        { \"name\": \"unit_cost\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"단가\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"현재고\" },\n        { \"name\": \"safety_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"안전재고(재주문점)\" },\n        { \"name\": \"supplier\", \"type\": \"text\", \"cmt\": \"공급업체\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"최종 등록/수정한 회원 표시 이름\" },\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\": \"제품 마스터. 조회/등록/수정은 회원 누구나, 삭제는 관리자만\" },\n      \"columns\": [\n        { \"name\": \"id\", \"type\": \"serial4\", \"primary\": true, \"default\": \"auto_increment\" },\n        { \"name\": \"product_code\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"제품 코드\" },\n        { \"name\": \"name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"제품명\" },\n        { \"name\": \"category\", \"type\": \"text\", \"cmt\": \"제품 분류\" },\n        { \"name\": \"unit\", \"type\": \"text\", \"notnull\": true, \"default\": \"EA\", \"cmt\": \"단위\" },\n        { \"name\": \"price\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"판매가\" },\n        { \"name\": \"current_stock\", \"type\": \"int4\", \"notnull\": true, \"default\": \"0\", \"cmt\": \"현재고\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"최종 등록/수정한 회원 표시 이름\" },\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\": \"제품별 부품 구성표(단일 단계). bom_key(product_id:part_id)에 unique 제약을 걸어 같은 제품에 같은 부품이 중복 등록되지 않게 함\" },\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\": \"제품 1개를 만드는 데 필요한 부품 수량\" },\n        { \"name\": \"bom_key\", \"type\": \"text\", \"notnull\": true, \"unique\": true, \"cmt\": \"product_id:part_id 조합. 중복 등록 방지용\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"등록한 회원 표시 이름\" },\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\": \"입출고/조립 통합 이력. item_type=part|product, tx_type=입고|출고|조립사용|조립생산. 하나의 조립생산 이벤트는 같은 batch_id를 공유하는 조립사용(부품 소모) 여러 건 + 조립생산(제품 증가) 1건으로 구성되어, 제품에 어떤 부품이 얼마나 쓰였는지 추적할 수 있음\" },\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 또는 products.id\" },\n        { \"name\": \"item_name\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"등록 시점 품목명 스냅샷\" },\n        { \"name\": \"tx_type\", \"type\": \"text\", \"notnull\": true, \"cmt\": \"입고 | 출고 | 조립사용 | 조립생산\" },\n        { \"name\": \"reason\", \"type\": \"text\", \"cmt\": \"입출고 사유. 조립사용/조립생산은 tx_type 자체가 사유이므로 비워둠\" },\n        { \"name\": \"qty\", \"type\": \"int4\", \"notnull\": true, \"cmt\": \"항상 양수. 방향은 tx_type으로 판단\" },\n        { \"name\": \"batch_id\", \"type\": \"text\", \"index\": true, \"cmt\": \"조립생산 이벤트 묶음 id. 단순 입출고는 비어 있음\" },\n        { \"name\": \"note\", \"type\": \"text\", \"cmt\": \"메모\" },\n        { \"name\": \"_user_id\", \"type\": \"int4\", \"notnull\": true, \"index\": true },\n        { \"name\": \"_nick\", \"type\": \"text\", \"cmt\": \"등록한 회원 표시 이름\" },\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\nCopie el resultado y cree un archivo de esquema vacío en el espacio de trabajo mediante `Create` → `Template Files` → `New Schema DB`.\n\n![Selección de Create > Template Files > New Schema DB](./_screenshots/new-schema_en.png)\n\nIntroduzca un nombre y guarde para crear el archivo de esquema vacío.\n\n![Archivo de esquema vacío](./_screenshots/schema-file-first_en.png)\n\nSeleccione la pestaña `Editor` en la esquina superior derecha y pegue la respuesta anterior de la AI sin modificarla.\n\n![Editor de esquemas](./_screenshots/schema-editor_en.png)\n\nDespués de guardar, abra la pestaña `API Build` de la parte superior para consultar las API generadas automáticamente para cada tabla.\n\n![Pantalla de API Build](./_screenshots/schema-api-build_en.png)\n\nSeleccione `Deploy` para desplegar los ajustes, compruebe `Database identifier` y vuelva a seleccionar `Deploy`. Después de unos segundos aparecerá el mensaje `Deployment complete!`. Por último, seleccione el botón de disquete de la parte superior para guardar. **La configuración de la base de datos habrá terminado**: las cuatro tablas de piezas, productos, lista de materiales e historial de movimientos, además de las API REST que las gestionan, estarán creadas y listas para utilizarse. A continuación, cree la interfaz que se conectará a la base de datos.\n\n## 2. Crear el archivo .html de la interfaz\n\nVuelva a pedírselo a la AI. Planifique y organice lo que desea crear y entréguele también el contenido del archivo `.sfn` anterior como referencia.\n\n- Formulario para registrar piezas y productos.\n- Formulario para registrar entradas y salidas.\n- Cálculo automático de las piezas necesarias y actualización de las existencias al registrar cuántas unidades de un producto se han fabricado.\n- Tabla con las existencias actuales cuyos valores puedan editarse y guardarse directamente.\n\nPegue el siguiente contenido en la conversación con la AI. Incluya al principio el resultado del paso 1.\n\n```\n[Pegue aquí el resultado del paso 1]\n\nEl esquema anterior ya está desplegado. Crea una única interfaz web (index.html) que utilice este esquema.\n\nPara cargar y guardar datos desde la interfaz, realiza las solicitudes al servidor conforme a estas reglas.\n\n1. Para obtener el token de API del usuario que ha iniciado sesión:\n   POST /api/auth/bootstrap  (credentials: \"include\")\n   Respuesta: { data: { access_token, user: { id, nick } } }\n\n2. Incluye este encabezado en todas las solicitudes posteriores: Authorization: Bearer \u003Caccess_token>\n\n3. Operaciones CRUD de las tablas:\n   Consultar  GET    /api/web/{dbName}/{table}/list?column=value  → respuesta { rows: [...] } (rows puede ser null si no hay resultados; usa siempre rows || [])\n   Crear      POST   /api/web/{dbName}/{table}/create             → cuerpo: JSON, respuesta { lastInsertId }\n   Actualizar PUT    /api/web/{dbName}/{table}/update/{id}        → cuerpo: JSON (puedes enviar solo las columnas modificadas)\n   Eliminar   DELETE /api/web/{dbName}/{table}/delete/{id}\n\nLa interfaz debe incluir estas funciones:\n\n- Formularios para registrar nuevas piezas y productos.\n- Un formulario para registrar entradas y salidas de piezas y productos; al guardar la operación, también debe actualizar las existencias actuales.\n- Una función para registrar que se ha fabricado una cantidad concreta de un producto. Debe calcular automáticamente las piezas necesarias según la lista de materiales registrada, descontarlas de las existencias y aumentar las existencias del producto. Si no hay suficientes piezas, debe impedir el registro y mostrar un aviso.\n- Una vista en forma de tabla con las existencias actuales de piezas y productos. Al seleccionar una celda, debe ser posible modificar y guardar su valor en el mismo lugar.\n- Una lista cronológica del historial de entradas, salidas y ensamblajes.\n\nIncluye todo el HTML, CSS y JavaScript en un único archivo. Usa un diseño de tarjetas limpio sobre fondo blanco.\nDevuelve únicamente el código completo de index.html, sin explicaciones adicionales.\n```\n\nA continuación se muestra un ejemplo del archivo HTML generado. El resultado puede variar según la AI.\n\n::html-sandbox{src=\"/examples/webspace/inventory-management/index.html\" height=\"640px\"}\n::\n\nCargue este archivo en el espacio de trabajo para completar la interfaz que utilizarán los miembros del equipo.\n\n## 3. Añadir datos de prueba\n\nPara comprobar visualmente el funcionamiento necesita datos. También puede pedir a la AI que cree una pantalla que añada datos de ejemplo mediante un solo botón.\n\n```\n[Pegue aquí el resultado del paso 1]\n\nEl esquema anterior ya está desplegado y ya existe un archivo index.html que lo utiliza.\nCrea una interfaz llamada mock-db-upload.html que permita rellenar automáticamente datos de prueba al seleccionar un único botón.\n\nInserta los datos en el servidor real del mismo modo que en la interfaz del paso 2: obtén un token mediante POST /api/auth/bootstrap y crea los registros mediante POST /api/web/{dbName}/{table}/create.\n\n- Crea entre 10 y 15 piezas, entre 3 y 5 productos, la composición de piezas de cada producto y varios registros de entradas y salidas.\n- Usa nombres de piezas y productos y cantidades que resulten verosímiles en un entorno de fabricación real.\n- Si ya existe un registro con el mismo código, omite solo ese elemento y continúa con los demás.\n- Muestra el progreso en la pantalla, una línea de registro cada vez, y al terminar muestra \"Completado\".\nDevuelve únicamente el código completo de mock-db-upload.html, sin explicaciones adicionales.\n```\n\nA continuación se muestra un ejemplo del archivo HTML generado. El resultado puede variar según la AI. Esta pantalla no se despliega; ábrala únicamente cuando necesite preparar una demostración.\n\n::html-sandbox{src=\"/examples/webspace/inventory-management/mock-db-upload.html\" height=\"640px\"}\n::\n\nDespués de introducir datos, el sistema funciona de la siguiente manera.\n\n![Estado de piezas: haga doble clic en una celda para editarla y guardarla](./_screenshots/inventory-parts-status_en.jpg)\n\n![Registro de BOM: arrastre una tarjeta de pieza de la derecha a la izquierda para añadirla](./_screenshots/inventory-bom-dnd_en.jpg)\n\n![Registro de producción: las piezas necesarias y las existencias aparecen al indicar el producto y la cantidad](./_screenshots/inventory-assembly-production_en.jpg)\n\n![Historial de transacciones: la producción y el uso de piezas se agrupan por lote](./_screenshots/inventory-transaction-history_en.jpg)\n\n## 4. Modificarlo de forma iterativa\n\nNo necesita terminarlo todo a la primera. A medida que use la interfaz, siga pidiendo a la AI que añada las funciones que falten o corrija lo que necesite. El siguiente paso depende del tipo de cambio.\n\n- **Cambios en la estructura de la base de datos, como tablas o columnas**: por ejemplo, añadir una columna o una tabla. Obtenga el archivo `.sfn` modificado, péguelo en `Editor` y vuelva a desplegarlo en `API Build`.\n- **Cambios únicamente en la interfaz, sin modificar la estructura de la base de datos**: por ejemplo, el diseño, el texto o la posición de los botones. Obtenga de nuevo `index.html` y sobrescriba el archivo existente. No necesita volver a desplegar la API.\n- Al cambiar la estructura de una tabla que ya contiene datos, revise la opción `Overwrite existing data` en la configuración de despliegue. Si activa la sobrescritura, los datos existentes se eliminan permanentemente.\n\n---\n\nCon estos cuatro pasos, la AI crea el diseño de la base de datos, las interfaces, los datos de prueba y las modificaciones posteriores. Después puede seguir perfeccionando el diseño y los detalles según sus necesidades.\n",1793056600597]