<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Datapult</title>
    <description>The latest articles on DEV Community by Datapult (@datapult).</description>
    <link>https://dev.to/datapult</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2318927%2F595fc6df-2dd5-4e89-8b59-17072ee2131c.png</url>
      <title>DEV Community: Datapult</title>
      <link>https://dev.to/datapult</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/datapult"/>
    <language>en</language>
    <item>
      <title>Advanced Scheduling Patterns with Demand-Based Matching, Skills, and Competencies. Part 4.</title>
      <dc:creator>Datapult</dc:creator>
      <pubDate>Fri, 01 Nov 2024 09:06:06 +0000</pubDate>
      <link>https://dev.to/datapult/advanced-scheduling-patterns-with-demand-based-matching-skills-and-competencies-part-4-cj5</link>
      <guid>https://dev.to/datapult/advanced-scheduling-patterns-with-demand-based-matching-skills-and-competencies-part-4-cj5</guid>
      <description>&lt;p&gt;For teams with unique scheduling needs, our API supports demand-based scheduling, complex skill mapping, and real-time competency tracking, going far beyond basic scheduling solutions. Here’s a glimpse into how our API tackles these advanced challenges:&lt;/p&gt;

&lt;h2&gt;
  
  
  Demand-based scheduling
&lt;/h2&gt;

&lt;p&gt;When scheduling against variable demand, our API simplifies complex setups. For instance, in environments like call centers, where coverage needs vary by time of day, demand triggers can be set based on business hours, seasonal peaks, or specific tasks. By breaking these demands into continuous hourly shifts, you can flexibly schedule coverage and avoid gaps.&lt;/p&gt;

&lt;p&gt;See more here:&lt;br&gt;
&lt;a href="https://api-docs.datapult.dk/docs/demands-vs-shifts" rel="noopener noreferrer"&gt;https://api-docs.datapult.dk/docs/demands-vs-shifts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Complex Skill Mapping
&lt;/h2&gt;

&lt;p&gt;Industries requiring specific skill sets—think healthcare or specialized retail—can leverage our model for tailored skill matching. Here, shifts match skills dynamically: we use OR conditions for flexibility and NOT conditions to exclude incompatible employees. For multi-skill requirements (e.g., Skill A and Skill B), you can create combinations of skills that seamlessly map to our model using integer representations.&lt;/p&gt;

&lt;p&gt;See more here:&lt;br&gt;
&lt;a href="https://api-docs.datapult.dk/docs/mapping-skills" rel="noopener noreferrer"&gt;https://api-docs.datapult.dk/docs/mapping-skills&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Overlapping shifts
&lt;/h2&gt;

&lt;p&gt;Some companies use the definition &lt;strong&gt;shifts&lt;/strong&gt; loosely and it should really be &lt;strong&gt;tasks&lt;/strong&gt;, meaning that you can do several tasks at once, e.g. carrying a key or pager while working the counter.&lt;/p&gt;

&lt;p&gt;See more here:&lt;br&gt;
&lt;a href="https://api-docs.datapult.dk/docs/shift-collisions" rel="noopener noreferrer"&gt;https://api-docs.datapult.dk/docs/shift-collisions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>scheduling</category>
      <category>workforce</category>
    </item>
    <item>
      <title>Once You Have the Schedule: Visualize It Right (And How We Built Ours). Part 3.</title>
      <dc:creator>Datapult</dc:creator>
      <pubDate>Fri, 01 Nov 2024 08:37:32 +0000</pubDate>
      <link>https://dev.to/datapult/once-you-have-the-schedule-visualize-it-right-and-how-we-built-ours-part-3-2bbh</link>
      <guid>https://dev.to/datapult/once-you-have-the-schedule-visualize-it-right-and-how-we-built-ours-part-3-2bbh</guid>
      <description>&lt;p&gt;An optimally scheduled workforce is only as good as the ability to make sense of it. At our company, we don’t just send back a set of assignments; we deliver a UI built to give you instant clarity on what’s happening, what’s missing, and what might need a tweak or two. Think you can outperform an algorithm? Here’s what we’ve designed, and how you can take inspiration for building your own visualization layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our UI Approach: Focused and Actionable
&lt;/h2&gt;

