Skip Navigation
Custom Software Development: LACI Upgrades

Request for Proposals

Welcome to our Request for Proposals (RFP) page for LACI Upgrades.

We are seeking qualified vendors to submit proposals for evaluating software solutions that align with our business needs and objectives. This RFP outlines the project scope, requirements, and evaluation criteria to ensure we select the best-fit solution. If your company is equipped to assist in this evaluation process, we invite you to review the details below and submit your proposal by the specified deadline.

Proposals are due by 5:00 PM on March 15, 2025.

We look forward to partnering with a team that shares our commitment to innovation, efficiency, and quality.

2025 LSLA RFP for LACI Upgrades

Frequently Asked Questions

We would like to preview the code mentioned in the RFP: “The code is available under the Affero GNU General Public License version 3 (or later) and can be found in the repository at https://codeberg.org/LACI/laci-code.“ But the link provided results in a 404 error. Are you able to provide another source for preview?

 

Yes, apologies for the typo. The source code is available at codeberg.org/LACI.

For the DocumentChange entity in Milestone 2, can you confirm whether an immutable, unique version identifier (e.g., a UUID v4 or a composite key combining a timestamp with a sequential counter) is required in addition to the standard fields (EntityReference, Status, Users, and Dates) to guarantee complete auditability and traceability in environments where rapid document updates may occur?

 

The DocumentChange entity will either be implemented as a Drupal Entity or a Drupal node bundle (“Content Type”), and as such, will be given a UUID by the underlying Drupal framework already.

For Milestone 2's DocumentChange notifications, can you confirm that the system must automatically trigger email alerts via a configurable SMTP relay immediately when a DocumentChange record transitions to “Pending,” with the notification payload including a JSON object that details the document’s unique identifier, timestamp, initiating user’s ID, and current status? Moreover, should this notification mechanism support fallback options such as SMS or webhook alerts in case of SMTP failure?

 

The notification subsystem is already in place, please see the current codebase. The creation of the payload, which is compiled in \Drupal\laci_core\Service\LaciReporter, will need to be modified to conform to the requirements of Milestone 2.

In the AuthorityError entity requirements for Milestone 2, can you confirm that every HTTP error encountered during authority checks must be logged with full details, including HTTP status code, response body, request URL, timestamp, and retry count—and that an alert is to be generated only after a configurable threshold (e.g., three consecutive identical errors) is reached? Also, should the system differentiate between transient network errors and persistent HTTP errors by applying distinct thresholds or exponential backoff strategies?

 

Only a “Change-eligible” Authority check will need to create an AuthorityError record. There are Authority checks that can be triggered manually that are not Change-eligible; these are typically all Authority checks other than are done on a scheduled basis in \Drupal\laci_core\Service\LaciScheduler. The system currently does differentiate between transient and permanent errors, although admittedly imperfectly to date. Transient errors are typically connection errors such as timeouts, many SSL issues, and HTTP 5xx responses. Permanent errors would be connection errors such as “host not found”, any HTTP 3xx response, and any HTTP 4xx response.

For the AuthoritiesReview section specified in Milestone 2, can you confirm that the interface should support dynamic collapse/expand functionality for individual DocumentChange records, allowing users to drill down into detailed audit trails with options to filter and sort by timestamp, status, and initiating user using LSLA’s Drupal component framework and adhering to the established UI/UX style guide?

 

For that part of the specification, as well as anywhere else that has a question mark or words like “probably” or “should”, we’re looking for a proposal that fits the general intent of the description. Collapsing such detail from the AuthoritiesReview section of the Document view page, or detail on the Authority view page, is intended to enhance the user experience on those pages. If you can figure out how to make filtering work in a usable fashion, as well as any other proposed enhancement, that would be great.

For the granular authority parsing requirement in Milestone 3, can you confirm that the parser must accurately support hierarchical legal citations up to three sub-levels (e.g., "12 CFR 1002.2(c)(2)") while also recognizing full chapter or part references (e.g., "Tex. Prop. Code 24") using a configurable, rule-based parsing engine (such as tailored regular expressions) to distinguish between section-level and aggregate references?

 

The parser should support as many sub-levels (not just three) as possible, as well as recognizing full chapter or part references.

Regarding the redline/diff functionality in Milestone 4, can you confirm that the diff engine should operate at a word-level granularity by employing a robust algorithm (e.g., diff-match-patch), explicitly ignoring variations in whitespace and non-substantive formatting unless such differences have demonstrable legal implications, in which case they must trigger a distinct alert mechanism?

 

Addressing each of those separately: (1) while the example in the RFP implied word-level granularity, we do need to know about character-level changes, especially punctuation. (2) ignoring whitespace is probably appropriate. (3) the code doesn’t need to try to analyze the legal implications of any changes.

Regarding the redline/diff functionality, can you confirm that it should be fully embedded within the existing LACI Drupal interface as a core module (not as a standalone or external plugin), incorporating LSLA’s standardized UI/UX components, user role management, and centralized configuration, to ensure seamless interoperability and consistent user experience across the platform?

 

Yes, this should be a LACI Drupal module, consistent with the existing LACI UI/UX scheme, and consistent with existing roles and permissions. The redline/diff functionality should not allow a user to perform functions in its Drupal application with any expanded permissions.

In Milestone 5, regarding the interactive XPath element selection module, can you confirm that the tool should auto-generate the XPath expression using DOM analysis and heuristic algorithms while still permitting manual editing in an editable field for precise fine-tuning of dynamic page elements?

 

The tool should auto-generate a candidate XPath expression and present it to the viewer as an editable field before saving. It should be possible to edit the field without using the interactive XPath element selector.

