-
Notifications
You must be signed in to change notification settings - Fork 61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(j-s): Additional info for law and order cases and subpoenas #16132
Conversation
WalkthroughThe changes introduced in this pull request enhance the Changes
Possibly related PRs
Suggested reviewers
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
Outside diff range and nitpick comments (9)
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/cases.response.ts (2)
8-14
: LGTM! Consider adding JSDoc comments for better documentation.The new
StateTag
class is well-structured and follows TypeScript and NestJS best practices. The use of@ApiProperty
decorators is appropriate for API documentation.Consider adding JSDoc comments to the class and its properties for improved code documentation:
/** * Represents the state of a case with color and label. */ class StateTag { /** * The color associated with the state. */ @ApiProperty({ type: String }) color!: string /** * The label describing the state. */ @ApiProperty({ type: String }) label!: string }
26-27
: LGTM! Consider updating the static method for consistency.The update to use the
StateTag
type for thestate
property improves type safety and aligns with TypeScript best practices.For consistency, consider updating the
fromInternalCasesResponse
static method to use theStateTag
class explicitly:static fromInternalCasesResponse( response: InternalCasesResponse[], lang?: string, ): CasesResponse[] { return response.map((item: InternalCasesResponse) => { const t = getTranslations(lang) return { id: item.id, state: new StateTag({ color: isCompletedCase(item.state) ? 'purple' : 'blue', label: isCompletedCase(item.state) ? t.completed : t.active, }), caseNumber: `${t.caseNumber} ${item.courtCaseNumber}`, type: t.indictment, } }) }This change would require adding a constructor to the
StateTag
class:class StateTag { // ... existing properties ... constructor(data: { color: string; label: string }) { this.color = data.color; this.label = data.label; } }apps/judicial-system/backend/src/app/modules/defendant/defendant.module.ts (2)
8-8
: LGTM! Consider grouping related imports.The changes look good and align with the PR objectives. The
Subpoena
model is correctly imported and added to theSequelizeModule.forFeature
call, which will make it available for dependency injection within this module.Consider grouping related imports together for better readability. You could move the
Subpoena
import next to other model imports:import { CivilClaimant } from './models/civilClaimant.model' import { Defendant } from './models/defendant.model' import { Subpoena } from '../subpoena/models/subpoena.model'Also applies to: 22-22
Line range hint
1-33
: Summary: Subpoena model integration enhances case management capabilitiesThese changes successfully integrate the
Subpoena
model into theDefendantModule
, aligning with the PR's objective to enhance functionality for law and order cases and subpoenas. By including theSubpoena
model in theSequelizeModule.forFeature
call, you've made it available for dependency injection within this module, which will allow for better tracking and management of subpoenas in relation to defendants.As the system grows, consider creating a separate
SubpoenaModule
if subpoena-related functionality becomes more complex. This would improve modularity and separation of concerns.apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/case.response.ts (1)
33-38
: LGTM: Improved subpoena handling logicThe introduction of new variables and the updated logic for
hasBeenServed
significantly improve the integration of subpoena acknowledgement information. This aligns well with the PR objectives and enhances the overall functionality.Consider adding a comment explaining the fallback logic for
subpoenaCreatedDate
. For example:// Fallback to empty string if subpoenaDateLog or its created property is undefined const subpoenaCreatedDate = subpoenaDateLog?.created?.toString() ?? '';This would clarify the intention behind the fallback logic and improve code maintainability.
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/utils/translations.strings.ts (1)
50-51
: LGTM: English translations added correctlyThe new English translations for
courtContactInfo
andsubpoenaServed
have been added correctly. The messages are clear, relevant, and grammatically correct.Consider adding a period at the end of the
courtContactInfo
message for consistency with other multi-line messages:courtContactInfo: - 'Please contact the court if you wish to change your choice of defender', + 'Please contact the court if you wish to change your choice of defender.',Also applies to: 70-71
apps/judicial-system/backend/src/app/modules/defendant/models/defendant.model.ts (2)
138-139
: LGTM: Subpoenas property correctly added with a minor suggestionThe 'subpoenas' property is correctly added and typed as an optional array of Subpoena. The @ApiPropertyOptional decorator is used appropriately for Swagger documentation.
For improved type safety, consider using a more specific type annotation:
subpoenas?: Subpoena[] | null;This explicitly allows for null values, which might be returned by some ORM queries when no related records are found.
7-7
: Summary: Successful integration of Subpoena relationshipThe changes in this file successfully integrate the Subpoena model with the Defendant model, aligning with the PR objectives. The new HasMany relationship and corresponding property are correctly implemented, following TypeScript and Sequelize ORM best practices. These modifications enhance the data structure by allowing a defendant to have multiple associated subpoenas, which will improve the tracking and management of subpoenas in the judicial system backend.
As the application grows, consider the potential impact of this relationship on query performance. If you frequently need to load defendants with their subpoenas, you might want to implement eager loading strategies or create composite queries to optimize database access.
Also applies to: 24-24, 137-139
apps/judicial-system/backend/src/app/modules/police/police.service.ts (1)
524-526
: Approve changes with suggestions for improvementThe introduction of
normalizedNationalId
using thenormalizeAndFormatNationalId
function is a good practice for ensuring data consistency. However, there are a few points to consider:
- Error handling: Consider adding error handling for cases where the normalization might fail.
- Array destructuring: The use of
[0]
suggests thatnormalizeAndFormatNationalId
returns an array. It might be worth documenting why we're only using the first element.Consider refactoring the code to include error handling:
let normalizedNationalId: string; try { const [normalized] = normalizeAndFormatNationalId(defendantNationalId); if (!normalized) { throw new Error('Failed to normalize national ID'); } normalizedNationalId = normalized; } catch (error) { this.logger.error(`Failed to normalize national ID for case ${workingCase.id}`, { error, defendantNationalId, }); throw error; }This approach ensures that any issues with normalization are caught and logged, improving the robustness of the application.
Also applies to: 548-548
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (9)
- apps/judicial-system/backend/src/app/modules/case/internalCase.service.ts (3 hunks)
- apps/judicial-system/backend/src/app/modules/defendant/defendant.module.ts (2 hunks)
- apps/judicial-system/backend/src/app/modules/defendant/models/defendant.model.ts (3 hunks)
- apps/judicial-system/backend/src/app/modules/police/police.service.ts (3 hunks)
- apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/case.response.ts (3 hunks)
- apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/cases.response.ts (2 hunks)
- apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/internal/internalCase.response.ts (2 hunks)
- apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts (3 hunks)
- apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/utils/translations.strings.ts (6 hunks)
Additional context used
Path-based instructions (9)
apps/judicial-system/backend/src/app/modules/case/internalCase.service.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
apps/judicial-system/backend/src/app/modules/defendant/defendant.module.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
apps/judicial-system/backend/src/app/modules/defendant/models/defendant.model.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
apps/judicial-system/backend/src/app/modules/police/police.service.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/case.response.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/cases.response.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/internal/internalCase.response.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/utils/translations.strings.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
Additional comments not posted (21)
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/internal/internalCase.response.ts (3)
31-31
: LGTM: Addition of subpoenas property to Defendant interfaceThe addition of the optional
subpoenas
property to theDefendant
interface is well-implemented. It's correctly typed as an array ofSubpoena
objects and made optional, which maintains backwards compatibility. This change aligns with the PR objectives of integrating subpoena acknowledgement information and enhances the data structure for defendants.
31-31
: Overall impact and follow-up suggestionsThe additions of the
subpoenas
property to theDefendant
interface and the newSubpoena
interface are well-integrated and align with the PR objectives. They enhance the data model to include subpoena information while maintaining type safety.To ensure full integration:
- Update any components or services that interact with the
Defendant
interface to handle the newsubpoenas
property.- Consider adding unit tests for these new data structures.
- Update relevant documentation to reflect these changes in the data model.
Let's check for potential areas that might need updates:
Also applies to: 42-46
42-46
: Approve Subpoena interface with a request for clarificationThe new
Subpoena
interface is well-structured and includes the necessary properties for tracking subpoena acknowledgement, which aligns with the PR objectives. However, could you please clarify the difference betweenid
andsubpoenaId
? It seems potentially redundant to have both fields, and understanding their distinct purposes would be helpful.To ensure these fields are used consistently across the codebase, let's run the following check:
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/case.response.ts (5)
15-15
: LGTM: Property renamed for clarityThe renaming of
acknowledged
tohasBeenServed
improves the clarity of the code and better reflects the domain language. This change is consistent with the PR objectives and enhances the readability of theIndictmentCaseData
class.
29-29
: LGTM: Method parameter renamed for clarityThe renaming of the parameter from
res
tointernalCase
in thefromInternalCaseResponse
method improves code readability and aligns with TypeScript best practices. This change enhances the overall clarity of the method signature.
41-44
: LGTM: Consistent use ofinternalCase
and improved subpoena handlingThe changes in the return statement correctly utilize the
internalCase
object and implement the new subpoena acknowledgement logic. This ensures consistency with the parameter renaming and aligns with the PR objectives for integrating subpoena information.
79-95
: LGTM: Consistent use ofinternalCase
in information groupThe changes in the
information
group of the return statement consistently use theinternalCase
object instead of the previousres
. This refactoring improves code consistency and readability without altering the underlying logic.
Line range hint
1-103
: Overall assessment: High-quality changes that meet PR objectivesThe changes in this file successfully integrate subpoena acknowledgement information and improve the overall code quality. Key improvements include:
- Renaming properties and parameters for better clarity
- Implementing subpoena handling logic
- Consistently using the
internalCase
object throughout the codeThese changes adhere to TypeScript and NextJS best practices, improving code readability and maintainability. The modifications align well with the PR objectives and enhance the functionality related to law and order cases and subpoenas.
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/utils/translations.strings.ts (2)
14-14
: LGTM: New translation properties added correctlyThe new properties
courtContactInfo
andsubpoenaServed
have been added to theTranslations
type correctly. They follow the existing naming convention and are appropriately typed asstring
.Also applies to: 33-33
85-86
: Icelandic translations added, please verifyThe new Icelandic translations for
courtContactInfo
andsubpoenaServed
have been added with consistent formatting.As a non-Icelandic speaker, I cannot verify the accuracy of these translations. Please ensure that a native Icelandic speaker or a qualified translator reviews these new entries for correctness and clarity.
Also applies to: 105-105
apps/judicial-system/backend/src/app/modules/defendant/models/defendant.model.ts (2)
7-7
: LGTM: Import statements are correctly addedThe new import statements for
HasMany
decorator andSubpoena
model are correctly placed and necessary for the new relationship being added to theDefendant
model. This follows TypeScript best practices for importing only the required elements.Also applies to: 24-24
137-137
: LGTM: HasMany relationship correctly definedThe new HasMany relationship between
Defendant
andSubpoena
models is correctly implemented. The explicit foreign key definition enhances clarity. This change aligns well with the PR objectives of integrating subpoena information with the backend.apps/judicial-system/backend/src/app/modules/police/police.service.ts (1)
24-24
: LGTM: Import statement follows best practicesThe import of
normalizeAndFormatNationalId
is well-structured and follows TypeScript best practices. It's a named import, which is good for tree-shaking and indicates a well-organized project structure.apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts (4)
23-28
: Addition of 'canEdit' and 'courtContactInfo' properties to 'DefenderInfo'The inclusion of the optional properties
canEdit
andcourtContactInfo
in theDefenderInfo
class enhances the model by providing additional information about the defender's capabilities and court contact details.
42-43
: Integration of 'alerts' property into 'SubpoenaData' enhances user communicationAdding the
alerts
property as an array ofAlertMessage
objects to theSubpoenaData
class allows the system to communicate important messages to the user effectively.
94-104
: Conditional inclusion of alert messages based on acknowledgment statusThe code correctly includes a success alert when the subpoena is acknowledged:
alerts: [ ...(subpoenaAcknowledged ? [ { type: 'success', message: t.subpoenaServed, }, ] : []), ],Ensure that the translation
t.subpoenaServed
provides the appropriate localized message and that thetype
property aligns with the suggestedAlertType
enum for consistency.
137-140
: Validation of 'canEdit' and 'courtContactInfo' logic in 'defenderInfo'The assignment of
canEdit
andcourtContactInfo
based oncanChangeDefenseChoice
accurately reflects the business logic:canEdit: canChangeDefenseChoice, courtContactInfo: canChangeDefenseChoice ? t.courtContactInfo : undefined,This ensures that users receive the correct information regarding their ability to change their defense choice and whom to contact at the court.
apps/judicial-system/backend/src/app/modules/case/internalCase.service.ts (4)
61-61
: Import Subpoena Model SuccessfullyThe
Subpoena
model is correctly imported from'../subpoena/models/subpoena.model'
for use within the service.
1208-1211
: Include 'defendants' Association in QueryIncluding the
defendants
association ensures that defendant information is retrieved along with the case data. This inclusion is appropriate and necessary for comprehensive case details.
1235-1245
: Eager Loading 'subpoenas' within 'defendants' AssociationThe nested inclusion of
Subpoena
within thedefendants
association allows for eager loading of subpoenas related to each defendant, ordered by thecreated
date in descending order. This ensures that all relevant subpoena information is fetched efficiently.
1249-1253
: Include 'institution' Association within 'prosecutor'Including the
institution
model within theprosecutor
association ensures that the prosecutor's institution data is eagerly loaded. This provides a complete set of information for the prosecutor associated with the case.
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts
Outdated
Show resolved
Hide resolved
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts
Outdated
Show resolved
Hide resolved
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts
Outdated
Show resolved
Hide resolved
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #16132 +/- ##
==========================================
+ Coverage 36.69% 36.71% +0.01%
==========================================
Files 6761 6761
Lines 139068 139076 +8
Branches 39501 39501
==========================================
+ Hits 51035 51055 +20
+ Misses 88033 88021 -12
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 1 file with indirect coverage changes Continue to review full report in Codecov by Sentry.
|
Datadog ReportAll test runs ✅ 9 Total Test Services: 0 Failed, 9 Passed Test Services
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Outside diff range and nitpick comments (3)
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/cases.response.ts (1)
25-32
: LGTM:StateTag
class is well-structured. Consider initializing properties.The
StateTag
class is well-structured and uses decorators appropriately for validation and API documentation. It follows TypeScript best practices.Consider initializing the properties instead of using non-null assertions:
class StateTag { @IsEnum(TagVariant) @ApiProperty({ enum: TagVariant }) color: TagVariant = TagVariant.BLUE; @ApiProperty({ type: String }) label: string = ''; }This approach provides default values and eliminates the need for non-null assertions, potentially improving type safety.
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts (2)
38-44
: LGTM with suggestion: Consider making AlertMessage properties requiredThe new
AlertMessage
class is well-structured and uses theAlertMessageType
enum for improved type safety. However, consider making thetype
andmessage
properties required if they are always needed for a valid alert message. This would ensure that all alert messages have both a type and a message.If you decide to make them required, you can remove the question marks from the property declarations:
class AlertMessage { @IsEnum(AlertMessageType) @ApiProperty({ enum: AlertMessageType }) type!: AlertMessageType @ApiProperty({ type: () => String }) message!: string }
88-90
: Approved with suggestion: Consider a more robust way to determinehasBeenServed
The changes to the
fromInternalCaseResponse
method are generally good, especially the improved formatting of the arraignment location. However, thehasBeenServed
variable is determined based only on the first subpoena's acknowledgment status. This might not be accurate if there are multiple subpoenas.Consider using a more robust method to determine the
hasBeenServed
status, such as checking if any subpoena has been acknowledged:const hasBeenServed = subpoena.some(s => s.acknowledged) ?? falseThis approach ensures that the status is accurate even when there are multiple subpoenas.
Also applies to: 97-99
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (2)
- apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/cases.response.ts (3 hunks)
- apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts (3 hunks)
Additional context used
Path-based instructions (2)
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/cases.response.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts (1)
Pattern
apps/**/*
: "Confirm that the code adheres to the following:
- NextJS best practices, including file structure, API routes, and static generation methods.
- Efficient state management and server-side rendering techniques.
- Optimal use of TypeScript for component and utility type safety."
Additional comments not posted (8)
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/cases.response.ts (3)
1-1
: LGTM: Import statement addition is appropriate.The addition of
IsEnum
from 'class-validator' is necessary for the newStateTag
class and follows TypeScript best practices for ensuring type safety.
10-23
: LGTM:TagVariant
enum is well-structured and follows best practices.The
TagVariant
enum provides a type-safe way to represent color variants, following TypeScript best practices for creating constants. The naming convention is consistent and clear, enhancing code readability and maintainability.
43-44
: LGTM:CasesResponse
class updates improve type safety and consistency.The changes to the
CasesResponse
class, including updating thestate
property type toStateTag
and usingTagVariant
enum values in thefromInternalCasesResponse
method, improve type safety and maintain consistency with the newStateTag
class. The logic for setting the color based on the case state remains intact and clear.Also applies to: 56-58
apps/judicial-system/digital-mailbox-api/src/app/modules/cases/models/subpoena.response.ts (5)
15-21
: LGTM: Well-defined enum for alert message typesThe addition of the
AlertMessageType
enum is a good practice. It provides a clear set of allowed values for alert message types, improving type safety and preventing the use of invalid values. The naming convention follows the standard uppercase snake case for TypeScript enums.
31-35
: LGTM: Appropriate additions to DefenderInfo classThe new optional properties
canEdit
andcourtContactInfo
are well-defined and properly decorated. They maintain consistency with the existing code style and improve the flexibility of theDefenderInfo
class by allowing for additional information when available.
51-52
: LGTM: Flexible addition of alerts to SubpoenaDataThe new
alerts
property in theSubpoenaData
class is well-defined. Using an array ofAlertMessage
objects allows for multiple alerts, providing flexibility in the response structure. Making it optional is appropriate, as there might not always be alerts to display.
105-115
: LGTM: Good use of new properties and conditional logicThe changes to the
data
object in thefromInternalCaseResponse
method are well-implemented. The addition of thehasBeenServed
property and the conditionalalerts
array make good use of the new structures defined earlier in the file. The logic ensures that a success message is only added when the subpoena has been served, which is appropriate.
148-151
: LGTM: Well-implemented additions to defenderInfoThe new properties
canEdit
andcourtContactInfo
in thedefenderInfo
object are well-implemented. The logic for setting these properties based on thecanChangeDefenseChoice
variable is appropriate. The use of the translation function forcourtContactInfo
is good for internationalization support.
) * feat(j-s): Return acknowledged info for case in digital mailbox API * feat(j-s): New info and cleanup for law and order * Update subpoena.response.ts * Update subpoena.response.ts * Change tags and messages to enums * Update case.response.ts * fix(j-s): Added subtitle for subpoena response --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Birtingar - Mínar Síður - verjandi + alert message
What
Checklist:
Summary by CodeRabbit
Release Notes
New Features
TagVariant
enumeration for standardized color options in case states.StateTag
class to encapsulate state properties, improving data structure clarity.AlertMessageType
enum to categorize alert messages in subpoenas.DefenderInfo
class with optional propertiescanEdit
andcourtContactInfo
for enhanced user interaction.SubpoenaData
to include analerts
array for better tracking of subpoena statuses.address
property to theInstitution
interface for improved data representation.Bug Fixes
Documentation