&lt;p&gt;The UI is purpose-built to zero in on essentials. We don’t drown users in data—they get a clear view of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flagged conflicts where rules or constraints weren’t met.&lt;/li&gt;
&lt;li&gt;Unmet demands indicating shifts or skills that couldn’t be filled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These visuals provide immediate answers to two key questions: “Is this schedule viable?” and “Where do we need intervention?” Manual edits are also possible, allowing users to explore “what-if” scenarios and test if a human touch could improve upon the automated schedule (spoiler: it’s not as easy as it looks).&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Data Points to Visualize: Clarity First
&lt;/h2&gt;

&lt;p&gt;Not all data is created equal when it comes to usability. Our UI highlights the following points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shift times and assigned users – ensuring users quickly see who’s assigned where.&lt;/li&gt;
&lt;li&gt;Skill requirements and skill matches – so it’s clear when qualified people fill the roles.&lt;/li&gt;
&lt;li&gt;Unmet wishes and preferences – for a balanced approach to employee satisfaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Suggestions for Building Your Own UI
&lt;/h2&gt;

&lt;p&gt;Whether you use our setup or not, here are a few principles to keep in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimize cognitive overload by presenting only the most relevant data upfront. Flag critical issues prominently.&lt;/li&gt;
&lt;li&gt;Use readable, intuitive visuals that require minimal interpretation—clarity and simplicity go hand-in-hand.&lt;/li&gt;
&lt;li&gt;Make the interface interactive so that users can dive deeper where needed but aren’t forced to sift through every detail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With these tips, you’ll have a robust UI that not only supports users but makes workforce scheduling genuinely approachable. When designing, always remember: an AI-optimized schedule is only as good as the user’s ability to work with it.&lt;/p&gt;

</description>
      <category>api</category>
      <category>workforce</category>
      <category>scheduling</category>
      <category>ai</category>
    </item>
    <item>
      <title>Scheduling Workflows: POST, Poll, and Callback – Picking the Right One. Part 2.</title>
      <dc:creator>Datapult</dc:creator>
      <pubDate>Fri, 01 Nov 2024 08:29:41 +0000</pubDate>
      <link>https://dev.to/datapult/scheduling-workflows-post-poll-and-callback-picking-the-right-one-part-2-3ek5</link>
      <guid>https://dev.to/datapult/scheduling-workflows-post-poll-and-callback-picking-the-right-one-part-2-3ek5</guid>
      <description>&lt;p&gt;You have shifts, you have users, and you have rules that need strict adherence. How do you get from here to a schedule? Let’s dive into the two main options: posting data and waiting for a &lt;strong&gt;callback&lt;/strong&gt; or posting and then &lt;strong&gt;polling&lt;/strong&gt;. Both have strengths, depending on your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;Callback are great for web-facing, low-latency environments, where users can afford to sit back and wait for the schedule to be ready.&lt;/p&gt;

&lt;p&gt;Here is how to make Datapult call back to you once your schedule is ready: Simply add these to the payload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"callbackUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.yourdomain.app/custom_callback_url"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"callbackAuthenticationHeaderName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AnyHeaderYouWant"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"callbackAuthenticationHeaderValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AnySecretYouWant"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will callback 3 times with exponential backoff and in case every callback yields a 5xx from you, we will send you an email with the error message that your server gave us. How helpful is that?&lt;/p&gt;

&lt;h2&gt;
  
  
  Polling
&lt;/h2&gt;

&lt;p&gt;Maybe you are testing locally; maybe you cannot expose a route for us - for whatever reason callbacks are not possible - you can poll our servers for a solution. Here is how:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set the fields above to &lt;code&gt;null&lt;/code&gt; or a dummy domain.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST&lt;/code&gt; your &lt;a href="https://api-docs.datapult.dk/docs/understanding-the-request" rel="noopener noreferrer"&gt;payload&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The post message will return an integer &lt;code&gt;id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use this ID to &lt;code&gt;GET /api/schedule/{id}&lt;/code&gt;. If you get a &lt;code&gt;204 No Content&lt;/code&gt; the payload is not ready. It will never take more than 10 minutes. &lt;/li&gt;
&lt;li&gt;Repeat step 4 until you get a &lt;code&gt;200&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;While callbacks can reduce load your setup might not allow for it. Be using polling and done right, you can ensure a smooth UX to show progress. Both flows are supported and it’s up to you to configure according to your need.&lt;/p&gt;

