# nPlan - Full Site Content > Generated corpus of every public, indexable page on https://nplan.digital. > Built from the same route discovery as sitemap.xml and llms.txt. --- # nPlan - Supply Chain Planning com IA URL: https://nplan.digital/ Transforme sua cadeia de suprimentos com planejamento inteligente. Otimize processos, reduza custos e melhore a eficiência com nossa plataforma abrangente de S&OP, S&OE, APS, MRP e DRP. Testimonials = lazy(() => import("@/components/Testimonials")); Pricing = lazy(() => import("@/components/Pricing")); PartnersWorldMap = lazy(() => import("@/components/PartnersWorldMap")); Events = lazy(() => import("@/components/Events")); DemoGallery = lazy(() => import("@/components/DemoGallery")); ArticlesPreview = lazy(() => import("@/components/ArticlesPreview")); FAQ = lazy(() => import("@/components/FAQ")); ROICalculator = lazy(() => import("@/components/ROICalculator")); ChatbotSection = lazy(() => import("@/components/ChatbotSection")); ModulesVideoSection = lazy(() => import("@/components/ModulesVideoSection")); DiagnosticCTA = lazy(() => import("@/components/DiagnosticCTA")); fallback = ( Carregando... ); Index = () => ; --- # Planning Solutions | NPLAN URL: https://nplan.digital/solutions Explore the NPLAN modules applied end-to-end: from demand forecasting to distribution, including inventory policy, replenishment and capacity. Each solution comes with an interactive animation explaining the concept. type SolutionItem = ; solutions: SolutionItem[] = [ , , , , , ]; Solutions = () => { = useTranslation(); ( {solutions.map(( , idx) => ( ))} ); }; --- # Security | NPLAN - Cloud, Encryption, Enterprise AI and Compliance URL: https://nplan.digital/security Single Tenant SaaS on Azure, AES-256 encryption, SSO/AD, LGPD/GDPR/PDPA compliance, periodic audits and enterprise Gen-AI via Azure OpenAI. lang = (i18nLang: string) => ; tt = (l: string, pt: string, en: string, es: string) => l === "en" ? en : l === "es" ? es : pt; Security = () => { = useTranslation(); l = lang(i18n.language); heroTitle = tt( l, "Segurança no NPLAN", "Security at NPLAN", "Seguridad en NPLAN" ); heroSubtitle = tt( l, "Dados de supply chain disponíveis e seguros, em qualquer lugar e a qualquer momento. Hospedagem em nuvem dedicada, criptografia ponta a ponta, auditoria contínua e uso de IA com governança corporativa.", "Supply chain data available and secure, anywhere, anytime. Dedicated cloud hosting, end-to-end encryption, continuous auditing and enterprise-grade AI governance.", "Datos de supply chain disponibles y seguros, en cualquier lugar y momento. Hosting en la nube dedicado, cifrado de extremo a extremo, auditoría continua y uso de IA con gobernanza corporativa." ); pillars = [ , , , ]; auditCategories = [ , , , , , , ]; drFeatures = [ , , , , ]; aiBullets = [ , , , , , , ]; traceabilityItems = [ tt( l, "Tentativas de login bem-sucedidas e falhas", "Successful and failed login attempts", "Intentos de login exitosos y fallidos" ), tt( l, "Acesso a telas, páginas, relatórios e dashboards por usuário", "Access to screens, pages, reports and dashboards by user", "Acceso a pantallas, páginas, informes y dashboards por usuario" ), tt( l, "Atividades de integração, bem-sucedidas e com falhas", "Integration activities, successful and unsuccessful", "Actividades de integración, exitosas y con fallos" ), tt( l, "Alterações manuais de dados ou parâmetros, com usuário, data e capacidade de reverter", "Manual data or parameter changes, with user, date and revert capability", "Cambios manuales de datos o parámetros, con usuario, fecha y capacidad de revertir" ), ]; ( ); }; --- # nPlan Trial - Start Your Proof of Concept URL: https://nplan.digital/trial Try nPlan with a trial license. Accelerate value capture with a reduced-scope project. demandExcludedItemFields = new Set([ "StockGroup", "Weight", "LeadTime", "MinimumReorder", "MultipleReorder", "MaximumReorder", "ScrapPercentage", "StorageConversionFactor", "StorageResource", "ProductionStartOfLifecycle", "ProductionEndOfLifecycle", "ShelfLifeDays", "SafetyStockManualDays", "CycleStockManualDays", "MaxStockManualDays", "SafetyStockManualQuantity", "CycleStockManualQuantity", "MaxStockManualQuantity", ]); itemTableFull = ; itemTableDemand = ; salesHistoryTable = ; salesOrderTable = ; routingTable = ; bomTable = ; inventoryTable = ; resourceTable = ; forecastTable = ; demandTables = [itemTableDemand, salesHistoryTable]; supplyTables = [itemTableFull, salesOrderTable, forecastTable, bomTable, routingTable, inventoryTable, resourceTable]; stepIcons = [CreditCard, Calendar, FileSpreadsheet, Clock, GraduationCap, Settings, Presentation, Users]; stepColors = ["text-emerald-500", "text-blue-500", "text-violet-500", "text-amber-500", "text-pink-500", "text-cyan-500", "text-orange-500", "text-green-500"]; Trial = () => { = useTranslation(); contact = useContactChoice(); [selectedScope, setSelectedScope] = useState<"demand" | "supply">("demand"); [selectedApproach, setSelectedApproach] = useState<"poc" | "projeto">("projeto"); [selectedPricing, setSelectedPricing] = useState<"rapido" | "corporativo">("rapido"); [showPaymentForm, setShowPaymentForm] = useState( ); tables = selectedScope === "demand" ? demandTables : supplyTables; trialLimitations = [ , , , , , ]; processSteps = Array.from( , (_, i) => ( )); ( {["heroCheck1", "heroCheck2", "heroCheck3"].map((key) => ( ))} {["pocCheck1", "pocCheck2", "pocCheck3", "pocCheck4"].map((key) => ( ))} {["projectCheck1", "projectCheck2", "projectCheck3", "projectCheck4"].map((key) => ( ))} Demand Planning Supply Planning { wb = new ExcelJS.Workbook(); optionalTables = selectedScope === "demand" ? demandOptionalTables : supplyOptionalTables; allTables = [ ...tables.map((t) => ( )), ...optionalTables.map((t) => ( )), ]; allTables.forEach((table) => ); filename = selectedScope === "demand" ? "nPlan_Template_Demand_Planning.xlsx" : "nPlan_Template_Supply_Planning.xlsx"; buffer = await wb.xlsx.writeBuffer(); blob = new Blob([buffer], ); url = URL.createObjectURL(blob); a = document.createElement("a"); a.href = url; a.download = filename; a.click(); URL.revokeObjectURL(url); }} > ( ) {tables.map((table) => ( ))} {(selectedScope === "demand" ? demandOptionalTables : supplyOptionalTables).length > 0 && ( Dados complementares opcional Não são necessários para iniciar a PoC. Cada um destrava uma etapa do processo e melhora a acurácia. Cada tabela complementar corresponde a uma etapa do processo. O onboarding pode começar só com ITEM e SALES_HISTORY. )} {["quickStartCheck1", "quickStartCheck2", "quickStartCheck3", "quickStartCheck4", "quickStartCheck5"].map((key) => ( ))} {["corporateCheck1", "corporateCheck2", "corporateCheck3", "corporateCheck4"].map((key) => ( ))} {[ , , , , , ].map(( ) => ( ))} © nPlan. ); }; --- # Supply Chain Planning Diagnostic · NPLAN URL: https://nplan.digital/supply-chain-diagnostic Assess your industry's planning maturity in 6 steps and discover which NPLAN modules deliver the most value for you. DiagnosticContent() { = useDiagnostic(); isResult = state.step >= 9; useEffect(() => , [state.step]); ( ); } Diagnostic = () => { = useTranslation(); ( <> ); }; --- # Roadmap — nPlan URL: https://nplan.digital/roadmap Check the NPLAN platform evolution roadmap: new modules, features, and planned launches. type ModuleKey = "all" | "demand" | "agents" | "schedule"; interface RoadmapEntry interface SaveDate statusStyles: Record = ; agentQ2Icons: Record = ; scheduleQ2Icons: Record = ; demandQ2Icons: Record = ; agentQ3Icons: Record = ; demandQ3Icons: Record = ; scheduleQ3Icons: Record = ; demandQ4Icons: Record = ; agentQ4Icons: Record = ; scheduleQ4Icons: Record = ; q2Icons: Record > = ; milestoneKeys = new Set([ "item_forecastLaunch", "milestone_agentsBeta", "milestone_scheduleBeta", "milestone_agentsLaunch", "milestone_scheduleLaunch", ]); milestoneDates: Record = ; milestoneNames: Record = ; type RoadmapItem = ; interface RoadmapEntryI18n roadmapData: RoadmapEntryI18n[] = [ , , , , , ]; getItemIcon = (itemKey: string, status: string, colKey: string) => { (milestoneKeys.has(itemKey)) (status === "done") (status === "in_progress") (status === "upcoming") (status === "future") ; }; ItemList = ( : ) => { regularItems = items.filter((item) => !item.isMilestone); milestones = items.filter((item) => item.isMilestone); ( {regularItems.map((item, i) => ( ))} {milestones.length > 0 && ( {milestones.map((item, i) => { isBetaLaunch = item.key.includes("Beta"); dateStr = milestoneDates[item.key]; name = milestoneNames[item.key] === item.key ? t(`roadmap.$ `) : milestoneNames[item.key]; isCommercialLaunch = item.key.includes("Launch") && !item.key.includes("Beta") && item.key !== "item_forecastLaunch"; ( {dateStr && ( )} ); })} )} ); }; Roadmap = () => { = useTranslation(); contact = useContactChoice(); [activeFilter, setActiveFilter] = useState ("all"); [hideDone, setHideDone] = useState( ); statusLabels: Record = ; filterTabs: [] = [ , , , , ]; columnHeaders = [ , , , ]; saveDates: SaveDate[] = [ , , , , ]; filteredData = roadmapData.filter((row) => ); showColumn = (col: "demand" | "agents" | "schedule") => activeFilter === "all" || activeFilter === col; ( {filterTabs.map((tab) => ( ))} {columnHeaders.map((col) => showColumn(col.key) ? ( contact.open(col.ctaMessage.replace(/^\?text=/, ""), )} className= > ) : )} {filteredData.map((row, i) => { style = statusStyles[row.status]; ( {showColumn("demand") && ( )} {showColumn("agents") && ( )} {showColumn("schedule") && ( )} ); })} {saveDates.map((event, i) => ( ))} ); }; --- # Política de Privacidade - nPlan URL: https://nplan.digital/privacy-policy Conheça nossa política de privacidade e como protegemos seus dados pessoais. Transparência e segurança são prioridades da nPlan. PrivacyPolicy = () => ; --- # Industries We Serve | NPLAN URL: https://nplan.digital/industries See how NPLAN applies integrated demand, supply, and production planning across different industrial sectors. Each vertical with its own challenges, capabilities, and cases. type IndustryItem = ; items: IndustryItem[] = [ , , , , , , , , ]; Industries = () => { = useTranslation(); ( {items.map(( ) => ( ))} ); }; --- # nPlan - Agro Supply Chain Planning URL: https://nplan.digital/industries/agro Supply chain planning for agribusiness. Raw material constraints, storage, shelf life, demand and supply influence. keyPoints = [ "industries.agro.kp1", "industries.agro.kp2", "industries.agro.kp3", "industries.agro.kp4", "industries.agro.kp5", "industries.agro.kp6", "industries.agro.kp7", "industries.agro.kp8", "industries.agro.kp9", "industries.agro.kp10", "industries.agro.kp11", ]; referenceLogos = [ , , ]; challengesBullets = [ "industries.agro.ch1", "industries.agro.ch2", "industries.agro.ch3", "industries.agro.ch4", ]; Agro = () => ( ); --- # nPlan - Automotive Supply Chain Planning URL: https://nplan.digital/industries/automotive Supply chain planning for automotive industry. Demand variation, frozen periods, material pegging, sequencing and more. keyPoints = [ "industries.automotive.kp1", "industries.automotive.kp2", "industries.automotive.kp3", "industries.automotive.kp4", "industries.automotive.kp5", "industries.automotive.kp6", "industries.automotive.kp7", "industries.automotive.kp8", "industries.automotive.kp9", "industries.automotive.kp10", ]; challengesBullets = [ "industries.automotive.ch1", "industries.automotive.ch2", "industries.automotive.ch3", "industries.automotive.ch4", ]; referenceLogos = [ , , , , , ]; Automotive = () => ( ); --- # nPlan - Food & Beverage Supply Chain Planning URL: https://nplan.digital/industries/food-beverage Supply chain planning for food and beverage industry. Shelf life, traceability, stock health and capacity planning. keyPoints = [ "industries.food.kp1", "industries.food.kp2", "industries.food.kp3", "industries.food.kp4", "industries.food.kp5", "industries.food.kp6", "industries.food.kp7", "industries.food.kp8", "industries.food.kp9", "industries.food.kp10", ]; challengesBullets = [ "industries.food.ch1", "industries.food.ch2", "industries.food.ch3", "industries.food.ch4", ]; referenceLogos = [ , , , ]; FoodBeverage = () => ( ); --- # nPlan - Móveis & Revestimentos Supply Chain Planning URL: https://nplan.digital/industries/furniture-coatings Supply chain planning for furniture and coatings industries. Multi-level BOM, capacity planning, and demand segmentation. keyPoints = [ "industries.furnitureCoatings.kp1", "industries.furnitureCoatings.kp2", "industries.furnitureCoatings.kp3", "industries.furnitureCoatings.kp4", "industries.furnitureCoatings.kp5", "industries.furnitureCoatings.kp6", "industries.furnitureCoatings.kp7", "industries.furnitureCoatings.kp8", "industries.furnitureCoatings.kp9", "industries.furnitureCoatings.kp10", ]; referenceLogos = [ , , ]; challengesBullets = [ "industries.furnitureCoatings.ch1", "industries.furnitureCoatings.ch2", "industries.furnitureCoatings.ch3", "industries.furnitureCoatings.ch4", ]; FurnitureCoatings = () => ( ); --- # nPlan - Metal Mecânico Supply Chain Planning URL: https://nplan.digital/industries/metal-mechanical Supply chain planning for metal mechanical industries. MRP, capacity planning, sequencing and material pegging. keyPoints = [ "industries.metalMechanical.kp1", "industries.metalMechanical.kp2", "industries.metalMechanical.kp3", "industries.metalMechanical.kp4", "industries.metalMechanical.kp5", "industries.metalMechanical.kp6", "industries.metalMechanical.kp7", "industries.metalMechanical.kp8", "industries.metalMechanical.kp9", "industries.metalMechanical.kp10", ]; referenceLogos = [ , , , , ]; challengesBullets = [ "industries.metalMechanical.ch1", "industries.metalMechanical.ch2", "industries.metalMechanical.ch3", "industries.metalMechanical.ch4", ]; MetalMechanical = () => ( ); --- # nPlan - Farma & Cosméticos Supply Chain Planning URL: https://nplan.digital/industries/pharma Supply chain planning platform for pharmaceutical and cosmetics industries. Shelf life, traceability, capacity planning and more. keyPoints = [ "industries.pharma.kp1", "industries.pharma.kp2", "industries.pharma.kp3", "industries.pharma.kp4", "industries.pharma.kp5", "industries.pharma.kp6", "industries.pharma.kp7", "industries.pharma.kp8", "industries.pharma.kp9", "industries.pharma.kp10", ]; referenceLogos = [ , , , , ]; challengesBullets = [ "industries.pharma.ch1", "industries.pharma.ch2", "industries.pharma.ch3", "industries.pharma.ch4", ]; Pharma = () => ( ); --- # nPlan - Plástico & Borracha Supply Chain Planning URL: https://nplan.digital/industries/plastics-rubber Supply chain planning for plastics and rubber industries. Mold scheduling, batch optimization and material constraint planning. keyPoints = [ "industries.plasticsRubber.kp1", "industries.plasticsRubber.kp2", "industries.plasticsRubber.kp3", "industries.plasticsRubber.kp4", "industries.plasticsRubber.kp5", "industries.plasticsRubber.kp6", "industries.plasticsRubber.kp7", "industries.plasticsRubber.kp8", "industries.plasticsRubber.kp9", "industries.plasticsRubber.kp10", ]; challengesBullets = [ "industries.plasticsRubber.ch1", "industries.plasticsRubber.ch2", "industries.plasticsRubber.ch3", "industries.plasticsRubber.ch4", ]; referenceLogos = [ , , ]; PlasticsRubber = () => ( ); --- # nPlan - Têxtil e Calçados Supply Chain Planning URL: https://nplan.digital/industries/textile Supply chain planning for textile and footwear industry. Multi-level synchronization, segmentation inventory, financial planning and more. keyPoints = [ "industries.textile.kp1", "industries.textile.kp2", "industries.textile.kp3", "industries.textile.kp4", "industries.textile.kp5", "industries.textile.kp6", "industries.textile.kp7", "industries.textile.kp8", "industries.textile.kp9", "industries.textile.kp10", ]; referenceLogos = [ , , , , ]; challengesBullets = [ "industries.textile.ch1", "industries.textile.ch2", "industries.textile.ch3", "industries.textile.ch4", ]; Textile = () => ( ); --- # Customer Success Stories | NPLAN URL: https://nplan.digital/cases Companies that transformed supply chain planning with NPLAN. Faster decisions, smarter operations, measurable results. Cases = () => { = useTranslation(); [view, setView] = useState<"cards" | "logos">("cards"); [showDetails, setShowDetails] = useState( ); ( {featuredRefs.map((ref) => ( {ref.logo ? ( ) : ( )} ))} {view === "cards" ? ( {otherRefs.map((ref, idx) => ( {ref.logo ? ( <> ) : ( )} ))} ) : ( {references.map((ref, idx) => )} )} ); }; --- # Fey Case: -35% WIP and planning cycle from 3 days to 3 hours with NPLAN + AI Agents URL: https://nplan.digital/cases/fey How Metalúrgica Fey cut WIP inventory by 35%, compressed its planning cycle from 3 days to 3 hours and added AI agents on top of an integrated planning base with SAP S/4HANA. tt = (lang: string, pt: string, en: string, es: string) => ; FeyCase = () => { = useTranslation(); lang = i18n.language || "pt-BR"; title = tt( lang, "Case Fey: -35% de WIP e ciclo de planejamento de 3 dias para 3 horas com NPLAN + AI Agents", "Fey Case: -35% WIP and planning cycle from 3 days to 3 hours with NPLAN + AI Agents", "Caso Fey: -35% de WIP y ciclo de planificación de 3 días a 3 horas con NPLAN + AI Agents" ); description = tt( lang, "Como a Metalúrgica Fey reduziu o estoque WIP em 35%, comprimiu o ciclo de planejamento de 3 dias para 3 horas e adicionou agentes de IA sobre uma base de planejamento integrada com SAP S/4HANA.", "How Metalúrgica Fey cut WIP inventory by 35%, compressed its planning cycle from 3 days to 3 hours and added AI agents on top of an integrated planning base with SAP S/4HANA.", "Cómo Metalúrgica Fey redujo el WIP en 35%, comprimió el ciclo de planificación de 3 días a 3 horas y añadió agentes de IA sobre una base de planificación integrada con SAP S/4HANA." ); faq = [ , , , , ]; metrics = [ , , ]; ( SAP S/4HANA AI Agents Stack NPLAN + AI Agents + SAP S/4HANA {metrics.map((m, i) => )} ); }; --- # Peccin Case: from 3-day scheduling to S&OP scenarios in minutes with NPLAN URL: https://nplan.digital/cases/peccin How Peccin cut its scheduling cycle from 3 days to a few hours, multiplied planning scenarios and grew from 400 to over 2,000 tons/month while keeping the same planning team. tt = (lang: string, pt: string, en: string, es: string) => ; PeccinCase = () => { = useTranslation(); lang = i18n.language || "pt-BR"; title = tt( lang, "Case Peccin: de 3 dias de programação a cenários de S&OP em minutos com o NPLAN", "Peccin Case: from 3-day scheduling to S&OP scenarios in minutes with NPLAN", "Caso Peccin: de 3 días de programación a escenarios de S&OP en minutos con NPLAN" ); description = tt( lang, "Como a Peccin (Garoto, doces e chocolates) reduziu o ciclo de programação de 3 dias para poucas horas, multiplicou cenários de planejamento e cresceu de 400 para mais de 2.000 toneladas/mês mantendo a mesma equipe de PCP.", "How Peccin cut its scheduling cycle from 3 days to a few hours, multiplied planning scenarios and grew from 400 to over 2,000 tons/month keeping the same planning team.", "Cómo Peccin redujo el ciclo de programación de 3 días a pocas horas, multiplicó escenarios de planificación y creció de 400 a más de 2.000 toneladas/mes manteniendo el mismo equipo." ); faq = [ , , , , ]; metrics = [ , , , ]; ( TOTVS Opcenter AS NPLAN + Opcenter + SAP {metrics.map((m, i) => )} Jades Romano \u00B7 Jades Romano \u00B7 ); }; --- # Premier Pet Case: from one week to 3 minutes per scenario with NPLAN, APS and DRP URL: https://nplan.digital/cases/premier-pet How Premier Pet scaled multiple plants, over 500 SKUs and hundreds of raw materials with the same planning team, using a three-layer integrated planning model: NPLAN, APS and DRP. tt = (lang: string, pt: string, en: string, es: string) => ; PremierPetCase = () => { = useTranslation(); lang = i18n.language || "pt-BR"; title = tt( lang, "Case Premier Pet: de uma semana para 3 minutos por cenário com NPLAN, APS e DRP", "Premier Pet Case: from one week to 3 minutes per scenario with NPLAN, APS and DRP", "Caso Premier Pet: de una semana a 3 minutos por escenario con NPLAN, APS y DRP" ); description = tt( lang, "Como a Premier Pet escalou múltiplas fábricas, mais de 500 SKUs e centenas de matérias-primas mantendo o mesmo time de PCP, com planejamento integrado em três camadas: NPLAN, APS e DRP.", "How Premier Pet scaled multiple plants, over 500 SKUs and hundreds of raw materials with the same planning team, using a three-layer integrated planning model: NPLAN, APS and DRP.", "Cómo Premier Pet escaló múltiples plantas, más de 500 SKUs y cientos de materias primas con el mismo equipo de PCP, usando planificación integrada en tres capas: NPLAN, APS y DRP." ); faq = [ , , , , ]; metrics = [ , , , ]; ( NPLAN APS DRP NPLAN + Opcenter + TOTVS {metrics.map((m, i) => )} Antenor Neto Premier Pet Antenor Neto \u00B7 Antenor Neto \u00B7 Antenor Neto \u00B7 ); }; --- # Unipac Case: NPLAN cuts material shortages by 58% and transforms S&OP at Grupo Jacto URL: https://nplan.digital/cases/unipac How Unipac (Grupo Jacto) integrated forecast, capacity and inventory with NPLAN: -58% material shortages, -53% stagnant stock, 1,000+ scenarios simulated at the Pompeia/SP plant. tt = (lang: string, pt: string, en: string, es: string) => ; UnipacCase = () => { = useTranslation(); lang = i18n.language || "pt-BR"; title = tt( lang, "Case Unipac: NPLAN reduz rupturas em 58% e transforma o S&OP no Grupo Jacto", "Unipac Case: NPLAN cuts material shortages by 58% and transforms S&OP at Grupo Jacto", "Caso Unipac: NPLAN reduce roturas en 58% y transforma el S&OP en Grupo Jacto" ); description = tt( lang, "Como a Unipac (Grupo Jacto) integrou previsão, capacidade e estoques com o NPLAN: -58% materiais em ruptura, -53% estoque estagnado, +1.000 cenários simulados na unidade de Pompeia/SP.", "How Unipac (Grupo Jacto) integrated forecast, capacity and inventory with NPLAN: -58% material shortages, -53% stagnant stock, 1,000+ scenarios simulated at the Pompeia/SP plant.", "Cómo Unipac (Grupo Jacto) integró pronóstico, capacidad e inventarios con NPLAN: -58% roturas, -53% stock estancado, +1.000 escenarios simulados en la planta de Pompeia/SP." ); faq = [ , , , , ]; metrics = [ , , , , , ]; ( SAP Opcenter AS NPLAN + Opcenter + SAP {metrics.map((m, i) => )} "Depois de procurar e testar várias plataformas consolidadas no mercado, escolhemos o NPLAN porque foi quem melhor atendeu aos requisitos de gestão de estoques e às complexidades da fábrica. Mais de 350 cenários simulados nos últimos 6 meses, 27% de redução em atrasos e rupturas, 15% de melhoria na saúde dos estoques." Marcelo Trindade Unipac Wallyson Victor Teruel Santos \u00B7 Marcelo Trindade \u00B7 Humberto Saes Passarelli \u00B7 ); }; --- # Artigos - NPLAN Supply Chain Planning URL: https://nplan.digital/articles Explore artigos sobre planejamento de supply chain, integrações SAP e Siemens, casos de uso de IA e melhores práticas em gestão de cadeia de suprimentos. type FilterId = ArticleCategory | ; Articles = () => { = useTranslation(); [selectedCategory, setSelectedCategory] = useState ( ); categories: [] = [ , , , , , , , , ]; sortByDateDesc = (a: typeof articlesList[number], b: typeof articlesList[number]) => ; educational = useMemo( () => articlesList.filter((a) => a.category !== "processo").sort(sortByDateDesc), [] ); processOrder = [ "demand-planning", "inventory-policy", "supply-planning", "capacity-orders", "distribution-planning", ]; processArticles = useMemo( () => processOrder .map((id) => articlesList.find((a) => a.id === id)) .filter((a): a is typeof articlesList[number] => Boolean(a)), [] ); filtered = selectedCategory ? articlesList.filter((a) => a.category === selectedCategory).sort(sortByDateDesc) : ; ( {filtered ? ( ) : ( <> )} ); }; --- # Articles Agent Harness URL: https://nplan.digital/articles/agent-harness Articles Agent Harness — nPlan. useTT = () => ; HarnessDiagram = () => { tt = useTT(); layers = [ , , , , , ]; userReqLabel = tt("Solicitação do usuário", "User Request", "Solicitud del usuario"); agentRespLabel = tt("Resposta do agente", "Agent Response", "Respuesta del agente"); customAgentsHint = tt( "Múltiplos agentes customizados podem ser adicionados por operação", "Multiple custom agents can be added per operation", "Se pueden añadir múltiples agentes personalizados por operación" ); continuousLoop = tt("Loop de aprendizado contínuo", "Continuous learning loop", "Loop de aprendizaje continuo"); ( {layers.map((layer, idx) => ( 0 {layer.n === "2" ? ( {layer.agents!.map((a) => ( ))} ) : ( )} {idx < layers.length - 1 && ( )} ))} ); }; SeniorAnalystCallout = () => ; PurposeUseCallout = () => { tt = useTT(); ( ); }; HarnessDefinitionCallout = () => ; LLMvsEngineCallout = () => { tt = useTT(); ( LLM ); }; AgentHarness = () => { tt = useTT(); T = ; tableOfContents = [ , , , , , , , , , , , ]; relatedArticles = [ , , , ]; P = ; ( ); }; --- # Fundamentos de IA no NPLAN - Supply Chain Planning URL: https://nplan.digital/articles/ai-foundations Entenda por que AI Agents precisam de um Supply Chain Engine com Optimization, Heuristics, Statistics e ML para entregar resultados reais em planejamento de supply chain. type Level = "HIGH" | "MEDIUM" | "LOW" | "COMPLEMENTARY"; levelColors: Record = ; levelKeys: Record = ; matrixData: [] = [ , , , , , , , ]; UseCasesMatrix = () => { = useTranslation(); columns = [ , , , , ]; ( {matrixData.map((row, idx) => { isUX = row.separator; ( {(["genai", "ml", "optimization", "heuristics"] as ).map(key => ( ))} ); })} ); }; ArchitectureDiagram = () => { = useTranslation(); ( Custom AI Agents {["diagramTagDataset", "diagramTagTools", "diagramTagGovernance", "diagramTagAuditable", "diagramTagAdaptive"].map(key => ( ))} Supply Chain Engine Supply Chain Data AI Agents ? Supply Chain Data AI Agents Supply Chain Engine Supply Chain Data ); }; AiFoundations = () => { = useTranslation(); tableOfContents = [ , , , , , ]; relatedArticles = [ , , , ]; ( ); }; --- # Casos de Uso de IA em Supply Chain - nPlan URL: https://nplan.digital/articles/ai-use-cases Descubra 16 casos de uso práticos de inteligência artificial aplicados ao planejamento de supply chain: previsão de demanda, otimização de inventário, análise preditiva e muito mais. AiUseCases = () => { = useTranslation(); tableOfContents = [ , , , , , , , ]; relatedArticles = [ , , , ]; useCases = [ , , , , , , , , , , , , , , , ]; ( Demand Planning 24% 33% 38% 5% Supply Planning 5% 19% 72% 5% {useCases.map((useCase) => ( {useCase.badge && ( )} ))} ); }; --- # Capacidad y Órdenes: motor finito y sincronización punta a punta URL: https://nplan.digital/articles/capacity-orders Capacidad y Órdenes: motor finito y sincronización punta a punta — nPlan. useTT = () => ; CapacityOrders = () => { tt = useTT(); sidebarSections = [ , , , , , , , , , ]; relatedArticles = [ , , , ]; constraints = [ , , , , , , ]; priorityCriteria = [ , , , , , , , ]; orderFeatures = [ , , , , ]; nplanFeatures = [ , , , , , , ]; quiz: ArticleQuizQuestion[] = [ , , , , , ]; title = tt( "Capacidade e Ordens: motor finito e sincronização ponta a ponta", "Capacity and Orders: finite engine and end-to-end synchronization", "Capacidad y Órdenes: motor finito y sincronización punta a punta", ); description = tt( "Como o motor de capacidade finita ajusta o plano período a período, prioriza demanda dinamicamente e gera ordens sincronizadas com pegging multi-nível.", "How the finite capacity engine constrains the plan period by period, prioritizes demand dynamically and generates synchronized orders with multi-level pegging.", "Cómo el motor de capacidad finita ajusta el plan período a período, prioriza demanda dinámicamente y genera órdenes sincronizadas con pegging multinivel.", ); ( {constraints.map((c, i) => )} {orderFeatures.map((f, i) => )} {nplanFeatures.map((f, i) => )} ); }; --- # Consolidação de Demanda: Pedidos + Previsão no SCP | NPLAN URL: https://nplan.digital/articles/demand-consolidation Guia completo para definir regras de Demanda Consolidada no Supply Chain Planning: combinação de pedidos firmes e previsão, phasing, M0 e estratégias avançadas. DemandConsolidation = () => { = useTranslation(); sidebarSections = [ , , , , , , , ]; approaches = [ , , ]; ( 💡 ); }; --- # Planeación de Demanda: de la estadística a la decisión | NPLAN URL: https://nplan.digital/articles/demand-planning Planeación de Demanda: de la estadística a la decisión | NPLAN — nPlan. brToPt = (text: string): string => ; useTT = () => ; DemandPlanning = () => { tt = useTT(); sidebarSections = [ , , , , , , , , ]; PracticeBox = ( : ) => ( ); title = tt( "Planejamento de Demanda: da estatística à decisão", "Demand Planning: from statistics to decision", "Planeación de Demanda: de la estadística a la decisión", ); description = tt( "Cinco capítulos cobrindo o ciclo completo: tratamento de dados, enriquecimento, análise, modelos estatísticos e colaboração financeira, com laboratórios interativos em cada etapa.", "Five chapters covering the complete cycle: data treatment, enrichment, analysis, statistical models and financial collaboration, with interactive labs at every step.", "Cinco capítulos que cubren el ciclo completo: tratamiento, enriquecimiento, análisis, modelos y colaboración financiera, con laboratorios interactivos en cada etapa.", ); ChapterHeader = ( : ) => ( ); ( 0,20% McKinsey & Company 0,50% MAPE WMAPE Bias FVA ); }; --- # Planeación de Distribución: del DRP estático al plan vivo URL: https://nplan.digital/articles/distribution-planning Planeación de Distribución: del DRP estático al plan vivo — nPlan. useTT = () => ; stepIcons = [TrendingUp, Network, Truck, Scale, Gauge]; featureIcons = [Layers, LayoutGrid, Cpu, Building2, Network, Plug]; DistributionPlanning = () => { tt = useTT(); sidebarSections = [ , , , , , , , , ]; relatedArticles = [ , , , ]; processSteps = [ , , , , , ]; demandDrivenPoints = [ , , , , ]; finiteConstraints = [ , , , , ]; nplanFeatures = [ , , , , , , ]; quiz: ArticleQuizQuestion[] = [ , , , , , ]; title = tt( "Planejamento de Distribuição: do DRP estático ao plano vivo", "Distribution Planning: from static DRP to a live plan", "Planeación de Distribución: del DRP estático al plan vivo", ); description = tt( "Como um DRP demand driven com Fair Share e capacidade finita de logística entrega um plano de transferências executável e equilibrado entre serviço, custo e eficiência.", "How a demand-driven DRP with Fair Share and finite logistics capacity delivers an executable transfer plan balanced between service, cost and efficiency.", "Cómo un DRP demand driven con Fair Share y capacidad finita de logística entrega un plan de transferencias ejecutable y equilibrado.", ); ( {processSteps.map((s, i) => )} {[ ["HUB", "DC-N", "4001-01", "1.200 un", tt("Rodoviário", "Road", "Carretera"), "3d", tt("Cobertura crítica", "Critical coverage", "Cobertura crítica")], ["HUB", "DC-W", "4001-01", "600 un", tt("Rodoviário", "Road", "Carretera"), "5d", tt("Reposição programada", "Scheduled replenishment", "Reposición programada")], ["DC-E", "HUB", "4001-01", "800 un", tt("Rodoviário", "Road", "Carretera"), "4d", tt("Excesso → balanceamento", "Excess → balancing", "Exceso → balance")], ["HUB", "DC-S", "4002-02", "300 un", tt("Aéreo", "Air", "Aéreo"), "1d", tt("Pedido especial", "Special order", "Pedido especial")], ].map((row, i) => ( ))} {[ , , , ].map((s, i) => ( ))} {nplanFeatures.map((item, i) => )} ); }; --- # Do Excel ao Supply Chain Planning em 12 Semanas | NPLAN URL: https://nplan.digital/articles/excel-to-scp Guia prático com cronograma semana a semana para migrar do Excel para uma plataforma de Supply Chain Planning. Metodologia, fases e melhores práticas de implantação. interface TimelineCardProps TimelineCard = ( : TimelineCardProps) => ( ); ExcelToScp = () => { = useTranslation(); sidebarSections = [ , , , , ]; timelineWeeks = [ , , , , , , , , , , , , ]; ( {["discovery", "delivery", "expansion"].map((phase) => ( ))} {[ , , , , ].map((team) => ( ))} ); }; --- # Adherencia del Plan y la Programación en Manufactura | Nplan URL: https://nplan.digital/articles/execution-adherence Adherencia del Plan y la Programación en Manufactura | Nplan — nPlan. type TT = (pt: string, en: string, es: string) => string; BTPCalculator = ( : ) => { [products, setProducts] = useState([ , , , ]); updateProduced = useCallback((id: string, value: number) => , []); totalPlanned = products.reduce((s, p) => s + p.planned, 0); totalProduced = products.reduce((s, p) => s + p.produced, 0); volumePct = Math.min(100, parseFloat(((totalProduced / totalPlanned) * 100).toFixed(1))); mixNumerator = products.reduce((sum, p) => sum + Math.min(p.produced, p.planned), 0); mixPct = parseFloat(((mixNumerator / totalPlanned) * 100).toFixed(1)); btpResult = mixPct; getColor = (v: number) => v >= 85 ? "text-green-400" : v >= 70 ? "text-yellow-400" : "text-red-400"; ( BTP = Mix Mix % {products.map((p) => )} Total % vol Mix % Σ min( , ) ÷ Σ BTP % = Mix Mix: ); }; BTSCalculator = ( : ) => { [volumePlanned, setVolumePlanned] = useState(1000); [volumeProduced, setVolumeProduced] = useState(920); [mixPct, setMixPct] = useState(80); [seqPct, setSeqPct] = useState(70); volumeAdh = Math.min(100, Math.round((volumeProduced / volumePlanned) * 100)); btsResult = Math.round((volumeAdh / 100) * (mixPct / 100) * (seqPct / 100) * 100); getColor = (v: number) => v >= 85 ? "text-green-400" : v >= 70 ? "text-yellow-400" : "text-red-400"; seqLabel = tt("Sequência", "Sequence", "Secuencia"); impacts = [ , , , ]; mainImpact = impacts.reduce((min, cur) => cur.value < min.value ? cur : min, impacts[0]); ( BTS = Volume × Mix × {[ , , , ].map((item) => )} / = % % % Volume % Mix % % Build to Schedule % % × % × % = % : ); }; PlanVsScheduleToggle = ( : ) => { [mode, setMode] = useState<"plan" | "schedule">("plan"); data = { plan: , schedule: , }; current = data[mode]; Icon = current.icon; ( Build to Plan Build to Schedule ); }; ProbabilityChainSimulator = ( : ) => { RELIABILITY_FACTORS = [ , , , , , ]; [numOps, setNumOps] = useState(5); [factors, setFactors] = useState >( Object.fromEntries(RELIABILITY_FACTORS.map((f) => [f.key, f.default])) ); combinedReliability = useMemo(() => , [factors]); operations = useMemo(() => { ops = []; cumulative = 1; baseRel = combinedReliability / 100; ( i = 0; i < numOps; i++) ops; }, [numOps, combinedReliability]); finalProb = operations[operations.length - 1]?.cumulative || 100; getColor = (prob: number) => ; getBgColor = (prob: number) => ; updateFactor = useCallback((key: string, value: number) => , []); ( : {RELIABILITY_FACTORS.map((f) => { Icon = f.icon; val = factors[f.key]; ( % ); })} % % {finalProb < 80 && ( )} ); }; TimeDegradationChart = ( : ) => { [dailyReliability, setDailyReliability] = useState(90); [numDays, setNumDays] = useState(10); chartData = useMemo(() => { data = []; cumulative = 1; ( d = 1; d <= numDays; d++) { rel = dailyReliability / 100; cumulative *= rel; data.push( ); } data; }, [dailyReliability, numDays]); chartConfig = ; finalCumulative = chartData[chartData.length - 1]?.cumulative || 100; ( : % : % ); }; type RigorLevel = "full" | "volume-mix" | "volume" | "none"; RigorLevelsTimeline = ( : ) => { [levels, setLevels] = useState >( ); bands = [ , , , ]; seqLabel = tt("Sequência", "Sequence", "Secuencia"); rigorOptions: [] = [ , , , , ]; getRigorColor = (r: RigorLevel) => ; ( {bands.map((band) => ( {rigorOptions.map((opt) => ( ))} ))} {bands.map((b) => ).join(" → ")} ); }; interface Order RootCauseSimulator = ( : ) => { categories = [ , , , , , , , , ]; [orders, setOrders] = useState ([ , , , , , , , , ]); [selectedIds, setSelectedIds] = useState >(new Set()); [bulkCauseOpen, setBulkCauseOpen] = useState( ); toggleSelect = useCallback((id: number) => , []); selectAllPending = useCallback(() => , [orders]); markOrder = useCallback((id: number, status: "hit" | "miss") => , []); bulkMarkMiss = useCallback((cause: string) => , [selectedIds]); classifyCause = useCallback((id: number, cause: string) => , []); evaluated = orders.filter((o) => o.status !== "pending"); hits = orders.filter((o) => o.status === "hit"); misses = orders.filter((o) => o.status === "miss"); adherence = evaluated.length > 0 ? Math.round((hits.length / evaluated.length) * 100) : ; missesClassified = misses.filter((o) => o.cause); allDone = evaluated.length === orders.length && misses.every((o) => o.cause); paretoData = useMemo(() => { counts: Record = ; missesClassified.forEach((o) => ); sorted = Object.entries(counts) .sort(([, a], [, b]) => b - a) .map(([catId, count]) => ); total = sorted.reduce((acc, d) => acc + d.count, 0); cumSum = 0; sorted.map((d) => ); }, [missesClassified]); getAdherenceColor = (pct: number) => ; ( {bulkCauseOpen && ( {categories.map((cat) => )} )} {orders.map((order) => ( {order.status === "pending" && ( )} HIT MISS {order.status === "miss" && ( {categories.map((cat) => { Icon = cat.icon; ( ); })} )} ))} {allDone && paretoData.length > 0 && ( % HIT / MISS ( % ) )} ); }; GovernanceFlowSimulator = ( : ) => { flowStepsWithout = [ , , , , ]; flowStepsWith = [ , , , , , , ]; riskActions = [ , , , , ]; [mode, setMode] = useState<"without" | "with">("without"); isWithout = mode === "without"; steps = isWithout ? flowStepsWithout : flowStepsWith; ( {steps.map((step, i) => )} 30% – 50% 70% – 85% ); }; LearningLoopVisual = ( : ) => { [activePhase, setActivePhase] = useState(0); phases = [ , , , , , ]; ( {phases.map((phase, i) => { Icon = phase.icon; isActive = i === activePhase; ( ); })} ); }; ExecutionAdherence = () => { = useTranslation(); lang = i18n.language; tt: TT = (pt, en, es) => lang.startsWith("en") ? en : lang.startsWith("es") ? es : pt; seqLabel = tt("Sequência", "Sequence", "Secuencia"); tocItems = [ , , , , , , , , , , , , , ]; relatedArticles = [ , , , ]; ( {[ , , , ].map((item, i) => )} Build to Plan vs Build to Schedule Build to Plan Build to Schedule {[ , , , , , , ].map((item, i) => )} {[ , , , ].map((band, i) => ( ))} ); }; --- # Acuracidade do Forecast e Impacto Financeiro | NPLAN URL: https://nplan.digital/articles/forecast-accuracy Como converter melhoria na acuracidade da previsão de vendas em resultado financeiro concreto. Benchmarks IBF/McKinsey, impacto de over e under-forecast no supply chain. ForecastAccuracy = () => { = useTranslation(); sidebarSections = [ , , , , , , ]; overForecastItems = [ , , , , ]; underForecastItems = [ , , , , ]; ( 0,20% 0,50% {overForecastItems.map(( ) => ( ))} {underForecastItems.map(( ) => ( ))} ); }; --- # Inventory Policy: ABC-XYZ, Forecast Accuracy & Supplier OTIF | NPLAN URL: https://nplan.digital/articles/inventory-policy Complete guide to differentiated inventory policy: ABC-XYZ segmentation, 6 safety stock formulas including forecast accuracy and supplier OTIF, days vs units, and 10 ways to reduce stock today. driverIcons = [DollarSign, BarChart3, Package, AlertTriangle, ShieldCheck, Truck, LineChart]; stepIcons = [Search, TrendingUp, Ban, RotateCcw, Tag, Trash2, Gift, BarChart3, ShieldCheck, CheckCircle]; featureIcons = [Cpu, Layers, ShieldCheck, Target, DollarSign, Warehouse, CalendarDays, HeartPulse, GitCompare]; MISTAKE_ORDER = [0, 4, 1, 2, 3, 5, 6]; InventoryPolicy = () => { = useTranslation(); isPt = i18n.language?.startsWith("pt"); nplanScreenshot = isPt ? nplanScreenPtBr : nplanScreenEng; unitsScreenshot = isPt ? daysScreenPt : daysScreenEn; daysScreenshot = isPt ? unitsScreenPt : unitsScreenEn; sidebarSections = [ , , , , , , , , , , , , , ]; relatedArticles = [ , , , ]; drivers = (t("articles.inventoryPolicy.drivers", ) as []); optimizeSteps = (t("articles.inventoryPolicy.optimizeSteps", ) as []); mistakesRaw = (t("articles.inventoryPolicy.mistakes", ) as []); mistakes = Array.isArray(mistakesRaw) ? MISTAKE_ORDER.map(idx => mistakesRaw[idx]).filter(Boolean) : []; nplanFeatures = (t("articles.inventoryPolicy.nplanFeatures", ) as []); tagStyles: Record = ; tagLabel = (tag?: string) => ; ( {Array.isArray(drivers) && drivers.map((d, i) => )} • • • {["s9bullet1", "s9bullet2", "s9bullet3", "s9bullet4"].map((k) => ( • ))} {["sFinBullet1", "sFinBullet2", "sFinBullet3"].map((k) => ( • ))} {["s10closeBullet1", "s10closeBullet2", "s10closeBullet3"].map((k) => ( • ))} {Array.isArray(nplanFeatures) && nplanFeatures.map((item, i) => )} {Array.isArray(optimizeSteps) && optimizeSteps.map((a, i) => )} {[ , , , , ].map(( , i) => ( ))} {[ , , , ].map(( , i) => ( ))} {[ , , ].map(( , i) => ( ))} ); }; --- # MRO Material Planning in Supply Chain Planning | NPLAN URL: https://nplan.digital/articles/mro-planning Best practices for MRO material planning with criticality segmentation, automated replenishment, and scenario simulation in Supply Chain Planning. MroPlanningArticle = () => { = useTranslation(); [isPlaying, setIsPlaying] = useState( ); videoRef = useRef ( ); sidebarSections = [ , , , , , , ]; relatedArticles = [ , , , ]; ( { video = videoRef.current; (video) }} > ); }; --- # Articles Nplan Opcenter URL: https://nplan.digital/articles/nplan-opcenter Articles Nplan Opcenter — nPlan. NplanOpcenter = () => { = useTranslation(); k = (key: string) => t(`articles.nplanOpcenter.$ `); tableOfContents = [ , , , , , , , , , , , , , ]; relatedArticles = [ , , , ]; IconBullet = ( : ) => ( ); ( Opcenter AS {[ , , , , , , , , ].map(( ) => ( ))} . ); }; --- # Integração nPlan + SAP - Planejamento Avançado de Supply Chain URL: https://nplan.digital/articles/nplan-sap Descubra como a integração entre nPlan e SAP potencializa o planejamento de supply chain com troca de dados em tempo real, otimização de processos e decisões mais inteligentes. NplanSap = () => { = useTranslation(); tableOfContents = [ , , , ]; relatedArticles = [ , , , ]; badges = t("articles.nplanSap.badges", ) as string[]; keyPoints = t("articles.nplanSap.keyPoints", ) as string[]; dataExchange = t("articles.nplanSap.dataExchange", ) as Array< >; dataWrite = t("articles.nplanSap.dataWrite", ) as Array< >; whyNplan = t("articles.nplanSap.whyNplan", ) as string[]; ( Leitura recomendada E quando o assunto é SAP IBP? Este artigo trata da integração do NPLAN com o ERP SAP (S/4HANA e ECC) na camada transacional. Se a sua empresa avalia o SAP IBP como camada de planejamento, ou já opera com SAP APO e estuda migrar, a leitura complementar é essencial: explicamos onde o IBP se posiciona, suas limitações operacionais e por que a migração APO → IBP raramente é trivial. Ler: NPLAN vs SAP IBP → ); }; --- # nPlan + Siemens Xcelerator - Parceria Estratégica em Supply Chain URL: https://nplan.digital/articles/nplan-siemens Conheça a parceria entre nPlan e Siemens Xcelerator que oferece soluções avançadas de planejamento de supply chain com IA, integração nativa e tecnologia de ponta. NplanSiemens = () => { = useTranslation(); tableOfContents = [ , , ]; featureIcons: Record = ; comparisonData = [ , , , , , , , , , , , , , ]; renderStatusIcon = (status: string) => ; relatedArticles = [ , , , ]; ( {comparisonData.map((row) => { Icon = featureIcons[row.feature]; ( ); })} ); }; --- # Articles Nplan Vs Genai URL: https://nplan.digital/articles/nplan-vs-genai Articles Nplan Vs Genai — nPlan. NplanVsGenAi = () => { = useTranslation(); tg = (key: string): string => t(`articles.nplanVsGenAi.$ `) as string; renderHtml = (html: string) => ( ); tableOfContents = [ , , , , , , , , , , , ]; relatedArticles = [ , , , ]; carouselImages = [ , , , , , , , ]; securityBullets = [ , , , , , , ]; ( ); }; --- # Articles Nplan Vs Global Platforms URL: https://nplan.digital/articles/nplan-vs-global-platforms Articles Nplan Vs Global Platforms — nPlan. NplanVsGlobalPlatforms = () => { = useTranslation(); contact = useContactChoice(); tg = (key: string): string => t(`articles.nplanVsGlobalPlatforms.$ `) as unknown as string; tableOfContents = [ , , , , , , , , , , ]; relatedArticles = [ , , , ]; type Cell = ; NplanCostTooltip = () => ( ); renderRich = (text: string) => ; rows: Array< > = [ , , , , , , ]; Dots = ( : ) => { tone = score >= 4 ? "bg-emerald-500" : score === 3 ? "bg-yellow-500" : "bg-destructive"; ( {Array.from( ).map((_, i) => ( ))} ); }; HeaderLogo = ( : ) => ( ); focusItems = [ , , , , ]; regions = [ , , , ]; ( {focusItems.map((p) => ( ))} {rows.map((r) => ( ))} {[ , , ].map((c) => ( ))} ); }; --- # Articles Nplan Vs Sap Ibp URL: https://nplan.digital/articles/nplan-vs-sap-ibp Articles Nplan Vs Sap Ibp — nPlan. NplanVsSapIbp = () => { = useTranslation(); ts = (key: string): string => t(`articles.nplanVsSapIbp.$ `) as unknown as string; renderRich = (text: string) => ; tableOfContents = [ , , , , , , , , , , , ]; renderStars = (count: number) => ( {[1, 2, 3, 4, 5].map((i) => ( ))} ); relatedArticles = [ , , , ]; geralRowKeys = ["foco", "nivel", "capacidade", "seq", "bom", "cenarios", "execucao", "multi", "excel", "reprod", "fechamento", "gov", "fin", "shelf", "ttv2"] as ; geralStars: Record = ; decisionKeys = ["q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9", "q10"] as ; decisionStatus: Record = ; renderStatus = (value: "yes" | "partial" | "no") => ; Dots = ( : ) => ( {Array.from( ).map((_, i) => ( ))} ); Pill = ( : ) => ; ConsultoriaTooltip = () => { items = ts("tooltip.consultoriaItems").split("|"); ( ); }; IbpCostTooltip = () => ( ); NplanCostTooltip = () => ( ); StarsRow = ( : ) => ( {Array.from( ).map((_, i) => ( ))} ); groups: [] = [ { title: ts("executivo.groupImplantacao"), rows: [ , , , , , ], }, { title: ts("executivo.groupArquitetura"), rows: [ , , , ], }, { title: ts("executivo.groupResultado"), rows: [ , , , ], }, ]; limitacaoBlocks = [ , , , , ]; ibpFazBemBlocks = [ , , , , , , , ]; custoBlocks = [ , , , , ]; ibpSteps = [ts("arq.ibpStep1"), ts("arq.ibpStep2"), ts("arq.ibpStep3"), ts("arq.ibpStep4"), ts("arq.ibpStep5")]; nplanSteps = [ , , , , , ]; ( SAP IBP NPLAN SCP {groups.map((group, gi) => ( {group.rows.map((row, i) => )} ))} SAP IBP NPLAN SCP {geralRowKeys.map((rk) => ( ))} SAP IBP NPLAN SCP {decisionKeys.map((qk) => ( ))} • • • • ); }; --- # NPLAN vs S&OP Platforms: the real problem is the disconnect with execution URL: https://nplan.digital/articles/nplan-vs-sop Why traditional S&OP tools fail in the transition to operations. A direct analysis of Plannera, Pyplan, Colplan and the gap between consensus and execution. NplanVsSop = () => { = useTranslation(); tableOfContents = [ , , , , , , , , , , , ]; relatedArticles = [ , , , ]; flowSteps = [ , , , , , ]; scpCards = [ , , , ]; ( {[ , , , ].map(( ) => ( ))} {flowSteps.map((step, i) => ( ))} Plannera Pyplan Colplan (VE3) {scpCards.map((b, i) => ( ))} ); }; --- # Supply Chain Planning Canvas: Diagnóstico de Maturidade | NPLAN URL: https://nplan.digital/articles/planning-canvas Framework visual para mapear e diagnosticar a maturidade do planejamento de supply chain. Canvas em PDF com 12 dimensões de avaliação e plano de ação. interface CanvasCardProps CanvasCard = ( : CanvasCardProps) => { [isOpen, setIsOpen] = useState(defaultOpen); ( {isOpen && ( )} ); }; PlanningCanvas = () => { = useTranslation(); sidebarSections = [ , , , , , ]; businessCards = [ , , , , , , , , ]; itCards = [ , , , , , , ]; ( {businessCards.map((card, idx) => ( ))} {itCards.map((card, idx) => ( ))} ); }; --- # Planning ou Scheduling: Por Onde Começar? | NPLAN URL: https://nplan.digital/articles/planning-vs-scheduling Framework de decisão com quiz interativo de 7 dimensões para definir se sua empresa deve começar pelo Planning ou Scheduling no Supply Chain. quizIcons = [TrendingUp, Cog, Package, ShoppingCart, HelpCircle, MessageSquare, BarChart3]; QuizSection = () => { = useTranslation(); [answers, setAnswers] = useState >( ); [showResult, setShowResult] = useState( ); questions = Array.from( , (_, i) => ( )); countA = Object.values(answers).filter(v => v === "a").length; countB = Object.values(answers).filter(v => v === "b").length; allAnswered = Object.keys(answers).length === 7; ( {questions.map((q, idx) => { Icon = q.icon; ( } className="space-y-3" > A) B) ); })} {allAnswered && ( {!showResult ? ( ) : ( )} )} ); }; PlanningVsScheduling = () => { = useTranslation(); sidebarSections = [ , , , , , , ]; ( {["s2b1", "s2b2", "s2b3", "s2b4"].map((key) => ( ))} {["s3b1", "s3b2", "s3b3"].map((key) => ( ))} ); }; --- # Simulação de Cenários de Supply Chain Planning URL: https://nplan.digital/articles/scenario-simulation Por que simular cenários de forma isolada não funciona e como uma abordagem end-to-end permite decisões mais rápidas, consistentes e realistas no supply chain. moduleDefinitions = [ , , , , , , ]; InteractiveFlowDiagram = () => { = useTranslation(); [selectedModules, setSelectedModules] = useState (["demand", "inventory", "supply", "capacity", "orders", "distribution"]); toggleModule = (id: string) => ; ( {moduleDefinitions.map(mod => { active = selectedModules.includes(mod.id); Icon = mod.icon; ( ); })} ); }; ScenarioTreeDiagram = () => { = useTranslation(); ( {["treeOvertime", "treeThirdShift", "treeOutsource"].map((key) => ( ))} ); }; DisruptionResilienceChart = () => { = useTranslation(); [phase, setPhase] = useState<"idle" | "red" | "green" | "done">("idle"); [redProgress, setRedProgress] = useState(0); [greenProgress, setGreenProgress] = useState(0); [runKey, setRunKey] = useState(0); animateValue = useCallback(( setter: (v: number) => void, duration: number, onDone?: () => void ) => , []); handleRestart = () => ; useEffect(() => { timers: ReturnType [] = []; timers.push(setTimeout(() => { setPhase("red"); animateValue(setRedProgress, 1800, () => { timers.push(setTimeout(() => , 800)); }); }, 1200)); () => timers.forEach(clearTimeout); }, [animateValue, runKey]); W = 700, H = 320; padL = 70, padR = 30, padT = 30, padB = 50; chartW = W - padL - padR; chartH = H - padT - padB; baseline = padT + 30; disruptX = padL + chartW * 0.3; bottom = padT + chartH; genRedPath = (progress: number) => ; genGreenPath = (progress: number) => ; greenLowestY = baseline + chartH * 0.25; redLowestY = baseline + chartH * 0.45; showRed = phase === "red" || phase === "green" || phase === "done"; showGreen = phase === "green" || phase === "done"; ( {showRed && ( )} ! ); }; ComparisonCards = () => { = useTranslation(); ( {["withoutItem1", "withoutItem2", "withoutItem3"].map(key => ( • ))} {["withItem1", "withItem2", "withItem3"].map(key => ( • ))} ); }; CollaborationDiagram = () => { = useTranslation(); areas = [ , , , , , ]; ( {areas.map(( ) => ( ))} ); }; StepByStep = () => { = useTranslation(); steps = ["step1", "step2", "step3", "step4", "step5", "step6"]; ( {steps.map((key, idx) => ( ))} ); }; triggerItems = [ , , , , , , , , , , ] as ; DisruptionTriggersGrid = () => { ( ); }; ScenarioSimulation = () => { = useTranslation(); tableOfContents = [ , , , , , , , , , , , , , ]; relatedArticles = [ , , , ]; ( {["metricService", "metricInventory", "metricCapacity", "metricCost"].map(key => ( ))} ); }; --- # Articles Sop To Execution URL: https://nplan.digital/articles/sop-to-execution Articles Sop To Execution — nPlan. useTT = () => ; type TT = (pt: string, en: string, es: string) => string; PlanningBridge = ( : ) => { [active, setActive] = useState<"sop" | "mrp" | "aps">("sop"); stages = as ; cur = stages[active]; order: Array = ["sop", "mrp", "aps"]; ( {order.map((key, idx) => { s = stages[key]; Icon = s.Icon; isActive = active === key; ( ); })} ); }; HorizonZones = ( : ) => { [active, setActive] = useState<"frozen" | "slushy" | "liquid">("slushy"); zones = as ; cur = zones[active]; Icon = cur.Icon; ( {(["frozen", "slushy", "liquid"] as ).map((k) => { z = zones[k]; isActive = active === k; flex = k === "frozen" ? "flex-[1]" : k === "slushy" ? "flex-[2]" : "flex-[3]"; ( ); })} · ); }; AdherenceFeedback = ( : ) => { [planned, setPlanned] = useState(100); [executed, setExecuted] = useState(82); [cause, setCause] = useState<"execution" | "plan">("execution"); adh = Math.min(100, Math.round((executed / planned) * 100)); color = adh >= 90 ? "text-emerald-400" : adh >= 75 ? "text-amber-400" : "text-rose-400"; causeMsg = cause === "execution" ? tt( "Aja na execução: confiabilidade de máquina, disponibilidade de operadores, qualidade do componente.", "Act on execution: machine reliability, operator availability, component quality.", "Actúa en la ejecución: confiabilidad de máquina, disponibilidad de operadores, calidad del componente." ) : tt( "Aja no planejamento: revise premissas de capacidade, lead time e eficiência no próximo ciclo de S&OP.", "Act on planning: revise capacity, lead time and efficiency assumptions in the next S&OP cycle.", "Actúa en la planificación: revisa premisas de capacidad, lead time y eficiencia en el próximo ciclo de S&OP." ); ( % ); }; SopToExecution = () => { tt = useTT(); T = ; tableOfContents = [ , , , , , , , ]; relatedArticles = [ , , , , ]; ( S&OP · · · · · · · · . . ); }; --- # Planeación de Suministros: del MRP estático al plan dinámico URL: https://nplan.digital/articles/supply-planning Planeación de Suministros: del MRP estático al plan dinámico — nPlan. useTT = () => ; stepIcons = [Layers, GitBranch, Calculator, ShieldAlert, Network]; featureIcons = [Layers, LayoutGrid, Cpu, Building2, FlaskConical, Plug]; mistakeColor = "hsl(8 64% 57%)"; SupplyPlanning = () => { tt = useTT(); sidebarSections = [ , , , , , , , , , , ]; relatedArticles = [ , , , ]; processSteps = [ , , , , , ]; constraints = [ , , , , ]; multiBenefits = [ , , , , ]; scenarios = [ , , , ]; nplanFeatures = [ , , , , , , ]; quiz: ArticleQuizQuestion[] = [ , , , , , ]; title = tt( "Planejamento de Suprimentos: do MRP estático ao plano dinâmico", "Supply Planning: from static MRP to dynamic plan", "Planeación de Suministros: del MRP estático al plan dinámico", ); description = tt( "Como integrar BOM multi-nível, restrições reais e simulação de cenários em um plano de suprimentos vivo, recalculado em minutos.", "How to integrate multi-level BOM, real constraints and scenario simulation into a live supply plan recomputed in minutes.", "Cómo integrar BOM multinivel, restricciones reales y simulación de escenarios en un plan de suministros vivo, recalculado en minutos.", ); ( {processSteps.map((s, i) => )} {[ ["Produto Alfa 4001", "N0", "Embalagem 2001", "1 un", "0,5%", tt("Envase", "Filling", "Envasado")], ["Produto Alfa 4001", "N0", "Componente 3001", "0,8 kg", "2%", tt("Mistura", "Mixing", "Mezcla")], ["Componente 3001", "N1", "MP 1001", "0,6 kg", "1%", tt("Reação", "Reaction", "Reacción")], ["Componente 3001", "N1", "MP 1002", "0,3 kg", "1%", tt("Reação", "Reaction", "Reacción")], ["Embalagem 2001", "N1", "—", "—", "—", tt("Comprado", "Purchased", "Comprado")], ].map((row, i) => ( ))} {scenarios.map((s, i) => ( ))} {nplanFeatures.map((item, i) => )} ); }; --- # What is Supply Chain Planning (SCP)? Definition, Components and End-to-End Flow URL: https://nplan.digital/articles/what-is-scp A clear, structured definition of supply chain planning, its components, and how modern systems connect end-to-end decisions. moduleDefinitions = [ , , , , , , ]; fundamentalComponents = [ , , , , , , , , ]; advancedComponents = [ , , , , ]; moduleToCapabilities: Record = ; capabilityToModule: Record = ; capabilities = [ , , , , , , , ]; KeyComponentsGrid = () => { = useTranslation(); [expanded, setExpanded] = useState ( ); toggle = (key: string) => setExpanded(prev => prev === key ? : key); renderComponent = (comp: typeof fundamentalComponents[0], isFundamental: boolean) => { Icon = comp.icon; isExpanded = expanded === comp.key; ( {isExpanded && ( )} ); }; ( ); }; HowNplanSolvesSection = () => { = useTranslation(); [selectedModules, setSelectedModules] = useState (["demand", "inventory", "supply", "capacity", "orders", "distribution"]); [selectedCapability, setSelectedCapability] = useState ( ); toggleModule = (id: string) => ; highlightedCapabilities = new Set (); selectedModules.forEach(mod => ); allComponents = [...fundamentalComponents, ...advancedComponents]; renderHexComponent = (comp: typeof fundamentalComponents[0], isFundamental: boolean) => { Icon = comp.icon; isHighlighted = highlightedCapabilities.has(comp.key); isSelected = selectedCapability === comp.key; ( ); }; getCapDetailKey = (compKey: string): string | => ; ( {moduleDefinitions.map(mod => { active = selectedModules.includes(mod.id); Icon = mod.icon; ( ); })} {selectedCapability && getCapDetailKey(selectedCapability) && ( : )} ); }; scopeSystems = [ , , , , , , , ] as ; columns = ["suppliers", "manufacturing", "finishedProducts", "distribution", "inventory", "customers"]; ScopeMatrix = () => { = useTranslation(); [selected, setSelected] = useState ( ); Cell = ( : ) => { (!sysKey) ; sys = scopeSystems.find(s => s.key === sysKey)!; isActive = selected === sysKey; ( ); }; ( Supply Demand {columns.map(col => ( ))} Sense ┃ Respond {selected && ( )} Supply Chain Planning Scope Matrix: The vertical axis represents Sense (planning and forecasting) vs Respond (execution and operations). The horizontal axis represents Supply (suppliers, manufacturing) vs Demand (distribution, inventory, customers). Supply Chain Planning spans the widest scope in the Sense layer, covering rows 2-3 (Plan/Forecast and Measure/Decide). S&OP/IBP operates in the Gather Data row on the demand side and also participates in the Plan/Forecast row. ); }; WhatIsScp = () => { = useTranslation(); benchmarks = [ , , , , , , ]; tableOfContents = [ , , , , , , , , , , , , , ]; relatedArticles = [ , , , ]; glossaryFundamentals = [ "whatIsScp", "keyComponentsScp", "demandVsSupply", "whatIsIBP", "whatIsSOP", "sopVsIbp", "whatIsAps", ]; glossaryComparisons = [ "scmVsScp", "mrpVsScp", "planningVsScheduling", "howScpWorks", "whatIsScpSystem", ]; ( {["introBullet1", "introBullet2", "introBullet3", "introBullet4", "introBullet5"].map(key => ( ))} — Gartner {["disconnectedPlans", "delayedData", "noScenarios", "staticPlans"].map(key => ( ))} {benchmarks.map(b => ( — : ))} {["missingSOPItem1", "missingSOPItem2", "missingSOPItem3", "missingSOPItem4"].map(key => ( • ))} {["missingSchedItem1", "missingSchedItem2", "missingSchedItem3", "missingSchedItem4"].map(key => ( • ))} {["tradeoffs", "propagation", "collaboration", "continuous"].map(key => ( ))} {["modernReq1", "modernReq2", "modernReq3", "modernReq4"].map(key => ( ))} {["baseline", "scenarioA", "scenarioB"].map(key => ( ))} {["reactive1", "reactive2", "reactive3"].map(key => ( ✗ ))} {["proactive1", "proactive2", "proactive3"].map(key => ( ✓ ))} {glossaryFundamentals.map(item => ( ))} {glossaryComparisons.map(item => ( ))} ); }; --- # Demos guiados — NPLAN URL: https://nplan.digital/demos Explore os demos interativos do NPLAN: previsão de demanda, agentes de IA, política de estoques e ressuprimento. ICONS: Record = ; CATEGORIES: Record = ; STORAGE_KEY = "nplan_demo_lead_ok"; STORAGE_TTL_MS = 30 * 24 * 60 * 60 * 1000; readGate(): boolean writeGate() LeadSchema = z.object( ); export default DemosGallery() { = useAuth(); navigate = useNavigate(); [gateOpen, setGateOpen] = useState( ); [pendingSlug, setPendingSlug] = useState ( ); [gateOk, setGateOk] = useState (() => readGate()); [submitting, setSubmitting] = useState( ); [form, setForm] = useState( ); [errors, setErrors] = useState >( ); isUnlocked = !!user || gateOk; demos = useMemo(() => Object.entries(DEMOS).map(([slug, def]) => ( )), []); openDemo(slug: string) { (isUnlocked) setPendingSlug(slug); setErrors( ); setGateOpen( ); } async handleSubmit(e: React.FormEvent) { e.preventDefault(); parsed = LeadSchema.safeParse(form); (!parsed.success) setSubmitting( ); try { = await supabase.functions.invoke("submit-demo-lead", ); (error || (data && (data as ).error)) writeGate(); setGateOk( ); setGateOpen( ); toast.success("Acesso liberado"); (pendingSlug) navigate(`/demo/$ `); } catch (err) finally } ( <> Demos guiados Veja O NPLAN em ação, na prática Tours interativos por cada módulo. Sem instalação: navegue pelos passos e entenda como O NPLAN entrega decisões de planejamento com dados curados e IA orquestrada. Quer conversar com o time? Solicite uma apresentação . Acesso ao demo Deixe seus dados para abrir os demos. Levará menos de 30 segundos. Nome* Email corporativo* Empresa* Cargo Telefone Ao continuar, você concorda com nossa política de privacidade . Cancelar Abrir demo ); } --- # Who We Are - nPlan URL: https://nplan.digital/who-we-are Meet the team and the story behind nPlan, the Supply Chain Planning platform by NEO Digital Industries. export default WhoWeAre()