[OPEN-ILS-DEV] Modifications to Circ Matrix Matchpoint checking
Mike Rylander
mrylander at gmail.com
Thu Sep 9 09:47:43 EDT 2010
There as been a /lot/ of discussion surrounding this functionality on
IRC over the last week, just to let everyone here know that it's not
being ignored.
More below.
On Tue, Sep 7, 2010 at 4:29 PM, Thomas Berezansky <tsbere at mvlc.org> wrote:
> My previous email included a patch that was, unfortunately, just the tip of
> the iceberg, so to speak. I have since figured out a lot of what needs to be
> done to do this on the backend.
>
> However, in looking at what needs to be done, I came up with several
> questions as to how to handle things.
>
> Currently the circulation flag, duration rule, recurring fine rule, and max
> fine rule are on my list of things to have "fall through".
>
> I am unsure as to whether or not to have the total copy hold ratio or the
> available copy hold ratio values fall through or not. They are not
> "endpoint" data, but at the same time may be considered to be an important
> part of the checks.
>
> In that regard, I see three logical options:
> 1 - Don't have them fall through. If they aren't set on the first matchpoint
> found, they aren't set.
> 2 - Have them fall through until we run out of rules or they are filled,
> like the four values above.
> 3 - Have them fall through, but only until we have filled the other four
> values. Once the other four values are filled we officially stop checking
> them.
>
> I am partial to 1 or 3 in this case.
>
After discussion, option 3 seems sane and has gained general
consensus. One point I brought up was, how do you tell the system
that you do /not/ want to use an inherited test value and also don't
want to supply a value? IOW, what if you don't want to test a
copy-hold ratio and yet some broader rule does set a value for one of
these tests?
The answer is that a value of 0 (zero) acts the same as "don't test"
since all possible values will pass.
> The other main issue I am seeing right now is the circ mod test. In
> particular, the current system uses the matchpoint ID for the check. As my
> changes make it so that there is more than one matchpoint ID possibly
> involved there are several options:
>
> 1 - Negate the check when there is more than one matchpoint used in the
> final result
> 2 - Use only the first matchpoint found for the check
> 3 - Have it use all matchpoints that were considered for the check (were
> valid and before we filled in our values)
> 4 - Have it use all matchpoints that contributed to the check (were valid,
> before we filled in our values, AND set at least one value)
>
> I am partial to 3 in this case, as that would allow for creating a
> matchpoint that would be specifically for triggering that limit, without
> changing any of the resulting rules.
>
This question has not been addressed yet. I think that without
broader input, and in fact outside requests, we need to sit on this
one. I understand the argument for the flexibility of 3, but these
matchpoints and rulesets can already be very complicated, and the
potential for SAAD is high. Consider:
* matchpoint 1 (closest match) supplies all but max fine rule, and
has a circ-mod test for "book" that limits the user to 10 items out
* matchpoint 2 (fall-through by group) supplies the max fine rule,
and also has a circ-mod test for "book", but sets the limit at 5 items
out
Which do we honor? And, like the question about copy-hold ratios, how
do we say "do NOT test per-circ-mod items out at all"? There are no
magic values here, and the benefit of flexibility IMO is outweighed by
the complexity of getting it right from a user perspective.
> Any thoughts?
>
All that said, I think this is some awesome work. Thanks, Thomas!
--miker
> Thomas Berezansky
> Merrimack Valley Library Consortium
>
>
> Quoting Thomas Berezansky <tsbere at mvlc.org>:
>
>> Theory:
>> Make the things returned (circulate, duration_rule, recurring_fine_rule,
>> max_fine_rule) "fall through" when set to NULL.
>>
>> The attached patch attempts to make this happen on the back end, but
>> provides no front end interface changes for configuring it.
>>
>> IT HAS NOT BEEN TESTED, mainly because I don't want to screw with our
>> test system right now when others may be trying to test existing
>> functionality.
>>
>> It also adds in the ability to pass in one more (optional) boolean
>> parameter to the function to return the entire list of rules used to
>> create the final result, intended for "debug/test" front end functionality
>> to show what rules were considered in the fall-through checking.
>>
>> Pros:
>>
>> You can override a subset of those fields with a specific rule while
>> allowing broader rules to fill in the holes.
>> This may result in less duplication of information across rules, making
>> things easier to maintain.
>> Thus, this may result in less rules in general, and thus less processing
>> time on sorting them overall.
>>
>> Cons:
>>
>> Manually figuring out the specifics of what will happen will take more
>> time/effort.
>> Changing a single rule may have a greater unintended effect on other
>> rules.
>> Staff would need training for when to have a rule fall through and when
>> to set it.
>> More time to return from the DB for any rule that is "falling through" to
>> broader rules.
>>
>> Examples for the following org tree:
>>
>> CONS
>> -SYSA
>> --LIBC
>> --LIBD
>> -SYSB
>> --LIBE
>> --LIBF
>>
>> Implementing the following "business" rules:
>>
>> At the CONS level:
>> By default, everything circulates, uses DFLT_DUR duration, DFLT_RFINE
>> recurring fine, and DFLT_MFINE max fine.
>> Circ Modifier "book" uses the duration BOOK_DUR
>> Reference flagged materials don't circulate
>>
>> At the SYSA level there are no special rules.
>>
>> At the SYSB level the max fine should be SYSB_MFINE.
>>
>> At the LIBC level the recurring fine is LIBC_RFINE
>>
>> At the LIBD level circ modifier "book" uses the DFLT_DUR duration instead
>> of "BOOK_DUR"
>>
>> At the LIBE level reference flagged materials circulate.
>>
>> At the LIBF level there are no special rules.
>>
>> The current method would require the following circ rules to implement
>> those business rules:
>>
>> CIRC_LIB CIRC_MOD REFERENCE CIRC? DURATION_RULE RECURRING_FINE MAX_FINE
>> CONS NULL NULL TRUE DFLT_DUR DFLT_RFINE DFLT_MFINE
>> CONS NULL TRUE FALSE DFLT_DUR DFLT_RFINE DFLT_MFINE
>> CONS book NULL TRUE BOOK_DUR DFLT_RFINE DFLT_MFINE
>> CONS book TRUE FALSE BOOK_DUR DFLT_RFINE DFLT_MFINE
>> SYSB NULL NULL TRUE DFLT_DUR DFLT_RFINE SYSB_MFINE
>> SYSB NULL TRUE FALSE DFLT_DUR DFLT_RFINE SYSB_MFINE
>> SYSB book NULL TRUE BOOK_DUR DFLT_RFINE SYSB_MFINE
>> SYSB book TRUE FALSE BOOK_DUR DFLT_RFINE SYSB_MFINE
>> LIBC NULL NULL TRUE DFLT_DUR LIBC_RFINE DFLT_MFINE
>> LIBC NULL TRUE FALSE DFLT_DUR LIBC_RFINE DFLT_MFINE
>> LIBC book NULL TRUE BOOK_DUR LIBC_RFINE DFLT_MFINE
>> LIBC book TRUE FALSE BOOK_DUR LIBC_RFINE DFLT_MFINE
>> LIBD book NULL TRUE DFLT_DUR DFLT_RFINE DFLT_MFINE
>> LIBD book TRUE FALSE DFLT_DUR DFLT_RFINE DFLT_MFINE
>> LIBE NULL NULL TRUE DFLT_DUR DFLT_RFINE SYSB_MFINE
>> LIBE book NULL TRUE BOOK_DUR DFLT_RFINE SYSB_MFINE
>>
>> 16 circ rules total.
>>
>> The new method would require the following circ rules to implement those
>> business rules:
>>
>> CIRC_LIB CIRC_MOD REFERENCE CIRC? DURATION_RULE RECURRING_FINE MAX_FINE
>> CONS NULL NULL TRUE DFLT_DUR DFLT_RFINE DFLT_MFINE
>> CONS book NULL NULL BOOK_DUR NULL NULL
>> CONS NULL TRUE FALSE NULL NULL NULL
>> SYSB NULL NULL NULL NULL NULL SYSB_MFINE
>> LIBC NULL NULL NULL NULL LIBC_RFINE NULL
>> LIBD book NULL NULL DFLT_DUR NULL NULL
>> LIBE NULL TRUE TRUE NULL NULL NULL
>>
>> 7 circ rules total.
>>
>> Starting with the above, lets assume that SYSA wants to change their
>> recurring fine to SYSA_RFINE.
>> LIBC's recurring fine is to be unchanged.
>>
>> The current method requires the following changes:
>>
>> ADD the following entries:
>> CIRC_LIB CIRC_MOD REFERENCE CIRC? DURATION_RULE RECURRING_FINE MAX_FINE
>> SYSA NULL NULL TRUE DFLT_DUR SYSA_RFINE DFLT_MFINE
>> SYSA NULL TRUE FALSE DFLT_DUR SYSA_RFINE DFLT_MFINE
>> SYSA book NULL TRUE BOOK_DUR SYSA_RFINE DFLT_MFINE
>> SYSA book TRUE FALSE BOOK_DUR SYSA_RFINE DFLT_MFINE
>>
>> UPDATE the LIBD entries:
>> CIRC_LIB CIRC_MOD REFERENCE CIRC? DURATION_RULE RECURRING_FINE MAX_FINE
>> LIBD book NULL TRUE DFLT_DUR SYSA_RFINE DFLT_MFINE
>> LIBD book TRUE FALSE DFLT_DUR SYSA_RFINE DFLT_MFINE
>>
>> 4 rules added, 2 changed, total is now 20 rules.
>>
>> The new method would require the following changes:
>>
>> ADD the following entry:
>> CIRC_LIB CIRC_MOD REFERENCE CIRC? DURATION_RULE RECURRING_FINE MAX_FINE
>> SYSA NULL NULL NULL NULL SYSA_RFINE NULL
>>
>> 1 rule added, 0 changed, total is now 8 rules.
>>
>> Thomas Berezansky
>> Merrimack Valley Library Consortium
>>
>
>
>
--
Mike Rylander
| VP, Research and Design
| Equinox Software, Inc. / The Evergreen Experts
| phone: 1-877-OPEN-ILS (673-6457)
| email: miker at esilibrary.com
| web: http://www.esilibrary.com
More information about the Open-ils-dev
mailing list