</description>
      <category>api</category>
      <category>scheduling</category>
      <category>workforce</category>
      <category>ai</category>
    </item>
    <item>
      <title>Forget the Headaches of Workforce Scheduling. Here’s How We’re Automating the Impossible. Part 1.</title>
      <dc:creator>Datapult</dc:creator>
      <pubDate>Fri, 01 Nov 2024 08:15:50 +0000</pubDate>
      <link>https://dev.to/datapult/forget-the-headaches-of-workforce-scheduling-heres-how-were-automating-the-impossible-part-1-2mp9</link>
      <guid>https://dev.to/datapult/forget-the-headaches-of-workforce-scheduling-heres-how-were-automating-the-impossible-part-1-2mp9</guid>
      <description>&lt;p&gt;Automating workforce scheduling has been overlooked for too long. Manual scheduling wastes time, is prone to error, and, most importantly, it’s a drain on everyone’s patience. Our API tackles this by taking in your shifts, user data, rules, and preferences, then processing all that input to provide you with a workable, optimized schedule in a fraction of the time.&lt;/p&gt;

&lt;p&gt;Here is what you need to use the API:&lt;/p&gt;

&lt;h2&gt;
  
  
  A list of employees
&lt;/h2&gt;

&lt;p&gt;An employee is hired on a &lt;strong&gt;contract&lt;/strong&gt; which might regulate how many hours she can work a day or how many days she can work a month. &lt;/p&gt;

&lt;p&gt;An employee might also have certain &lt;strong&gt;skills&lt;/strong&gt; or belong to certain &lt;strong&gt;teams&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Lastly, an employee might have certain &lt;strong&gt;wishes&lt;/strong&gt; to work or not to work on given dates.&lt;/p&gt;

&lt;p&gt;Here is how we represent that in a highly abstract and flexible way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employees"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"teams"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-06-28T09:00:00+00:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-06-28T09:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-06-28T09:00:00+00:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-06-28T09:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"contract"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hoursBetweenShift"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxHoursDay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxHoursWeek"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxHoursMonth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxWorkDaysMonth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxConsecutiveDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"minConsecutiveDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"weekendWorkFrequency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxNhours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"InKWeeks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxConsecutiveLateShifts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxConsecutiveNightShifts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"wishes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"UNAVAILABLE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-06-28T09:00:00+00:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-06-28T09:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more about representing employees, see this: &lt;a href="https://api-docs.datapult.dk/docs/employees-in-your-schedule" rel="noopener noreferrer"&gt;https://api-docs.datapult.dk/docs/employees-in-your-schedule&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A list of shifts to be covered
&lt;/h2&gt;

&lt;p&gt;The other important part of scheduling is the work to be done. We represent this as &lt;strong&gt;shifts&lt;/strong&gt;. A shift belongs to skills and teams like an employee (through what we call a &lt;strong&gt;spot&lt;/strong&gt;). Here is how it looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"shifts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"spot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-06-28T09:00:00+00:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-06-28T16:00:00+00:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"importance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MANDATORY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"suggestedEmployees"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dislikedEmployees"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowedCollisionSpots"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"fixed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"historic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"employee"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"foreignInt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is a further explanation of the shifts, &lt;a href="https://api-docs.datapult.dk/docs/shifts-in-your-schedule" rel="noopener noreferrer"&gt;https://api-docs.datapult.dk/docs/shifts-in-your-schedule&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this abstraction matters
&lt;/h2&gt;

&lt;p&gt;At the core of our system is a scheduling AI that does all the heavy lifting. Our documentation dives into specifics (see our Employees, Shifts, and Spots sections), outlining how employee wishes, contractual restrictions, and scheduling rules integrate seamlessly. But the crux of it is this: we’ve built a service that takes your complex scheduling requirements and simplifies them to an API call, allowing planners to focus on strategic planning rather than firefighting daily operational chaos.&lt;/p&gt;

&lt;p&gt;If you want to learn more, read the next parts of the series or go straight to our &lt;a href="https://api-docs.datapult.dk/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>scheduling</category>
      <category>workforce</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
