[{"data":1,"prerenderedAt":799},["ShallowReactive",2],{"guide:en:work-fulfillment/tasks":3},{"id":4,"title":5,"body":6,"description":791,"extension":792,"meta":793,"navigation":794,"path":795,"seo":796,"stem":797,"__hash__":798},"guide_en/en/user/work-fulfillment/tasks.md","Tasks — Planning Work with Resource Requirements and Map Locations",{"type":7,"value":8,"toc":770},"minimark",[9,14,18,23,34,40,74,80,101,106,116,120,123,131,134,145,150,161,165,168,173,187,192,210,216,230,234,239,242,247,253,257,260,265,271,275,278,283,289,293,296,302,319,325,329,336,341,355,359,365,368,372,378,382,388,393,404,408,418,422,451,456,470,474,477,483,488,499,504,518,523,537,541,548,576,581,597,601,604,609,620,625,636,641,652,656,661,705,711,722,726,731,751,756],[10,11,13],"h1",{"id":12},"tasks","Tasks",[15,16,17],"p",{},"Tasks represent individual units of planned field work, each with a map location, resource requirements (materials, equipment, labour), and progress tracking. A task might be installing a junction box at a specific building, running 500 m of cable along a route, or conducting an inspection in a defined area. Tasks are versioned, so teams can plan offline, batch-create work, and roll back changes before committing to the shared dataset.",[19,20,22],"h2",{"id":21},"task-structure","Task Structure",[15,24,25,30],{},[26,27],"img",{"alt":28,"src":29},"Tasks List","/guide/work-fulfillment/tasks-list.png",[31,32,33],"em",{},"Tasks page showing planned work with progress tracking and multi-resource requirements",[15,35,36],{},[37,38,39],"strong",{},"Basic Fields:",[41,42,43,50,56,62,68],"ul",{},[44,45,46,49],"li",{},[37,47,48],{},"Name"," - Descriptive task name",[44,51,52,55],{},[37,53,54],{},"Description"," - Detailed work instructions",[44,57,58,61],{},[37,59,60],{},"Geometry"," - Point, line, or polygon showing work location",[44,63,64,67],{},[37,65,66],{},"Order"," - Parent work order grouping related tasks",[44,69,70,73],{},[37,71,72],{},"Resources"," - Array of required materials/labor (multi-resource support)",[15,75,76,79],{},[37,77,78],{},"Resource Requirements:","\nEach resource entry includes:",[41,81,82,89,95],{},[44,83,84,88],{},[85,86,87],"code",{},"resource"," - Resource definition reference",[44,90,91,94],{},[85,92,93],{},"volume"," - Quantity/amount required",[44,96,97,100],{},[85,98,99],{},"uom"," - Unit of measure",[15,102,103],{},[37,104,105],{},"Example:",[107,108,113],"pre",{"className":109,"code":111,"language":112},[110],"language-text","Task: \"Install network junction box at Building 42\"\nGeometry: Point (lat: 40.7128, lng: -74.0060)\nResources: [\n  { resource: \"Junction Box\", volume: 1, uom: \"units\" },\n  { resource: \"Cat6 Cable\", volume: 15, uom: \"meters\" },\n  { resource: \"Mounting Screws\", volume: 8, uom: \"units\" },\n  { resource: \"Electrician\", volume: 2, uom: \"hours\" }\n]\n","text",[85,114,111],{"__ignoreMap":115},"",[19,117,119],{"id":118},"multi-resource-tasks","Multi-Resource Tasks",[15,121,122],{},"Prior system: One resource per task",[41,124,125,128],{},[44,126,127],{},"Problem: Complex work creates excessive map markers",[44,129,130],{},"Example: 100 installations × 4 resources = 400 map points",[15,132,133],{},"Current system: Multiple resources per task",[41,135,136,139,142],{},[44,137,138],{},"Solution: Single map marker represents complete work",[44,140,141],{},"Same example: 100 map points (one per installation)",[44,143,144],{},"Cleaner map, easier spatial planning",[15,146,147],{},[37,148,149],{},"Benefits:",[41,151,152,155,158],{},[44,153,154],{},"Reduced map clutter",[44,156,157],{},"Grouped related materials (door + screws + adhesive = one task)",[44,159,160],{},"Progress tracked across all resources",[19,162,164],{"id":163},"tasks-are-versioned","Tasks Are Versioned",[15,166,167],{},"Unlike assignments/reports, tasks use version/commit workflow:",[15,169,170],{},[37,171,172],{},"Why Versioned:",[41,174,175,178,181,184],{},[44,176,177],{},"Admins design work areas offline (subway tunnels, remote sites)",[44,179,180],{},"Spatial conflict detection needed (overlapping geography)",[44,182,183],{},"Batch operations common (redesign entire campaign)",[44,185,186],{},"Rollback valuable (undo entire planning change)",[15,188,189],{},[37,190,191],{},"Workflow:",[193,194,195,198,201,204,207],"ol",{},[44,196,197],{},"Create version (draft mode)",[44,199,200],{},"Add/edit tasks in draft",[44,202,203],{},"Spatial validation (check for overlaps)",[44,205,206],{},"Commit version → tasks become \"official\"",[44,208,209],{},"Workers see committed tasks in assignments",[15,211,212,215],{},[37,213,214],{},"Offline Collaboration:","\nMultiple admins can create separate versions:",[41,217,218,221,224,227],{},[44,219,220],{},"Admin A: Plan north region tasks",[44,222,223],{},"Admin B: Plan south region tasks",[44,225,226],{},"Both work offline, commit later",[44,228,229],{},"Conflict resolution if overlapping geography",[19,231,233],{"id":232},"task-geometry-types","Task Geometry Types",[235,236,238],"h3",{"id":237},"point-tasks","Point Tasks",[15,240,241],{},"Single location work (equipment installation, inspection).",[15,243,244,246],{},[37,245,105],{}," Install junction box",[107,248,251],{"className":249,"code":250,"language":112},[110],"Geometry: { type: \"Point\", coordinates: [lng, lat] }\n",[85,252,250],{"__ignoreMap":115},[235,254,256],{"id":255},"line-tasks","Line Tasks",[15,258,259],{},"Linear work (cable runs, pipeline installation).",[15,261,262,264],{},[37,263,105],{}," Run 500m of fiber optic cable",[107,266,269],{"className":267,"code":268,"language":112},[110],"Geometry: { type: \"LineString\", coordinates: [[lng1,lat1], [lng2,lat2], ...] }\n",[85,270,268],{"__ignoreMap":115},[235,272,274],{"id":273},"polygon-tasks","Polygon Tasks",[15,276,277],{},"Area-based work (coverage zones, service areas).",[15,279,280,282],{},[37,281,105],{}," Door-to-door outreach in neighborhood",[107,284,287],{"className":285,"code":286,"language":112},[110],"Geometry: { type: \"Polygon\", coordinates: [[[lng1,lat1], ...]] }\n",[85,288,286],{"__ignoreMap":115},[19,290,292],{"id":291},"proximity-filtering","Proximity Filtering",[15,294,295],{},"Find tasks near specific locations:",[15,297,298,301],{},[37,299,300],{},"Use Case:"," Worker at warehouse wants tasks nearby",[193,303,304,307,310,313,316],{},[44,305,306],{},"Open Tasks page",[44,308,309],{},"Click \"Filter Nearby\" button",[44,311,312],{},"Drag map marker to warehouse location",[44,314,315],{},"Set distance (e.g., 5km)",[44,317,318],{},"Table shows only tasks within radius",[15,320,321,324],{},[37,322,323],{},"Row Action:","\nClick \"Filter Nearby\" on task row → auto-sets proximity to that task's location",[19,326,328],{"id":327},"task-usage-in-work-orders","Task Usage in Work Orders",[15,330,331,332,335],{},"Tasks appear in assignments as ",[37,333,334],{},"available work options",":",[15,337,338],{},[37,339,340],{},"Flexible Allocation:",[41,342,343,346,349,352],{},[44,344,345],{},"Work order might have 10 tasks available",[44,347,348],{},"Resource targets require completing 1-2 of those tasks",[44,350,351],{},"Worker chooses which tasks to complete (flexibility)",[44,353,354],{},"Over-allocation by 10x common (more options than targets)",[15,356,357],{},[37,358,105],{},[107,360,363],{"className":361,"code":362,"language":112},[110],"Work order to John:\n  Resource Targets: 50m cable, 20 junction boxes\n  Available Tasks: [Task1, Task2, Task3, ... Task30]\n  \nJohn completes:\n  Task 5: 30m cable, 12 junction boxes\n  Task 12: 20m cable, 8 junction boxes\n  Total: Met cable target, met junction box target\n",[85,364,362],{"__ignoreMap":115},[15,366,367],{},"Worker had 30 task options to meet targets - high flexibility.",[19,369,371],{"id":370},"task-progress-tracking","Task Progress Tracking",[15,373,374,377],{},[37,375,376],{},"Calculation:","\nProgress = Average completion across all resources",[15,379,380],{},[37,381,105],{},[107,383,386],{"className":384,"code":385,"language":112},[110],"Task with 3 resources:\n  - Cat6 Cable: 10m required, 5m completed = 50%\n  - Screws: 8 required, 8 completed = 100%\n  - Labor: 2 hours required, 0 hours reported = 0%\n  \nOverall progress = (50% + 100% + 0%) / 3 = 50%\n",[85,387,385],{"__ignoreMap":115},[15,389,390],{},[37,391,392],{},"Visual Indicators:",[41,394,395,398,401],{},[44,396,397],{},"Progress bar: Green ≥100%, Yellow ≥50%, Red \u003C50%",[44,399,400],{},"Geometry indicator: Green check if valid point/line/polygon",[44,402,403],{},"Used in: Shows which assignments/reports reference this task",[19,405,407],{"id":406},"creating-tasks","Creating Tasks",[15,409,410,413,414,417],{},[37,411,412],{},"Access Required:"," ",[85,415,416],{},"tasksCreate"," admin right",[15,419,420],{},[37,421,191],{},[193,423,424,427,430,433,436,439,442,445,448],{},[44,425,426],{},"Navigate to Fulfillment → Tasks",[44,428,429],{},"Create new version (or edit existing draft)",[44,431,432],{},"Click \"Add Task\" in version",[44,434,435],{},"Fill basic info (name, description)",[44,437,438],{},"Select order (parent grouping)",[44,440,441],{},"Click map to set geometry",[44,443,444],{},"Add resources (can add multiple)",[44,446,447],{},"Save task in draft",[44,449,450],{},"Commit version when planning complete",[15,452,453],{},[37,454,455],{},"Best Practices:",[41,457,458,461,464,467],{},[44,459,460],{},"Group related materials in single task (reduces map clutter)",[44,462,463],{},"Use consistent naming (e.g., \"Install - Junction Box - Building 42\")",[44,465,466],{},"Set realistic resource volumes (inform inventory planning)",[44,468,469],{},"Include labor resources (helps staffing calculations)",[19,471,473],{"id":472},"bulk-task-generation","Bulk Task Generation",[15,475,476],{},"Create many similar tasks efficiently:",[15,478,479,482],{},[37,480,481],{},"Scenario:"," Install 100 junction boxes at different buildings",[15,484,485],{},[37,486,487],{},"Method 1: Import from GeoJSON",[193,489,490,493,496],{},[44,491,492],{},"Create GeoJSON with 100 points",[44,494,495],{},"Each feature has properties: name, description, resources",[44,497,498],{},"Import → creates 100 tasks in one version",[15,500,501],{},[37,502,503],{},"Method 2: Generate from Map Selection",[193,505,506,509,512,515],{},[44,507,508],{},"Select 100 existing building features on map",[44,510,511],{},"Click \"Generate Tasks\"",[44,513,514],{},"Choose task template (resource requirements)",[44,516,517],{},"Creates task at each building location",[15,519,520],{},[37,521,522],{},"Method 3: Copy Existing Task",[193,524,525,528,531,534],{},[44,526,527],{},"Select task with correct resource configuration",[44,529,530],{},"Click \"Duplicate Task\"",[44,532,533],{},"Edit geometry to new location",[44,535,536],{},"Repeat for similar installations",[19,538,540],{"id":539},"batch-print-tasks","Batch Print Tasks",[15,542,543,544,547],{},"A project may contain dozens or hundreds of tasks. Rather than printing each one from its detail page, use the project-level ",[37,545,546],{},"Print all tasks"," action:",[193,549,550,557,563,570,573],{},[44,551,552,553,556],{},"Open the parent project's detail page (",[85,554,555],{},"/fulfillment/projects/:id",")",[44,558,559,560,562],{},"Click ",[37,561,546],{}," in the header",[44,564,565,566,569],{},"The batch print view opens at ",[85,567,568],{},"/fulfillment/tasks/batch/[ids]"," — a comma-separated list of task IDs in the URL",[44,571,572],{},"Screen shows 10 tasks per page (paginated, CSS-driven — all records are in the DOM so printing emits everything)",[44,574,575],{},"Print the page — each task is separated by a hard page break, so you get one task per printed page",[15,577,578],{},[37,579,580],{},"Notes:",[41,582,583,586],{},[44,584,585],{},"Safety cap: the batch view is limited to 200 tasks per print run. If the project exceeds this, a banner warns you and tasks beyond 200 are truncated — split the print into smaller batches if needed.",[44,587,588,589,592,593,596],{},"No new server work is involved — the batch view reads the existing ",[85,590,591],{},"/api/tasks/get?_id=csv"," endpoint and renders each task using the same ",[85,594,595],{},"RecordDetail*"," components as the individual task page, so the printed content matches what you'd get printing tasks one-by-one.",[19,598,600],{"id":599},"task-validation","Task Validation",[15,602,603],{},"Before version commit, system validates:",[15,605,606],{},[37,607,608],{},"Spatial Conflicts:",[41,610,611,614,617],{},[44,612,613],{},"Overlapping polygons (two tasks covering same area)",[44,615,616],{},"Point tasks too close together (configurable threshold)",[44,618,619],{},"Line tasks crossing restricted zones",[15,621,622],{},[37,623,624],{},"Resource Availability:",[41,626,627,630,633],{},[44,628,629],{},"Warning if required resources not in inventory",[44,631,632],{},"Doesn't block commit (tasks may be future-dated)",[44,634,635],{},"Helps procurement planning",[15,637,638],{},[37,639,640],{},"Geometry Validity:",[41,642,643,646,649],{},[44,644,645],{},"Points must have valid coordinates",[44,647,648],{},"Lines must have at least 2 points",[44,650,651],{},"Polygons must close (first point = last point)",[19,653,655],{"id":654},"task-work-order-lifecycle","Task Work Order Lifecycle",[15,657,658],{},[37,659,660],{},"Typical Flow:",[193,662,663,669,675,681,687,693,699],{},[44,664,665,668],{},[37,666,667],{},"Planning"," - Admin creates tasks in draft version",[44,670,671,674],{},[37,672,673],{},"Commit"," - Version committed, tasks become official",[44,676,677,680],{},[37,678,679],{},"Work Order"," - Tasks added to worker assignments (availableTasks array)",[44,682,683,686],{},[37,684,685],{},"Execution"," - Worker completes some of the available tasks",[44,688,689,692],{},[37,690,691],{},"Reporting"," - Worker links the completed task in their field report",[44,694,695,698],{},[37,696,697],{},"Progress"," - Task progress updated based on completed work",[44,700,701,704],{},[37,702,703],{},"Completion"," - When all resources at 100%, task marked complete",[15,706,707,710],{},[37,708,709],{},"Task Reuse:","\nTasks can appear in multiple assignments:",[41,712,713,716,719],{},[44,714,715],{},"Same task assigned to multiple workers (split work)",[44,717,718],{},"Task partially completed by one worker, finished by another",[44,720,721],{},"Progress aggregated across all reports",[19,723,725],{"id":724},"viewing-task-details","Viewing Task Details",[15,727,728],{},[37,729,730],{},"Task Detail Page Shows:",[41,732,733,736,739,742,745,748],{},[44,734,735],{},"Basic information and geometry",[44,737,738],{},"Resource requirements list",[44,740,741],{},"Progress bar and percentage",[44,743,744],{},"Used in: Work orders and reports referencing this task",[44,746,747],{},"Version history (which versions modified this task)",[44,749,750],{},"Spatial relation to nearby tasks",[15,752,753],{},[37,754,755],{},"Map View:",[41,757,758,761,764,767],{},[44,759,760],{},"Color-coded by progress (red = not started, yellow = partial, green = complete)",[44,762,763],{},"Geometry type indicators (icon for point, line style, polygon fill)",[44,765,766],{},"Clickable for quick detail popup",[44,768,769],{},"Filterable by order, progress, proximity",{"title":115,"searchDepth":771,"depth":771,"links":772},2,[773,774,775,776,782,783,784,785,786,787,788,789,790],{"id":21,"depth":771,"text":22},{"id":118,"depth":771,"text":119},{"id":163,"depth":771,"text":164},{"id":232,"depth":771,"text":233,"children":777},[778,780,781],{"id":237,"depth":779,"text":238},3,{"id":255,"depth":779,"text":256},{"id":273,"depth":779,"text":274},{"id":291,"depth":771,"text":292},{"id":327,"depth":771,"text":328},{"id":370,"depth":771,"text":371},{"id":406,"depth":771,"text":407},{"id":472,"depth":771,"text":473},{"id":539,"depth":771,"text":540},{"id":599,"depth":771,"text":600},{"id":654,"depth":771,"text":655},{"id":724,"depth":771,"text":725},"Tasks represent individual units of planned field work — installing equipment, running cable, inspecting infrastructure — placed on the map with defined resource requirements and tracked through completion.","md",{},true,"/en/user/work-fulfillment/tasks",{"title":5,"description":791},"en/user/work-fulfillment/tasks","Kmbs7X4wGcztuVdMaVJIqqr-08hxxXrVps58mSLVLEA",1776295549349]