Set up repository with legacy .NET Framework 4.8 source (OLD/), new .NET 10 Blazor solution (NEW/), OpenSpec specifications, documentation, and project configuration.
12 KiB
Tasks: Implement Domain Models
Phase 1: Foundation (Enums, Interfaces, Helpers)
-
Create JdeDateConverter helper class
- Location:
JdeScoping.Core/Helpers/JdeDateConverter.cs - Implements: CYYDDD date format conversion, HHMMSS time conversion
- Validation: Unit tests for valid dates, zero dates, invalid formats all pass
- Location:
-
Create SearchStatus enum
- Location:
JdeScoping.Core/Models/Enums/SearchStatus.cs - Values: New (0), Submitted (1), Started (2), Ended (3), Error (4)
- Validation: Has
[JsonConverter(typeof(JsonStringEnumConverter))]attribute
- Location:
-
Create UpdateTypes enum
- Location:
JdeScoping.Core/Models/Enums/UpdateTypes.cs - Values: Hourly (1), Daily (2), Mass (3)
- Validation: Has
[JsonConverter(typeof(JsonStringEnumConverter))]attribute
- Location:
-
Create IBusinessUnit interface
- Location:
JdeScoping.Core/Interfaces/IBusinessUnit.cs - Properties: Code, Description, LastUpdateDT
- Validation: Compiles, used by WorkCenter and ProfitCenter
- Location:
Phase 2: Search-Related Entities
-
Replace Search entity
- Location:
JdeScoping.Core/Models/Search.cs - Properties: ID, UserName, Name, Status, SubmitDT, StartDT, EndDT, CriteriaJSON, Criteria, Results
- Validation: Matches spec requirement, Results is
byte[]?
- Location:
-
Create SearchCriteria entity
- Location:
JdeScoping.Core/Models/SearchCriteria.cs - Properties: MinimumDT, MaximumDT, WorkOrderNumbers, ItemNumbers, ProfitCenters, WorkCenters, OperatorIDs, ComponentLotNumbers, ExtractMisData, PartOperations
- Validation: All list properties initialized to empty lists
- Location:
-
Create SearchUpdate entity
- Location:
JdeScoping.Core/Models/SearchUpdate.cs - Properties: ID, UserName, Name, Status, SubmitDT, StartDT, EndDT, Timestamp
- Validation: Constructor accepts Search, sets Timestamp to DateTime.UtcNow
- Location:
-
Create StatusUpdate entity
- Location:
JdeScoping.Core/Models/StatusUpdate.cs - Properties: Message, Timestamp
- Validation: Compiles, simple message DTO
- Location:
Phase 3: Work Order Entities
-
Replace WorkOrder entity
- Location:
JdeScoping.Core/Models/WorkOrder.cs - Properties: WorkOrderNumber, BranchCode, LotNumber?, ItemNumber, ShortItemNumber, ParentWorkOrderNumber?, OrderQuantity, HeldQuantity, ShippedQuantity, StatusCode, StatusCodeUpdateDT, IssueDate, StartDate, RoutingType, LastUpdateDT
- Validation: Private JDE date fields, computed LastUpdateDT, nullable annotations
- Location:
-
Create WorkOrderStep entity
- Location:
JdeScoping.Core/Models/WorkOrderStep.cs - Properties: WorkOrderNumber, BranchCode, WorkCenterCode, StepNumber, StepDescription?, FunctionOperationDescription?, StepTypeCode, StartDT, EndDT, FunctionCode, ScrappedQuantity, LastUpdateDT
- Validation: Nullable annotations on optional fields
- Location:
-
Create WorkOrderTime entity
- Location:
JdeScoping.Core/Models/WorkOrderTime.cs - Properties: UniqueID, WorkOrderNumber, BranchCode, WorkCenterCode, StepNumber, AddressNumber, GlDate, LastUpdateDT
- Validation: Matches F31122 table structure
- Location:
-
Create WorkOrderComponent entity
- Location:
JdeScoping.Core/Models/WorkOrderComponent.cs - Properties: UniqueID, WorkOrderNumber, LotNumber?, BranchCode, ShortItemNumber?, Quantity, LastUpdateDT
- Validation: ShortItemNumber and LotNumber are nullable
- Location:
-
Create WorkOrderRouting entity
- Location:
JdeScoping.Core/Models/WorkOrderRouting.cs - Properties: UserID, BatchNumber, TransactionNumber, LineNumber, StepNumber, WorkCenterCode, WorkOrderNumber, RoutingType, BranchCode, StepDescription?, FunctionCode, TransactionDate, LastUpdateDT
- Validation: Compiles, nullable StepDescription
- Location:
Phase 4: Lot Entities
-
Replace Lot entity
- Location:
JdeScoping.Core/Models/Lot.cs - Properties: LotNumber, BranchCode, ShortItemNumber, ItemNumber, SupplierCode, StatusCode (char), Memo1?, Memo2?, Memo3?, LastUpdateDT
- Validation: StatusCode is char type, nullable memo fields
- Location:
-
Replace LotUsage entity
- Location:
JdeScoping.Core/Models/LotUsage.cs - Properties: UniqueID, WorkOrderNumber, LotNumber, BranchCode, ShortItemNumber, Quantity, LastUpdateDT
- Validation: Cardex entry structure matches spec
- Location:
-
Create LotLocation entity
- Location:
JdeScoping.Core/Models/LotLocation.cs - Properties: LotNumber, ShortItemNumber, BranchCode, Location, LastUpdateDT
- Validation: Compiles with all properties
- Location:
Phase 5: Reference Entities
-
Replace Item entity
- Location:
JdeScoping.Core/Models/Item.cs - Properties: ShortItemNumber, ItemNumber, Description, PlanningFamily?, StockingType?, LastUpdateDT
- Validation: Dual identifier pattern (ShortItemNumber + ItemNumber)
- Location:
-
Replace WorkCenter entity
- Location:
JdeScoping.Core/Models/WorkCenter.cs - Properties: Code, Description, LastUpdateDT
- Validation: Implements IBusinessUnit interface
- Location:
-
Create ProfitCenter entity
- Location:
JdeScoping.Core/Models/ProfitCenter.cs - Properties: Code, Description, LastUpdateDT
- Validation: Implements IBusinessUnit interface
- Location:
-
Create Branch entity
- Location:
JdeScoping.Core/Models/Branch.cs - Properties: Code, Description, LastUpdateDT
- Validation: Compiles, matches spec
- Location:
-
Replace JdeUser entity
- Location:
JdeScoping.Core/Models/JdeUser.cs - Properties: AddressNumber, UserID, FullName, LastUpdateDT
- Validation: AddressNumber is long, matches spec
- Location:
-
Create StatusCode entity
- Location:
JdeScoping.Core/Models/StatusCode.cs - Properties: Code, Description, LastUpdateDT
- Validation: JDE work order status lookup
- Location:
-
Create FunctionCode entity
- Location:
JdeScoping.Core/Models/FunctionCode.cs - Properties: Code, Description, LastUpdateDT
- Validation: JDE function code lookup
- Location:
Phase 6: Config and Mapping Entities
-
Create DataUpdate entity
- Location:
JdeScoping.Core/Models/DataUpdate.cs - Properties: ID, SourceSystem, SourceData, TableName, StartDT, EndDT, UpdateType, WasSuccessful, NumberRecords
- Validation: UpdateType uses UpdateTypes enum
- Location:
-
Create OrgHierarchy entity
- Location:
JdeScoping.Core/Models/OrgHierarchy.cs - Properties: WorkCenterCode, BranchCode, ProfitCenterCode, LastUpdateDT
- Validation: Profit center to work center mapping
- Location:
-
Create RouteMaster entity
- Location:
JdeScoping.Core/Models/RouteMaster.cs - Properties: BranchCode, ItemNumber, RoutingType, SequenceNumber, FunctionCode, WorkCenterCode, StartDate, EndDate?, LastUpdateDT
- Validation: EndDate is nullable
- Location:
Phase 7: CMS and External Entities
-
Create MisData entity
- Location:
JdeScoping.Core/Models/MisData.cs - Properties: ItemNumber, BranchCode, SequenceNumber, MisNumber, RevID?, CharNumber, TestDescription?, SamplingType?, SamplingValue?, ToolsGauges?, WorkInstructions?, Status, ReleaseDate?
- Validation: Many nullable string fields per spec
- Location:
-
Create POReceiver entity
- Location:
JdeScoping.Core/Models/POReceiver.cs - Properties: OrderNumber, OrderCompany, OrderSuffix, LineNumber, NumberOfLines, InvoiceNumber, BranchCode, LotNumber?, ShortItemNumber (string!), DateReceived, Subledger?, QtyReceived, LastUpdateDT
- Validation: ShortItemNumber is string (intentional legacy quirk)
- Location:
-
Create POInspect entity
- Location:
JdeScoping.Core/Models/POInspect.cs - Properties: UniqueID, OrderNumber, OrderCompany, LineNumber, InvoiceNumber, LotNumber?, ShortItemNumber, LastUpdateDT
- Validation: Compiles with nullable LotNumber
- Location:
-
Create DcsLot entity
- Location:
JdeScoping.Core/Models/DcsLot.cs - Properties: ItemNumber, LotNumber, LotSuffix?, LastUpdateDT
- Validation: Simple DCS lot record
- Location:
-
Create CamstarMO entity
- Location:
JdeScoping.Core/Models/CamstarMO.cs - Properties: MONumber, LastUpdateDT
- Validation: Simple Camstar manufacturing order
- Location:
Phase 8: Auth and User Entities
- Create UserInfo entity
- Location:
JdeScoping.Core/Models/UserInfo.cs - Properties: Username, FirstName?, LastName?, DisplayName (computed), Title?, EmailAddress?
- Validation: DisplayName computed property works (fallback to Username)
- Location:
Phase 9: Query Support Entities
-
Create QueryTypes entity
- Location:
JdeScoping.Core/Models/QueryTypes.cs - Properties: Code, Name, OrderIndex, filter flags (TimeSpanFilter, WorkOrderFilter, etc.)
- Validation: Static dictionary pattern, Identify() method stub
- Location:
-
Create TableSpec entity
- Location:
JdeScoping.Core/Models/TableSpec.cs - Properties: Name, TempTableName (computed), Columns, PrimaryKey
- Validation: Constructor initializes lists, stub methods exist
- Location:
-
Create ColumnSpec entity
- Location:
JdeScoping.Core/Models/ColumnSpec.cs - Properties: Name, Definition
- Validation: Simple column specification
- Location:
Phase 10: ViewModels
-
Create WorkOrderViewModel
- Location:
JdeScoping.Core/ViewModels/WorkOrderViewModel.cs - Properties: WorkOrderNumber, ItemNumber
- Validation: Minimal projection DTO
- Location:
-
Create LotViewModel
- Location:
JdeScoping.Core/ViewModels/LotViewModel.cs - Properties: LotNumber, ItemNumber
- Validation: Used by SearchCriteria.ComponentLotNumbers
- Location:
-
Create ItemViewModel
- Location:
JdeScoping.Core/ViewModels/ItemViewModel.cs - Properties: ItemNumber, Description
- Validation: Minimal projection DTO
- Location:
-
Create WorkCenterViewModel
- Location:
JdeScoping.Core/ViewModels/WorkCenterViewModel.cs - Properties: Code, Description
- Validation: Minimal projection DTO
- Location:
-
Create ProfitCenterViewModel
- Location:
JdeScoping.Core/ViewModels/ProfitCenterViewModel.cs - Properties: Code, Description
- Validation: Minimal projection DTO
- Location:
-
Create JdeUserViewModel
- Location:
JdeScoping.Core/ViewModels/JdeUserViewModel.cs - Properties: AddressNumber, UserID, FullName
- Validation: Minimal projection DTO
- Location:
-
Create PartOperationViewModel
- Location:
JdeScoping.Core/ViewModels/PartOperationViewModel.cs - Properties: ItemNumber, OperationNumber, MisNumber, Revision
- Validation: Used by SearchCriteria.PartOperations
- Location:
Phase 11: Extension Methods
-
Create WorkOrderExtensions
- Location:
JdeScoping.Core/Extensions/WorkOrderExtensions.cs - Method: ToViewModel() -> WorkOrderViewModel
- Validation: Extension method on WorkOrder compiles and works
- Location:
-
Create LotExtensions
- Location:
JdeScoping.Core/Extensions/LotExtensions.cs - Method: ToViewModel() -> LotViewModel
- Validation: Extension method on Lot compiles and works
- Location:
-
Create ItemExtensions
- Location:
JdeScoping.Core/Extensions/ItemExtensions.cs - Method: ToViewModel() -> ItemViewModel
- Validation: Extension method on Item compiles and works
- Location:
-
Create WorkCenterExtensions
- Location:
JdeScoping.Core/Extensions/WorkCenterExtensions.cs - Method: ToViewModel() -> WorkCenterViewModel
- Validation: Extension method on WorkCenter compiles and works
- Location:
-
Create ProfitCenterExtensions
- Location:
JdeScoping.Core/Extensions/ProfitCenterExtensions.cs - Method: ToViewModel() -> ProfitCenterViewModel
- Validation: Extension method on ProfitCenter compiles and works
- Location:
-
Create JdeUserExtensions
- Location:
JdeScoping.Core/Extensions/JdeUserExtensions.cs - Method: ToViewModel() -> JdeUserViewModel
- Validation: Extension method on JdeUser compiles and works
- Location:
Phase 12: Verification
-
Verify solution builds
- Command:
dotnet build NEW/src/JdeScoping.Core/JdeScoping.Core.csproj - Validation: Build succeeds with no errors
- Command:
-
Verify nullable reference types
- Validation: All nullable properties use
?annotation, no compiler warnings
- Validation: All nullable properties use
-
Verify JSON serialization
- Validation: SearchStatus and UpdateTypes serialize as strings, not integers
-
Run OpenSpec validation
- Command:
openspec validate implement-domain-models --strict - Validation: All requirements marked as covered
- Command:
-
Cross-reference with spec
- Validation: All 52 requirements from domain-models/spec.md implemented