Karat nezajímají polotovary, ale pouze výrobky na úrovni svazek.
Vzhledem ke složitější struktuře vyráběného zboží z toho vyplývá, budeme muset identifikovat svazky ve stromu zboží, případně musíme určit, že ve stromu žádný svazek není a tedy výrobek je nejvrchnější sestava - zboží na objednávce.
Výrobky identifikujeme podle pravidel:
Hodnota práce, kooperací a spotřebovaného materiálu se odvádí na položku projektové objednávky (DOP). V tomto kontextu, lze považovat DOP = zakázka.
Účetně, se tyto skutečné náklady účtují na nedokončenou výrobu 121.
Při naskladnění výrobku z výroby si Karat z Factorify vezme odhadovanou hodnotu výrobku v rozpadu dle kalkulačního vzorce EGE a tuto hodnotu přeúčtuje z nedokončené výroby (NV) 121 na výrobky 123.
Rozpadem dle kalk. vzorce je myšlena stejná úroveň detailu, jako je v současnosti pro IFS.
V případě, že odhad. bude větší než náklady, které napadaly do NV 121, "půjde NV do záporu". Tento nesoulad se opraví v okamžiku uzavření zakázky.
Pokud se zjistí, že je odhadovaná cena diametrálně odlišná od reality, technologové zboží přecení (opraví WF) a Karat přecení pohyby.
EGE plánuje používat ceny z výrobních postupů pro naceňování zakázek. Současné naceňování podle hmotnosti není zcela vyhovující.
Po expedici a při uzavření zakázky se výrobky ocení skutečnou cenou, za kterou se vyskladní a opraví se rozdíl mezi odhadem a skutečnou cenou na NV 121 a výrobcích 123.
V Karatu nebude známá skutečná cena svazku, pouze skutečná cena DOP.
API je chráněné pomocí basic access authentication.
Pro komunikaci ve formátu JSON je potřeba nastavit hlavičku Accept.
Accept: application/json
Všechny entity obsahují následující pole, kromě výjimek uvedených u každé entity.
id
- celočíselný, primární, unikátní identifikátor entity.createdAt
- čas vytvoření.updatedAt
- čas aktualizace.deleted
- záznam je smazaný a ve Factorify existuje kvůli zachování integrity dat.Pole, jejichž hodnoty se můžou změnit od okamžiku vzniku záznamu jsou zvýrazněná kurzívou.
Pole updatedSinceTimestamp
je Epoch time v mili nebo micro sekundách. Pokud není uvedený, vezme se od počátku Epochy.
Předpoklad: Karat nepotřebuje znát výrobní neshodnosti.
Předpoklad: Karat nepotřebuje znát detaily výrobních dávek (opravné dávky, rozdělení, atp.) a vlastně ani dávky samotné. Jediný účel dávek by byl: identifikace DOP.
Endpoint je vhodný pro ověření funkčnosti připojení na Factorify.
GET /karat/status
Status
buildTime
- čas sestavení aplikace Factorify.upTime
- čas od kterého je Factorify spuštěno.GET /karat/people/{updatedSinceTimestamp}
Person
titleBefore
firstname
lastname
titleAfter
costCenter
- nákladové střediskopeopleNote
- volný atribut PEOPLE_NOTEexternalId
GET /karat/companies/{updatedSinceTimestamp}
POST /karat/company/
- pokud není vyplněné id, záznam se vytvoří.
Company
name
externalId
- identifikátor společnosti v externím systémucurrency
- ISO 4217types: set of {TRANSPORTER, CONTRACTOR, SUPPLIER, CUSTOMER}
state: {NEW, ACTIVE, DELETED}
GET /karat/addresses/{updatedSinceTimestamp}
POST /karat/address/
- pokud není vyplněné id, záznam se vytvoří.
Address
personId
companyId
isDefault
type: {BILLING_ADDRESS, DELIVERY_ADDRESS, HIDDEN_ADDRESS, TEMPORARY_RESIDENCE, DOMICILE}
name
addressLine1
addressLine2
addressLine3
city
zip
country
- ISO 3166-2vatNo
- DIČvatClassification
stateIdentNo
- IČEndpoint vrátí materiály, výrobky, případně neskladové zboží.
Produkt v terminologii EGE-Karatu je zboží na prodejní objednávce:
Tato logika je naimplementovaná ve view karat_dop_products_v
.
Vzhledem ke komplikovanosti určení zda-li je zboží produkt v okamžiku jeho vzniku, tento endpoint vrátí všechno zboží ve Factorify.
GET /karat/goods-list/{updatedSinceTimestamp}
Goods
state: {NEW, FIRST_RUN, ACTIVE, DELETED}
classification: {MATERIAL, PART, PRODUCT, GOODS}
code
name
unit
- množstevní jednotka.nonStock
- boolean, true pokud je neskladové zboží (např. služba)type
- klíčové slovo zbožícustomsIntrastatNumber
- celní nomenklaturahsCode
- celní nomenklaturaEndpoint vrátí záznamy práce na úkolech (např. konstrukce).
GET /karat/task-evidence-list/{updatedSinceTimestamp}
TaskWorkLog
projectOrderItemId
taskId
- id úkolutaskTitle
- název úkolucostCenter
- 4231000 = konstrukce, 4232000 = technologové, 4234000 = engineeringdateOfWork
- datum záznamu prácepersonId
- zaměstnanecstageId
- pracovištědurationMinutes
U výroby poltovarů, které mají ve Factorify nastavený parametr "zaměnitelné dávky" se může postupovat tak, že pro jednu DOP se vytvoří pouze jedna výrobní dávka takového polotovaru i přesto, že polotovar bude použit ve více různých nadřazených sestavách. To vede k tomu, že čas přípravy práce takové dávky je započítán pouze jednou pro celou DOP a z toho vyplývá, že hodnota tohoto času je rozpočítaná mezi výrobky DOP. Podle tohoto rozpočítání může mít jeden výrobek v různých DOP různou hodnotu a proto je odhad potřeba vztáhnout vždy na kombinaci DOP-výrobek (projectOrderItemId
- goodsId
).
GET /karat/product-estimates/{updatedSinceTimestamp}
ProductEstimate
projectOrderItemId
goodsId
noWrapStageEmployeeTimeMinutesPc
- Čas zaměstnancůnoWrapStageContractorTimeMinutesPc
- Čas agenturních zam. - obvykle 0, protože ve výrobních postupech se pracuje s pracovišti kmenových zaměstnanců.wrapStageEmployeeTimeMinutesPc
- Paletizace, čas zam.wrapStageContractorTimeMinutesPc
- Paletizace, čas agent. zam. - obvykle 0, protože ve výrobních postupech se pracuje s pracovišti kmenových zaměstnanců.workValuePc
- Mzdový průměrnonProductionValuePc
- Mzdová režiefixedValuePc
- Výrobní režieadminValuePc
- Správní režiecontractorValuePc
- Režie agent. zam. - obvykle 0, protože ve výrobních postupech se pracuje s pracovišti kmenových zaměstnanců.materialValuePc
- Hodnota materiálucooperationValuePc
- Hodnota kooperacíGET /karat/stocks/{updatedSinceTimestamp}
Stock
name
positions: set of strings
GET /karat/stages/{updatedSinceTimestamp}
Stage
name
costCenter
- nákladové střediskoexternalId
stageGroupId
- id skupiny pracovišťstageGroupName
- název skupiny pracovišťGET /karat/currencies/{updatedSinceTimestamp}
Currency
id
- ISO 4217 alphabetic codename
GET /karat/countries/{updatedSinceTimestamp}
Country
iso31662
name
GET /karat/purchase-orders/{updatedSinceTimestamp}
PurchaseOrder
supplierId
- CompanycreatedBy
- id osobycurrency
- ISO 4217costCenter
- Střediskoitems: list of IssuedOrderItem
PurchaseOrderItem
state {NEW, DEMANDED, ORDERED, CONFIRMED, DELIVERED, FINISHED, CANCELLED}
purchaseOrderId
goodsId
quantity
price
deliveryDate
- očekávané datum doručeníadditionalCost
- cena přepravy (související náklady)additionalCostCurrency
- ISO 4217GET /karat/cooperation-orders/{updatedSinceTimestamp}
CooperationOrder
contractorId
- CompanycreatedBy
- id osobycurrency
items: list of CooperationOrderItem
CooperationOrderItem
state {NEW, ORDERED, DELIVERED, FINISHED, CANCELLED}
cooperationOrderId
goodsId
quantity
price
deliveryCost
- cena přepravydeliveryCostCurrency
- ISO 4217Odpovídá například vedení mezi Prahou a Brnem.
GET /karat/project-orders/{updatedSinceTimestamp}
ProjectOrder
customerId
currency
- ISO 4217costCenter
items: list of ProjectOrderItem
ProjectOrderItem
Položka projektové objednávky odpovídá části vedení, třeba mezi Prahou a Humpolcem. V jiné terminologii také DOP nebo i zakázka.
state {NEW, PLANNED, WAITING_FOR_APPROVAL, APPROVED, CONFIRMED, PRODUCED, FINISHED, INVOICED, CANCELLED}
projectOrderId
goodsId
- toto je tzv. "představitel", stožár představující část vedení reprezentující tuto část vedení.salesOrderId
- id prodejní objednávkyquantity
price
dispatchDate
- požadované datum expedicebillingDate
- požadované datum fakturacePo uzavření zakázky v Karatu - tedy položky projektové objednávky, bude položka projektové objednávky uzamčena, tedy nepůjde na ni odvést hodnota (záznam práce, vydat materiál, kooperace).
GET /karat/delivery-bills/{updatedSinceTimestamp}
DeliveryBill
state {NEW, TO_INVOICE, INVOICED, CLOSED, CANCELLED, FAILED}
customerId
- Companyitems: list of DeliveryBillItem
DeliveryBillItem
deliveryBillId
projectOrderItemId
- může být prázdné pro služby přidané na DLgoodsId
quantity
V tomto přehledu budou pohyby materiálů a pohyby výrobků. Nejsou zahrnuty pohyby polotovarů. To, co je polotovar je uvedeno v kapitole zboží.
Přeskladnění je realizované jako dva nebo více skladových pohybů pro jedno zboží v rámci jednoho skladového dokladu. Například jeden záporný pohyb (výdej) z jednoho skladu a dva kladné pohyby (příjmy) na jiné sklady. Předpokladem je, že suma příjmů a výdajů se v rámci jednoho přeskladnění rovná nule.
V případě storna pohybu se ve Factorify nevytváří nový skladový doklad. Storno pohyb se “zařadí” do původního dokladu. Vzhledem k tomu, že každý pohyb má svůj čas i storno pohyb lze vytvořit s časem jiným, než je čas stornovaného pohybu. Skladový doklad ve kterém vznikl storno pohyb bude označeý jako aktualizovaný.
DOP - zakázku, lze považovat za uzvařenou v případě, že všechno zboží bylo vydané.
Někdy se stane, že se pro zakázku vyrobí něco navíc (polotovary), to se později spotřebuje v jiné zakázce. Navrhujeme náklady nechat v původní zakázce a provést převod do nové zakázky s nulovou hodnotou. Hodnotově tedy toto zboží zůstane v původní zakázce.
GET /karat/stock-documents/{updatedSinceTimestamp}
StockDocument
type
batchId
- výrobní dávka přijatá z výrobycostCenter
- nákladové střediskoconsumingBatchId
- výrobní dávka spotřebující materiálnonconformityId
issuedStageId
issuedStageGroupId
targetPersonId
projectOrderItemId
- ID položky projektové objednávkyitems: list of StockMove
StockMove
stockDocumentId
goodsId
batch
- šaržestockId
position
cancelledStockMoveId
purchaseOrderItemId
deliveryBillItemId
movedAt
- čas, ke kterému pohyb vzniklquantity
priceInRefCurrency
- ve specifických případech lze ocenit konkrétní pohyb. Jinak se vezme cena ze sklad. objednávky, případně vážená nákupní cena. Vyplněno pouze pokud je dostupná skladová objednávkatype
kind
- KS pro Konsignační skladFactorify udržuje pro každé zboží jednu cenu nepříč všemi sklady.
Entita neobsahuje parametr id nebo audit parametry, jako je čas vzniku, atp.
POST /karat/weighted-average-prices/{updateSinceTimestamp}
- list záznamů. Smaže vážené nákupní ceny platné od updateSinceTimestamp
a vloží nově zadané.
WeightedAveragePrice
goodsId
validFrom
- platná od okamžikupriceInRefCurrency
- cena v referenční měně (obvykle CZK)Materiál spotřebovaný na operaci je možné dotáhnout z agendy skladových dokladů a pohybů.
Factorify umožňuje vytvořit záznam práci na dávce i po jejím dokončení. Toto se stává v případě, kdy se během spotřeby zjistí, že na polotovaru je potřeba něco dodělat. Bude potřeba připravit mechanismus uzamčení zakázky, kdy po jejím uzamčení nepůjde na zakázku (project order item) přidat další záznam práce.
GET /karat/work-evidence-list/{updatedSinceTimestamp}
WorkEvidence
projectOrderItemId
workerId
- PersonstageId
- StagecooperationOrderItemId
- CooperationOrderItem, je nastavené pro záznam práce v kooperaci. V takovém případě se nepracuje s časem práce, ale ta je oceněna dle ceny kooperace.consumptionDocumentId
- StockDocument, je skladový dokument se spotřebovaným zbožím.effectiveTime
- čas, kte kterému je záznam platný, obvykle okamžik dokončení práce nebo příjmu z kooperace.durationMinutes
- počet minut strávených prací. Toto není užitečné pro kooperace.quantity
- dokončené množstvíbatchQuantity
- velikost dávky v okamžiku práceEndpoint nevrací id nebo audit. pole.
GET /karat/economy-lock
POST /karat/economy-lock
EconomyLock
economyLockedTo
- Záznamy (práce, sklad. pohyby) ovlivňující ekonomiku nepůjde před tímto datem vytvořit nebo změnit.Na rozdíl od standardní struktury objednávek a zboží EGE je struktura pro Karat zjednodušená.