- Home
- Blog
- ERP Integration (EDGEBIC)
- Katana to EDGEBIC: The Data Mapping Reference
Katana to EDGEBIC: The Data Mapping Reference
Mapping Katana data into EDGEBIC is a column-mapping exercise rather than a development project: you export products, work centers, operations, open manufacturing orders, and optionally logged labor to CSV or Excel, then drag each source column heading onto the matching EDGEBIC field once and save it as a reusable import mask. This reference lists what maps to what, which columns are mandatory, how CSV quirks and unit conversion behave, and what every row outcome means when a run finishes.
EDGEBIC by User Solutions integrates with Katana through those masks rather than an API integration, so nothing is installed in the account and no integration credential exists to maintain. If you have not read the end-to-end version yet, start with the complete Katana integration guide. This post is the lookup table you keep open while building masks.
The load order
Import in dependency order. Later files reference records that earlier files created.
| # | Katana export | EDGEBIC entity type | Depends on |
|---|---|---|---|
| 1 | Products | Product | Nothing |
| 2 | Resources / work centers | Workcenter | Nothing |
| 3 | Operations / routings | BOR (bill of routing) | Products and work centers |
| 4 | Open manufacturing orders | SalesOrder | Products |
| 5 | Logged labor (optional) | Actuals | Scheduled jobs |
Two entity types have no Katana origin and come from a spreadsheet you write: Shift (one row per shift with a start and end pair per weekday, a blank pair meaning the day is off) and PlantHoliday (closures by name and date). Together they define the calendar every scheduled date is computed against, which makes them the ten minutes with the widest effect in the whole load.
Auto-create is on by default, so a routing file naming a work center that has not been imported yet creates it on the fly. Good safety net, poor strategy: an auto-created work center carries a name and nothing else, meaning one machine, no shift assignment, and no efficiency.
Reading the file itself
Cloud exports have their own habits, and all of them are handled on the mask rather than by editing files.
| Export characteristic | Mask setting |
|---|---|
| Comma, semicolon, tab, or space delimited | Delimiter selector |
| Text values wrapped in quotation marks | Text-enclosed-in-quotes |
| First row is column headings | Header present (on) |
| Raw extract with no headings | Header present (off), map by column position |
| Excel workbook with several sheets | Sheet name on the mask |
If a worksheet is renamed later, the reader falls back to the first sheet rather than failing, which is forgiving but worth knowing: re-pick the file on the mask when a workbook's structure changes so the choice stays explicit.
Products to Product
| EDGEBIC target field | Mandatory | Source column |
|---|---|---|
Product_Id | Yes | The product identifier. Natural key, matched case-insensitively |
Product_Name, Description | Descriptive text | |
UOM | Unit of measure | |
Unit_Price, Lead_Time, Category | Optional planning and quoting attributes | |
Size, Weight, Country_Of_Origin | Optional descriptive columns |
Only the identifier is required. Everything else can arrive later through a narrower refresh file, because blank cells preserve existing values on an update run. Keep the identifier rendered identically across every export: matching ignores case, so BRK-200 finds brk-200, but it does not reconcile a genuine spelling difference or a stray suffix.
Resources to Workcenter
This is where scheduling accuracy is won or lost, because this file carries capacity.
| EDGEBIC target field | Mandatory | What it drives |
|---|---|---|
Workcenter Id | Yes | Natural key. Routing steps match on it |
Workcenter Name | Label on the Gantt and in reports | |
Number_Of_Instances | How many identical machines the center holds. Blank defaults to 1 | |
Capacity, Efficiency | Rated capacity and the efficiency applied to it | |
Setup_Time_Hours | Default setup, overridden per routing step where present | |
Hourly_Rate | Cost rollups | |
Is_Bottleneck | Marks the constraint so the engine can anchor around it | |
One_Per_Day_Flag | One job per machine per day, for long-changeover centers | |
Use_Global_Shifts, Shift_Names | Calendar assignment | |
Pieces_Per_Hour | Rate-based capacity where the center is measured in output | |
Min_Batch_Size, Max_Batch_Size | Batching limits | |
Is_Active, Color, Type | Housekeeping and Gantt color |
Number_Of_Instances is the single highest-value column here and the one cloud MRP exports rarely carry, because a resource is usually modeled as one entry with a capacity figure. A cell of four identical machines imported as one instance produces a plan roughly four times too long, and it fails quietly: nothing errors, the dates are simply wrong. Fill it deliberately for every multi-machine center; the arithmetic is in how EDGEBIC calculates work center capacity.
Machine pools have no export column
Where machines are genuinely interchangeable, EDGEBIC models a work center group: a named pool whose membership is re-evaluated on every reschedule. A routing step bound to the group picks by strategy (earliest completion, primary first, or earliest start) and applies a per-member efficiency factor, so a slower machine is chosen only when it still finishes first. Operations already started keep their machine, because recorded work is never moved.
None of that exists as an export column. Import the members as ordinary work centers, then build the group inside EDGEBIC: a one-time configuration per pool that changes the schedule more than most imported columns do. The setup path is how to create work center groups.
Operations to BOR
| EDGEBIC target field | Mandatory | What to put in it |
|---|---|---|
End_Prod | Yes | Product identifier this routing builds |
Sub_Prod | Yes | Work center id (operation row) or component product (material row) |
Op_Flag | Yes | True for an operation, false for a material or component |
No_Req | Yes | Hours required per unit |
Seq_No | Operation sequence, in gaps of 10 | |
Next_Seq | Leave blank; chaining happens automatically | |
Setup_Time | Setup hours at this step | |
Queue_Time | Buffer hours before the step may start | |
Flow_Step, Transit_Days | Overlap between steps, and transport time | |
Parallel_Op | Parent step's work center name for parallel or alternate steps | |
Alt_Type | Parallel-Independent, Parallel-Dependent, or Alternative | |
Res_Mult | Applicable machine instances for this step | |
Fam_Dept | Department for auto-created work centers |
Op_Flag is the field most often set wrong on a first load. True means the row is an operation running on a work center. False means the row is a component consumed at that point in the routing, which is exactly how a subassembly is attached to its parent. Getting the flag backwards turns components into work centers, and the graphical designer shows it immediately.
Why the import takes two passes
A routing cannot be written row by row, because step 10 must point at step 20 and step 20 does not exist yet. The import therefore runs in two passes. Pass one validates each row, resolves or creates the products and work centers it names, and buffers the row. Pass two groups the buffer by end product, sorts by sequence number, writes the steps, and wires the chain: 10 to 20, 20 to 30, and the terminal step to the finished product so the routing renders connected rather than floating free.
Two rules follow. All of one product's steps must travel in one file, because a run wipes and recreates that product's steps on first reference, so splitting one product across two runs means the second wipe deletes the first run's work. And re-importing is safe for orders in progress, because every scheduled job carries a frozen snapshot of the routing it was planned with.
Manufacturing orders to SalesOrder
| EDGEBIC target field | Mandatory | Source |
|---|---|---|
Product_Id(BOR) | Yes | Product being built |
Qty | Yes | Order quantity |
Job_Date | Yes | Release or start date |
Sales_Order(Ref#) | Order reference: shared references group into one sales order, jobs auto-number {Ref}-{line} | |
Job_Number | Your Katana order number carried across | |
Due_Date, Order_Date, Priority | Promise, entry, and ranking | |
Customer_Name | Auto-created when missing | |
Unit_Price, User_Notes | Optional |
Two mask options handle the case where an export carries only one date: one treats the job date as the due date, the other derives the job date backward from the due date. Set whichever matches your export once, on the mask. Backward scheduling from a due date is covered in forward versus backward scheduling.
Labor to Actuals
Job number, work center id, and actual date are mandatory. Hours and pieces are each optional, and either can be derived from the other using the operation's rate. A Complete column marks the operation finished, and an explicit start column overrides the default of using the earliest imported date.
The import always overwrites the days a file carries, so re-running a corrected extract fixes the numbers rather than doubling them. Days a file does not mention are preserved unless you ask for them to be cleared. Labor goes last because every row has to find an operation on a job that is already scheduled.
Conversions, blanks, and zeros
| Situation | Behavior |
|---|---|
| Minutes in the export | Conversion factor 0.016667 on that mask column |
| Seconds in the export | Conversion factor 0.000278 |
| Hours quoted per 100 pieces | Conversion factor 0.01 |
| Blank cell on an update | Existing value preserved |
| Zero in a cell on an update | Zero is written: it is a value, not a blank |
| Unmapped column | Ignored entirely |
| Mandatory field unmapped | Run aborts before reading any row |
| One bad row | Fails alone and the run continues, unless you choose strict mode |
Reading the outcomes
Every row resolves to Created, Updated, Reused, or Failed. Reused is the default for a record that already exists, so a weekly product file of 3,000 rows reporting Created 9, Reused 2,991 is the desired result rather than a problem. When counts look wrong, the per-run log file has one line per row with the exact reason for each failure.
What import cannot bring, and why it matters
The settings that most differentiate a schedule have no column in any MRP export: the sequence-dependent setup matrix, operator skills and rosters, work center group strategies, bottleneck anchoring, and lot streaming transfer batches. They are configured once in EDGEBIC and then apply to every imported manufacturing order afterwards. The EDGEBIC product overview maps the engine, and the ERP integration architecture explains why one mask design serves every platform.
For the questions that come up before a project starts, see the Katana integration FAQ. The MRPeasy reference shows how little changes from one cloud MRP to the next, and the ERP scheduling add-on page frames the category.
Each entity type has a short mandatory list. Products need a product id. Work centers need a work center id. Routings need end product, step name, an operation flag, and hours required. Manufacturing orders need product, quantity, and a job date. Labor rows need job number, work center id, and the actual date. Everything else is optional, and an unmapped mandatory field aborts the run before any row is read.
Yes. The import mask has a text-enclosed-in-quotes setting for RFC-4180 style quoting, so a quoted description containing a comma parses as one value instead of splitting into phantom columns. The delimiter itself is also a mask setting, covering comma, semicolon, tab, and space files, so the export needs no cleanup pass before it is imported.
Dependency order: products first, then work centers, then routings, then open manufacturing orders, then labor. Routings reference both products and work centers, and manufacturing orders reference products, so loading upstream data first stops the auto-create behavior from inventing thin placeholder records. Auto-create is on by default, but a record it creates carries only the name the file gave it.
Expert Q&A: Deep Dive
Q: Katana models a resource as a machine type, not a count of identical machines. Where does the real count go?
A: It goes in one column of the work center mask, Number_Of_Instances, and it is the highest-value cell in the whole load. Katana, like most cloud MRP, treats a work center as one resource with a capacity figure rather than as four physical machines. EDGEBIC needs the count because finite capacity math multiplies available hours by instances: a cell of four mills scheduled as one runs a plan roughly four times too long, and it fails quietly rather than erroring. If your export does not carry a count column, leave it blank on the first import, which defaults each center to one instance, then set the real number for each multi-machine center once inside EDGEBIC. It is preserved on every later import because blank cells keep existing values, so you set it once and never again.
Q: We build products from subassemblies. Does each level need its own import, and how does EDGEBIC know one feeds the other?
A: Each end product gets its own routing rows in the same file, and the link between levels comes from the material rows rather than from a separate import. On the parent's routing, the subassembly appears as a row with the operation flag set false and the subassembly's product identifier in the step-name column, which tells the engine that this component is consumed at that point. The subassembly then has its own operation rows naming its own work centers. One file can carry every level as long as all rows for any single end product travel together, because a routing run wipes and recreates one end product's steps at a time. The result renders in the designer as connected levels rather than as unrelated chains.
Frequently Asked Questions
Ready to Transform Your Production Scheduling?
User Solutions has been helping manufacturers optimize their production schedules for over 35 years. One-time license, 5-day implementation.

User Solutions Team
Manufacturing Software Experts
User Solutions has been developing production planning and scheduling software for manufacturers since 1991. Our team combines 35+ years of manufacturing software expertise with deep industry knowledge to help factories optimize their operations.
Share this article
Related Articles
Connecting EDGEBIC to Your ERP Database With a SQL Source
How to point a scheduled EDGEBIC integration at a read-only ERP query instead of a file: testing the connection, previewing columns, checking the mask fits, and the stored-password rule that catches most teams out.
EDGEBIC ERP Integration: The Complete Guide
How EDGEBIC integrates with any ERP: eight import masks, three source options, a documented data mapping, and the weekly rhythm that keeps a finite capacity schedule current.
Closing ERP Work Orders That EDGEBIC Still Thinks Are Open
Your ERP closing a work order is invisible to EDGEBIC. There is no status column on the order mask, and a job whose every step is done is not closed automatically. Here is the closing pass that keeps your numbers honest.
