Releases: FastChickensHR/edi
v0.1.0-alpha
Minor Release
We've advanced to a minor release as the core structure for EDI 834 files has been established. Currently, only the ISA Segment meets our design standards, but the fundamental architecture is now in place.
What's Changed
Tests
We are up to 1,366 tests. Most of those are around ensuring the Enumerations are properly mapping values. These tests are still not focused on catching issues, but are solely focused on preventing regressions as we work. The number looks good, but we also want to be transparent that the enumerations in this release greatly inflate that number and will continue to do so. It's not a bad thing, but the goal here is functional software and not lip service to unit tests.
EDI Segments vs 834
So far we have been building to get something out there and there's been a lot of mixing and not a very clear seperation of what is EDI and what is 834 specific. The ISASegment in this release shows the seperation and movement.
We moved defaults out from the ISA and allowed it to validate every field.
Previous defaults have been added to InterchangeControlHeader
and it's tests have been updated to not overlap with the ISASegments
Enumerations
Enumerations have been formalized with a consistent structure, as demonstrated below:
public enum ConfidentialityCode implements EdiCodeEnum {
UNRESTRICTED("U", "Unrestricted"),
RESTRICTED("R", "Restricted"),
CONFIDENTIAL("C", "Confidential"),
VERY_RESTRICTED("V", "Very Restricted"),
NORMAL("N", "Normal"),
LOW("L", "Low"),
MEDIUM("M", "Medium"),
HIGH("H", "High");
Each enumeration contains both a code and description, complemented by a lookup mechanism:
private final String code;
private final String description;
private static final EdiEnumLookup<ConfidentialityCode> LOOKUP;
static {
// Include additional synonyms and related terms
LOOKUP = new EdiEnumLookup<>(
ConfidentialityCode.class,
"Confidentiality Code",
Map.ofEntries(
Map.entry("open", UNRESTRICTED),
Map.entry("standard", NORMAL)
)
);
}
The lookup pattern enhances API usability by providing flexible input handling. When fromString()
is called on these enumerations, the enumeration normalizes codes, descriptions, and synonyms to return the appropriate value or a meaningful error.
For more complex enumerations like COBRAQualifyingEventCode
, this approach scales effectively:
static {
LOOKUP = new EdiEnumLookup<>(
COBRAQualifyingEventCode.class,
"COBRA Qualifying Event Code",
Map.ofEntries(
Map.entry("fired", TERMINATION_OF_EMPLOYMENT),
Map.entry("terminated", TERMINATION_OF_EMPLOYMENT),
Map.entry("quit", TERMINATION_OF_EMPLOYMENT),
Map.entry("resignation", TERMINATION_OF_EMPLOYMENT)
)
);
}
This design combines the flexibility of string handling with the type safety of enumerations. Validation exceptions are thrown at runtime, which we consider appropriate for this implementation.
How this works in Action
The setters for classes and builders will accept strings and then they will pass this string through their enumeration.
public T setIsa01(String value) {
this.isa01 = AuthorizationInformationQualifier.fromString(value);
return self();
}
Pull Requests
- isa segment - enumerations and validations by @mandyMooreFan in #32
- refactor(edi-common): move a bunch of files out of the x834 common th… by @mandyMooreFan in #35
- Remove defaults from ISASegment by @mandyMooreFan in #36
- refactor(x834-context): remove separate localDateTime variable to tra… by @mandyMooreFan in #37
Full Changelog: v0.0.3-alpha...v0.1.0-alpha
v0.0.3-alpha
What's Changed
Major Features
- Implemented standard enumeration logic for value mapping
- Added a TON of tests related to the enumerations we are up to 1,163 tests. Most of these are related to making sure the enumeration mapping works properly. This will prevent regressions and isn't going to prementively catch any bugs.
- Added
fromString()
method to all enumerations that validates input against predefined lists and returns the appropriate enumeration - Established a consistent pattern where enums are contained within their class and builders accept string inputs to call
fromString()
on the enum - This approach provides clear feedback to users while allowing flexibility in code passing
Bug Fixes
- Resolved issue with Loop2000 generation
- Note: Comprehensive tests for x834 document and Member functions are planned for beta release rather than current alpha stage
- Create isa segment by @mandyMooreFan in #27
- Create AuthorizationInformationQualifier enumeration by @mandyMooreFan in #28
- feat(enums): create fromString utils and start creating maps of all e… by @mandyMooreFan in #29
- Adding enumeration tests and cleaning up lookup value maps by @mandyMooreFan in #30
- Continued enums tests by @mandyMooreFan in #31
Full Changelog: v0.0.2-alpha...v0.0.3-alpha
v0.0.2-alpha
What's Changed
Still in alpha and needs a lot of minor movement, but this release does represent an "834" file now. Figuring out how we want to handle mapping of data and validations will be the focus of the next release.
Major Features
-
Complete Loop 2000 Implementation: Added support for Loop 2000 member-level data including:
- Member demographic information segments
- Member-level reference segments
- Date segments with improved formatting and validation
- Support for member-level dates and timing information
-
Enhanced Header Interface: Improved the header creation process with a more intuitive builder pattern for easier configuration and validation.
-
Trailer Implementation: Added trailer segment support:
- Transaction Set Trailer (SE)
- Functional Group Trailer (GE)
- Interchange Control Trailer (IEA)
- Unified trailer builder for simplified creation
-
Loop 1000 Enhancements: Refactored Loop 1000 components for better organization and expanded functionality.
Other Improvements
- Fixed issues with DTP segments to ensure date formatting and validation
- Enhanced validation across all components for more reliable EDI file generation
Pull requests
- feat(loop-1000): refactor some existing loop 1000 pieces and add the … by @mandyMooreFan in #12
- Loop 2000 by @mandyMooreFan in #13
- feat(loop2000): create ref segments for loop2000 and add tests. by @mandyMooreFan in #14
- feat(dtp-segment): create dtp segment and refactor existing date segm… by @mandyMooreFan in #15
- feat(loop-2000-member-level-dates): create member level dates and tests by @mandyMooreFan in #16
- More loop 2000 fun by @mandyMooreFan in #17
- More segments by @mandyMooreFan in #18
- Loop 2000 still going by @mandyMooreFan in #19
- Trailer time by @mandyMooreFan in #20
- Dtp segment fix by @mandyMooreFan in #21
- Dtp segment fix by @mandyMooreFan in #24
- feat(trailer): create a trailer to wrap the builders. by @mandyMooreFan in #25
- chore(readme): cleaning up and minor touches for v0.0.2-alpha release by @mandyMooreFan in #26
Full Changelog: v0.0.1-alpha...v0.0.2-alpha
v0.0.1-alpha
What's Changed
- chore(transaction-set-header): add lombok to clean up some of the bo… by @mandyMooreFan in #1
- Interchange control header by @mandyMooreFan in #2
- Bgn segment by @mandyMooreFan in #3
- feat(github-actions): add maven test runner by @mandyMooreFan in #4
- fix(github-actions): added java version and permissions by @mandyMooreFan in #5
- refactor(lombok-setters): found the lombok annotation for setters wi… by @mandyMooreFan in #6
- feat(payer): add initial class and builder with tests by @mandyMooreFan in #7
- feat(readme): create readme and changes to get an initial example wit… by @mandyMooreFan in #8
- fix(readme): move to root need to refactor the project layout at some… by @mandyMooreFan in #9
- feat(license): add LICENSE to the project and make sure that on pre-c… by @mandyMooreFan in #10
New Contributors
- @mandyMooreFan made their first contribution in #1
Full Changelog: https://github.com/FastChickensHR/edi/commits/v0.0.1-alpha