For the interactive XPath selection tool in Milestone 5, can you confirm that the solution should leverage standardized browser inspection protocols such as integrating Chrome’s DevTools Protocol and Firefox’s Remote Debugging API to ensure that dynamic DOM elements are consistently captured and that the computed XPath expressions remain identical across both browsers, even when handling asynchronous content loading or complex shadow DOM structures?

 

That’s a good question and it addresses an under-specification of Milestone 5. The XPath selection tool can but does not have to use browser inspection tools. In fact, the representation of a web page that LACI retrieves when it checks the page is the page source. No javascript is executed to render any DOM elements. This does imply that some pages are not possible to monitor with LACI if their entire content is rendered with javascript; this is the case today.

Any XPath expression that LACI uses to extract part of a page for monitoring purposes will work on the page source, not on any asynchronous loaded content, or any shadow DOM structures.

In Milestone 5, can you confirm that the interactive XPath selector must support both the initial selection and subsequent re-selection of a monitored element, ensuring that each selection is immediately indicated by a non-customizable, fixed visual highlight (such as a pre-defined border color or overlay) that updates in real time?

 

This tool is being used by non-technical legal personnel (attorneys, paralegals, and other staff).Having an immediate visual indication of a selection (and an updated selection)  seems like the most usable way to accomplish this milestone. However, if you have an approach that will work for this purpose that does not require immediate visual indication of a selection (and an updated selection) then please describe the approach in detail so we can evaluate it appropriately.

For handling legal texts, can you confirm that the parser must incorporate dedicated modules for both HTML web pages and PDF documents leveraging libraries such as DOMDocument with XPath for HTML and tools like Apache PDFBox for PDFs to address format-specific nuances such as embedded tables, images, or OCR challenges in scanned documents?

 

We don’t anticipate a need to update the parser for HTML web pages and general PDF documents. For statutes and rules that may be published in PDF documents, we currently use a PHP parser to extract text from those documents; we don’t currently need a tool that will also use OCR to process a scanned document, nor do we currently see a need to handle embedded tables or images.

If you have ideas for improvements that you’d like to include in your bid, please consider breaking the cost of those out separately so that, if necessary, we can compare your cost of implementing the functionality required by the RFP to other bids that don’t include additional improvements.

What was the annual spend for the previous year on this Project?

 

Thank you for this question. The Request is for a fixed price proposal for the work described, so as such, that information is not relevant to a proposal.

If this is a new Contract, what is the annual Budget for this?

 

Thank you for this question. The Request is for a fixed price proposal for the work described, not an annual budget.

Are you open to a hybrid delivery model with a mix of offshore and onshore resources?

 

At this time, I think we do not see any impediments with working with an organization that has personnel outside of the United States. You should be aware of the following:

  • All payments will be in US Dollars to an entity based in the United States.
  • Any disputes would be handled by courts in the state of Texas.
  • The contract would be interpreted under Texas law.
  • We would need to have a contact on your side who would be available, on request and/or on a regular basis, to resolve issues during our business hours.

Will it be on-site or remote?

 

All work will be performed remotely and coordinated through our existing GIT repositories.

Is there an extension on the submission deadline?

 

The current deadline for submissions is March 15, 2025 as outlined in the RFP document.

Could you please provide a 1 or 2-week extension in the RFP submission deadline?

 

In the interest of fairness to all parties, we will not provide an extension. Should we find a need to re-issue the RFP we will do so with a new deadline.

What is the Submission mode for this RFP?

 

The submission mode for the RFP is outlined in the “Preferred Method of Contact” section of the RFP. Please send a proposal via email by the deadline.

Phase 3 is about the ability to respond to document changes at varying levels of granularity, such as at the sub-section level or at the chapter level, and states as a requirement the development of a common (XML) representation of retrieved information (statute sections). Phase 5 is about an interactive interface to specify the above granularity. The two seem to overlap since the first cannot happen without the second: getting Phase 3 implies Phase 5. Please confirm.

 

[Phase] 3 is meant to only apply to statutes, regulations, and court rules. It is not meant to apply to general web pages. Such statutes, regulations, and rules MAY be retrieved from web pages but are not always. In the current version of LACI, these Authorities will be of [sub]types “Federal Code”, “Federal Regulation”, “Federal Rules of Civil Procedure”, “Federal Rules of Evidence”, “Texas Statute”, “Texas Administrative Code”, “Texas Rules of Civil Procedure”, and “Texas Rules of Evidence”.

[Phase] 5 only applies to generic web pages being monitored. These Authorities are of type “General Website” and do not overlap with the Authorities covered in [Phase] 3, so technically work can happen on both in parallel.

Software must continue working with the most recent point release of Drupal 10 (e.g. 10.5) available before contract end”. By the time we start, we expect to have to code for Drupal 11 or, at a minimum, on a more recent version of Drupal than that of the existing code. Since a major part of new code is expected to touch existing LACI code, and since it would not make sense for LSLA to carry multiple versions of Drupal, who will be responsible for upgrading the existing LACI code to the newer version of Drupal?

 

Drupal 11 is already available, see https://www.drupal.org/about/core/policies/core-release-cycles/release-process-overview. We would prefer any new code to be compatible with Drupal 11, but we don’t expect to test LACI in a Drupal 11 environment as part of this project. It would be acceptable for you to develop code in a Drupal 11 environment; however, deliverables must also be able to execute correctly in our production Drupal 10 environment to be accepted.

When do you expect vendor selection to be finalized? We’re looking to get a general sense of your ideal kickoff timing.

 

Vendor selection will be finalized once we’ve signed a contract with a vendor. We would like that to take place in time to start this development in June 2025.